[如何从任何BigQuery表中读取数据并写入目标BQ表(使用bigquery.QueryJobConfig())时如何得到结果行数?

问题描述 投票:1回答:1

[我正在使用python客户端库对BigQuery进行一些读写操作,我想知道“ bigquery.QueryJobConfig()” API正在从源BQ表读取多少行。

我已经尝试过“ query_job._query_results.total_rows”,它是受保护的成员,但是它给了我目标BQ表中可用行的总数。我也尝试过“ results.total_rows”,但是即使源BQ表中有记录,它也始终没有输出。我也尝试过“结果= job.result(),页面= result.pages”,但因此没有预期的输出。

def main(request):

    query = "select * from `myproject.mydataset.mytable`"
    client = bigquery.Client()
    job_config = bigquery.QueryJobConfig()
    dest_dataset = client.dataset(destination_dataset, destination_project)
    dest_table = dest_dataset.table(destination_table)
    job_config.destination = dest_table
    job_config.create_disposition = 'CREATE_IF_NEEDED'
    job_config.write_disposition = 'WRITE_APPEND'
    job = client.query(query, location='US', job_config=job_config)
    job.result()
    results = query_job.result()
    print("Got {} rows.".format(results.total_rows))
    print("Got {} rows.".format(query_job._query_results.total_rows))


我想查询我的查询从源表(myproject.mydataset.mytable)中读取的总行数

基于我的知识,我正在准备一个解决方法,首先要获取结果行数,我将在执行BQ操作之前对目标表中存在的行进行计数,并在写入BQ操作之后再次对目标表中的行进行计数。两者相减将得到结果行数(newly_added_rows =(row_count_after.num_rows-row_count_before.num_rows)print(“ {}行被发现为查询结果” .format(newly_added_rows)))和(如果row_count_before.num_rows == row_count_after.num_rows)然后使用空结果集执行查询。只想知道我是否遵循正确的方法?

python-3.x api google-cloud-platform google-bigquery dml
1个回答
0
投票

[BigQuery执行作业时,该作业分为一系列查询阶段,在每个阶段您都可以获取每个阶段的输入和输出行数,查询计划说明使您可以获取此指标[1]

通过致电jobs.get您[2]可以检索工作详细信息,您将获得查询计划和时间轴信息。

[1] https://cloud.google.com/bigquery/query-plan-explanation

[2] https://cloud.google.com/bigquery/query-plan-explanation#api_sample_representation

© www.soinside.com 2019 - 2024. All rights reserved.