首页 文章

将许多BigQuery表导出为一个

提问于
浏览 1306
1

我们正在开始从许多表中提取数据并写入单个表的bigquery查询 . 我们使用Python来运行带有参数的作业:

job = bq_client.run_async_query(jobname, select_query)
job.destination = bq_table
job.write_disposition = 'WRITE_APPEND'

500个工作岗位将在20个时候开始 . 不幸的是,我们会定期遇到错误:

超出速率限制:此表的表更新操作太多 . 有关详细信息,请参阅https://cloud.google.com/bigquery/troubleshooting-errors

问题:

  • 这是由于bigquery作业/查询对单个目标表的写入次数过多吗?如果是这样,我很惊讶Google并没有在内部限制bigquery作业的写入吞吐量 .

  • 如果是这种情况,我们很难同时测量可以并行执行的作业数,因为每个选择查询的dataload存在很大差异 . 有什么办法可以避免或处理这些错误?退避并重试?

编辑:

这些查询针对的是Google Analytics 360数据 . 例如:

SELECT
  ...
FROM [{datasetname}.ga_sessions_{date}];

每个数据集可以是不同的数据集,并查询许多日期 .

我不能分享对列的计算,但也许这足以提出一种合并这些查询的方法 .

1 回答

  • 1

    假设SELECT List对于所有查询都是相同的

    用于BigQuery标准SQL

    #standardSQL
    SELECT ... FROM `{datasetname1}.ga_sessions_{date}` UNION ALL   
    SELECT ... FROM `{datasetname2}.ga_sessions_{date}` UNION ALL
    ...   
    SELECT ... FROM `{datasetnameN}.ga_sessions_{date}`
    

    for BigQuery Legacy SQL

    #legacySQL
    SELECT ... FROM
      (SELECT ... FROM [{datasetname1}.ga_sessions_{date}]),  
      (SELECT ... FROM [{datasetname2}.ga_sessions_{date}]),  
      ...   
      (SELECT ... FROM [{datasetnameN}.ga_sessions_{date}])
    

相关问题