获取项目中所有表的Table_Id以及行数

时间:2018-11-29 13:08:25

标签: google-bigquery

我的一个项目中有100多个数据集,我想获取这50个数据集中的每个表的Table_id * No_of_rows。

我可以使用以下查询获取数据集的元数据。

SELECT
  Project_id,
  dataset_id,
  table_id,
  row_count
FROM
  Project.dataset.__TABLES__

我可以为每个数据集执行此操作(但这将需要100次迭代)。有没有更好的办法??

1 个答案:

答案 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__设置为正确,就可以在所有数据集中运行命令?