【问题标题】:Partitioning a table in BigQuery by file按文件对 BigQuery 中的表进行分区
【发布时间】:2021-11-26 05:55:24
【问题描述】:

我想创建一个基于文件名分区的表。例如,假设我有一千个销售文件,每个日期一个,例如:

  • Files/Sales_2014-01-01.csv, Files/Sales_2014-01-02.csv, ...

我想根据文件名(本质上是日期)对表进行分区。有没有办法在 BQ 中做到这一点?例如,我想做一个类似于以下的加载工作(在伪代码中):

bq load gs://Files/Sales*.csv PARTITION BY filename

我能做的最接近的事情是什么?

【问题讨论】:

  • 如果我们看这里...cloud.google.com/bigquery/docs/partitioned-tables 我们会看到关于分区表的讨论。文件“内部”是什么?每个文件是否包含每条记录都有一个销售日期字段的记录?在这种情况下,这不意味着如果你只是加载它就会被分区吗?
  • @Kolban ha,是的,当然会。感谢您指出这一点!

标签: sql google-bigquery partition


【解决方案1】:

当表中有 TIMESTAMP、DATE 或 DATETIME 列时,首先使用 Time-unit column partitioning 创建一个 partitioned table。当您将数据加载到表中时,BigQuery 会根据列中的值自动将数据放入正确的分区中。 create an empty partitioned table for time-unit column-partitioned 使用 bq CLI,请参考以下命令:

  bq mk -t \
  --schema 'ts:DATE,qtr:STRING,sales:FLOAT' \
  --time_partitioning_field ts \
  --time_partitioning_type DAILY \
  mydataset.mytable

然后将所有销售文件加载到该时间单位列分区表中。它会自动将数据放入正确的分区。以下命令将 gs://mybucket/ 中的多个文件中的数据加载到 mydataset 中名为 mytable 的表中。架构将被自动检测。请参阅此link 了解更多信息。

  bq load \
  --autodetect \
  --source_format=CSV \
  mydataset.mytable \
  gs://mybucket/mydata*.csv

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    • 2022-01-09
    • 2021-07-24
    • 1970-01-01
    相关资源
    最近更新 更多