跨区域(从美国到欧盟)移动分区表



我正在尝试将分区表从美国移动到欧盟区域,但每当我设法这样做时,它都不会在正确的列上对表进行分区。

我目前采取的过程是:

  • 在我希望分区表所在的区域中创建存储桶
  • 通过 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 个优点:

  1. 导入 CSV 格式时,请定义所需的 REAL 类型。请记住,在架构自动检测中,Bigquery 会查看大约 10 或 20 行并推断架构。通常,字符串字段设置为INTEGER,但我文件的第一行不包含字母,只包含数字(例如序列号(
  2. 您可以正确定义分区字段

该过程很容易编写脚本。我使用 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 文件使事情变得更容易。

最新更新