将许多BigQuery表导出为一个

时间:2017-07-25 18:06:26

标签: python google-bigquery

我们正在开始从许多表中提取数据并写入单个表的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 个答案:

答案 0 :(得分:1)

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

for BigQuery Standard 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}])