我的一个项目中有100多个数据集,我想获取这50个数据集中的每个表的Table_id * No_of_rows。
我可以使用以下查询获取数据集的元数据。
SELECT
Project_id,
dataset_id,
table_id,
row_count
FROM
Project.dataset.__TABLES__
我可以为每个数据集执行此操作(但这将需要100次迭代)。有没有更好的办法??
答案 0 :(得分:0)
您无法在单个查询中执行此操作,但是,我为您执行了以下python脚本:
from google.cloud import bigquery
client = bigquery.Client()
datasets = list(client.list_datasets())
project = client.project
if datasets:
totalTables=0
print('Datasets in project {}:'.format(project))
for dataset in datasets: # API request(s)
print('Dataset: {}'.format(dataset.dataset_id))
query_job = client.query("SELECT Project_id, dataset_id, table_id, row_count FROM "+dataset.dataset_id+".__TABLES__")
results = query_job.result()
for row in results:
print("\tTable: {} : {}".format(row.table_id, row.row_count))
totalTables=totalTables+int(row.row_count)
print("\n\nTotal number of rows: {}".format(totalTables))
else:
print('{} project does not contain any datasets.'.format(project))
只需运行它(例如在Cloud Shell中)。
编辑
我创建了this功能请求,以在BigQuery中使用__DATASETS__
选项。只需将FROM __DATASETS__.__TABLES__
设置为正确,就可以在所有数据集中运行命令?