0
stage
というスキーマ内のさまざまなテーブルにあるすべての顧客名をクリーンアップするツールを実装しています。顧客名は列billing_acc_name
またはcust_acc_names
から来る可能性があります。私は事前にどのくらいのテーブルがこれらの列を持っているかはわかりませんが、そうである限り、それらはクリーンアップの一部になります。Postgres PL/pgSQLさまざまなテーブルに存在するカラムを統合する
ただし、クリーンアップする前に、スキーマ内のテーブル全体で一意の顧客名をすべて選択する必要があります。
私はPL/pgSQLでこれを実装することを検討しています。現在、これは自動生成されたSQLクエリ文字列私はこのPythonで/パンダ/ SQLAlchemyのなどを実装していますか
table_name = 'information_schema.columns'
table_schema_src = 'stage'
cols = ['billing_acc_name', 'cust_acc_name']
# get list of all table names and column names to query in stage schema
sql = text(f"""
SELECT table_name, column_name FROM {table_name} WHERE table_schema ='{table_schema_src}'
AND column_name = ANY(ARRAY{cols})
""")
src = pd.read_sql(sql, con=engine)
# explore implementation in pgsql
# establish query string
cnames = []
for i, row in src.iterrows():
s = text(f"""
SELECT DISTINCT upper({row['column_name']}) AS cname FROM stage.{row['table_name']}
""")
cnames.append(str(s).strip())
sql = ' UNION '.join(cnames)
df = pd.read_sql(sql, con=engine)
で以下のようにします:
SELECT DISTINCT upper(cust_acc_name) AS cname FROM stage.journal_2017_companyA UNION
SELECT DISTINCT upper(billing_acc_name) AS cname FROM stage.journal_2017_companyA UNION
SELECT DISTINCT upper(cust_acc_name) AS cname FROM stage.journal_2017_companyB UNION
SELECT DISTINCT upper(billing_acc_name) AS cname FROM stage.journal_2017_companyB UNION
SELECT DISTINCT upper(cust_acc_name) AS cname FROM stage.journal_2017_companyC UNION
SELECT DISTINCT upper(billing_acc_name) AS cname FROM stage.journal_2017_companyC UNION
SELECT DISTINCT upper(cust_acc_name) AS cname FROM stage.journal_2017_companyD UNION
SELECT DISTINCT upper(billing_acc_name) AS cname FROM stage.journal_2017_companyD
はテストされ、素晴らしい仕事をしました。あまりにも素晴らしい。 – idazuwaika