如何根据event_type将谷歌bigquery中的大型事件表拆分为多个表



Hi我想根据大表中的Event_type将一个大的bigquery表(100亿事件记录(拆分为多个表。

请注意,事件表是按时间/天/event_time进行分区的。进一步假设它是一年的数据(365天(

让我们假设event_type=['signup','page-view']

我的方法:

  1. 为事件类型创建一个新表
  2. 为每天的每个事件类型运行并插入作业[我也将在python脚本中使用dml]

我的问题:

  1. 我应该使用什么加载作业类型:复制还是加载作业
  2. 我可以将加载作业排队到谷歌大查询吗?[它会异步工作吗?]
  3. 谷歌大查询会并行处理这个加载作业吗
  4. 除了使用多处理来加快进程之外,我还需要做什么吗?[加载作业由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))

由于作业将同时运行,因此不需要实现显式多处理。

最新更新