48 lines
1.8 KiB
Python
48 lines
1.8 KiB
Python
import sqlite3
|
|||
|
|
|
||
|
|
def audit_sales_table():
|
||
|
|
conn = sqlite3.connect('data/hiffi_catalog.db')
|
||
|
|
cur = conn.cursor()
|
||
|
|
|
||
|
|
# 1. Check schema
|
||
|
|
cur.execute("PRAGMA table_info(commercial_sales)")
|
||
|
|
columns = [c[1] for c in cur.fetchall()]
|
||
|
|
|
||
|
|
if not columns:
|
||
|
|
print("❌ ERROR: commercial_sales table does not exist in the database.")
|
||
|
|
conn.close()
|
||
|
|
return
|
||
|
|
|
||
|
|
print(f"✅ Table Found. Columns: {', '.join(columns)}\n")
|
||
|
|
|
||
|
|
# 2. Check Provenance Flags distribution
|
||
|
|
try:
|
||
|
|
cur.execute("SELECT provenance_flag, COUNT(*) FROM commercial_sales GROUP BY provenance_flag")
|
||
|
|
flags = cur.fetchall()
|
||
|
|
print("Provenance Flag Distribution:")
|
||
|
|
for flag, count in flags:
|
||
|
|
print(f" - {flag}: {count} records")
|
||
|
|
|
||
|
|
# 3. Check for NULLs in critical format breakdown columns
|
||
|
|
cur.execute("""
|
||
|
|
SELECT
|
||
|
|
COUNT(*) as total,
|
||
|
|
SUM(CASE WHEN pure_album_sales IS NULL THEN 1 ELSE 0 END) as null_albums,
|
||
|
|
SUM(CASE WHEN physical_singles_sales IS NULL THEN 1 ELSE 0 END) as null_physical,
|
||
|
|
SUM(CASE WHEN digital_singles_sales IS NULL THEN 1 ELSE 0 END) as null_digital,
|
||
|
|
SUM(CASE WHEN streaming_eas IS NULL THEN 1 ELSE 0 END) as null_streaming
|
||
|
|
FROM commercial_sales
|
||
|
|
""")
|
||
|
|
nulls = cur.fetchone()
|
||
|
|
print("\nMissing Data (NULL check):")
|
||
|
|
print(f"Total Sales Records: {nulls[0]}")
|
||
|
|
print(f"Null Pure Albums: {nulls[1]} | Null Physical Singles: {nulls[2]}")
|
||
|
|
print(f"Null Digital Singles: {nulls[3]} | Null Streaming EAS: {nulls[4]}")
|
||
|
|
|
||
|
|
except sqlite3.OperationalError as e:
|
||
|
|
print(f"\n⚠️ Schema Error: {e}. The table is missing required columns.")
|
||
|
|
|
||
|
|
conn.close()
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
audit_sales_table()
|