我正在尝试将分区表从美国移动到欧盟区域,但每当我设法这样做时,它都不会在正确的列上对表进行分区。
我目前采取的过程是:
- 在我希望分区表所在的区域中创建存储桶
- 通过 CSV 将分区表导出到原始存储桶(在旧区域内(
- 跨存储桶传输表(从原始存储桶传输到新存储桶(
- 使用新存储桶中的 CSV 创建新表(自动检测架构已打开(
bq --location=eu load --autodetect --source_format=CSV table_test_set.test_table [project ID/test_table]
我希望该列在 DATE 列上分区,但它在 PARTITIONTIME 列上分区
另请注意,我目前正在使用 CLI 命令执行此操作。这将需要多次重做,因此必须具有可重用的代码。
当我将数据从一个表迁移到另一个表时,我遵循此过程
- 我将数据提取到 GCS(CSV 或其他格式(
- 我使用此命令将架构提取到源表
bq show --schema <dataset>.<table>
- 我通过 GUI 创建具有
edit as text
架构的目标表并粘贴它。我手动定义要从架构中使用的分区字段; - 我将数据从GCS加载到目标表。
此过程具有 2 个优点:
- 导入 CSV 格式时,请定义所需的 REAL 类型。请记住,在架构自动检测中,Bigquery 会查看大约 10 或 20 行并推断架构。通常,字符串字段设置为INTEGER,但我文件的第一行不包含字母,只包含数字(例如序列号(
- 您可以正确定义分区字段
该过程很容易编写脚本。我使用 GUI 创建目标表,但bq
命令行非常适合做同样的事情。
经过更多的挖掘,我设法找到了解决方案。通过使用"--time_partitioning_field[列名]",您可以按特定列进行分区。因此,该命令将如下所示:
bq --location=eu --schema [JSON 架构文件所在的位置] load --time_partitioning_field [列名] --source_format=NEWLINE_DELIMITED_JSON table_test_set.test_table [项目 ID/test_table]
我还发现使用 JSON 文件使事情变得更容易。