如何从BigQuery表中提取全量列名及唯一列名列表
实现方案
优先推荐使用单次元数据查询实现,性能远高于循环逐表查询,可同时满足两个查询需求:
第一步:拉取全量表+列映射元数据
%%bigquery --project ProjectID col_meta_df SELECT table_name, column_name FROM tenjin.INFORMATION_SCHEMA.COLUMNS ORDER BY table_name, ordinal_position
第二步:输出两类结果
1. 所有表各自的列名列表
# 构造表-列映射字典 table_col_map = {} for _, row in col_meta_df.iterrows(): if row['table_name'] not in table_col_map: table_col_map[row['table_name']] = [] table_col_map[row['table_name']].append(row['column_name']) # 打印结果 for table, cols in table_col_map.items(): print(f"表名:{table}") print(f"列名列表:{cols}\n")
2. 全量唯一列名列表
unique_cols = sorted(col_meta_df['column_name'].unique().tolist()) print("全量唯一列名列表:", unique_cols)
循环逐表查询实现(适配你原有框架)
如果需要沿用你已有的循环框架,可以参考如下代码:
table_col_map = {} all_unique_cols = set() for table in all_tables: # 单表列名查询 query = f""" SELECT column_name FROM tenjin.INFORMATION_SCHEMA.COLUMNS WHERE table_name = '{table}' ORDER BY ordinal_position """ # 执行BigQuery查询 %bigquery --project ProjectID col_df --query query current_cols = col_df['column_name'].tolist() # 存入表映射 table_col_map[table] = current_cols # 加入全局去重集合 all_unique_cols.update(current_cols) # 输出所有表列名 print("===== 各表列名列表 =====") for table, cols in table_col_map.items(): print(f"{table}:{cols}") # 输出全量唯一列名 print("\n===== 全量唯一列名列表 =====") print(sorted(list(all_unique_cols)))
内容的提问来源于stack exchange,提问作者vish community
相关产品推荐
相关产品推荐

