Hi我想根据大表中的Event_type将一个大的bigquery表(100亿事件记录(拆分为多个表。
请注意,事件表是按时间/天/event_time进行分区的。进一步假设它是一年的数据(365天(
让我们假设event_type=['signup','page-view']
我的方法:
- 为事件类型创建一个新表
- 为每天的每个事件类型运行并插入作业[我也将在python脚本中使用dml]
我的问题:
- 我应该使用什么加载作业类型:复制还是加载作业
- 我可以将加载作业排队到谷歌大查询吗?[它会异步工作吗?]
- 谷歌大查询会并行处理这个加载作业吗
- 除了使用多处理来加快进程之外,我还需要做什么吗?[加载作业由bigquery处理,如果我可以在作业中排队,则不需要在客户端进行任何多处理]
任何指向有效解决方案的指针都将受到高度赞赏。
您可以根据自己的需求使用查询作业。加载作业用于将数据从GCS存储桶或本地文件摄取到BigQuery中。
查询作业的配额和限制可以在此处找到。这些配额和限制适用于通过运行交互式查询、计划查询自动创建的查询作业,以及通过使用jobs.query和query-type jobs.insert API方法提交的作业。在一个项目中,每个用户每秒最多可以发出300个并发API请求。
使用jobs.insert
方法的查询作业将异步执行。使用Python客户端库(如您所愿(也可以实现同样的效果,如下所示。有关详细信息,请参阅本文档。
from google.cloud import bigquery
# Construct a BigQuery client object.
client = bigquery.Client()
# TODO(developer): Set table_id to the ID of the destination table.
# table_id = "your-project.your_dataset.your_table_name"
job_config = bigquery.QueryJobConfig(destination=table_id)
sql = """
SELECT corpus
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus;
"""
# Start the query, passing in the extra configuration.
query_job = client.query(sql, job_config=job_config) # Make an API request.
query_job.result() # Wait for the job to complete.
print("Query results loaded to the table {}".format(table_id))
由于作业将同时运行,因此不需要实现显式多处理。