如何使用 CLI bq 命令创建一次性数据集副本(无计划重复)

Hui*_*eng 2 google-bigquery

我想使用 bash 脚本在 BigQuery 中制作一次性数据集复制,从source_dataset_Atarget_dataset_B

这个操作在BigQuery Console中很容易完成,就像这样 在此输入图像描述

但是,如果我bq mk --transfer_config像下面那样使用,它将创建一个具有定期计划(“每 24 小时”)的数据集复制传输作业。

bq mk --transfer_config --project_id=data-project --data_source=cross_region_copy \
  --display_name='one-time-dataset-copy' \
  --target_dataset=target_dataset_B \
  --params='{"source_dataset_id":"source_dataset_A","source_project_id":"source_project","overwrite_destination_table":"true"}' \
Run Code Online (Sandbox Code Playgroud)

如何在 BigQuery 中进行一次性数据集复制?

Hui*_*eng 6

我花了一段时间才弄清楚如何做到这一点,但需要的是正确设置三个schedule标志bq

--schedule:数据传输时间表。如果数据源不支持自定义计划,则该字段应为空。如果为空,则将使用数据源的默认值。指定时间采用 UTC 时间。有效格式示例:每月的第一个、第三个星期一 15:30,一月、六月的每周三、星期五 13:15,以及季度的第一个星期日 00:00。

--schedule_end_time:停止给定传输配置调度传输运行的时间。如果为空,则结束时间的默认值将用于无限期地安排运行。时间戳的格式为 RFC3339 UTC“Zulu”。

--schedule_start_time:为给定传输配置开始调度传输运行的时间。如果为空,则将使用开始时间的默认值立即开始运行。时间戳的格式为 RFC3339 UTC“Zulu”。

要制作一次性副本,您需要设置具有正确开始和结束时间的计划,使其仅运行一次。

所以你可以这样做

bq mk --transfer_config --project_id=data-project --data_source=cross_region_copy \
  --display_name='one-time-dataset-copy' \
  --target_dataset=target_dataset \
  --params='{"source_dataset_id":"source_dataset","source_project_id":"source_project","overwrite_destination_table":"true"}' \
  --schedule_end_time=$(date -u -d '5 mins' +%Y-%m-%dT%H:%M:%SZ)
Run Code Online (Sandbox Code Playgroud)

这意味着每 24 小时(默认)设置一个数据集复制传输作业--schedule,计划立即开始--schedule_start_time default,计划从现在开始 5 分钟后结束 ( --schedule_end_time)。通过这样做,传输作业将仅触发一次且仅一次运行。