Google cloud platform 将多个分区表从源项目复制到BigQuery中目标项目中的另一个分区表

Google cloud platform 将多个分区表从源项目复制到BigQuery中目标项目中的另一个分区表,google-cloud-platform,google-bigquery,Google Cloud Platform,Google Bigquery,我在prod环境中有一个分区表(有一年的日期分区),我想将所有这些分区复制到驻留在dev环境中的另一个分区表中。我怎么能一次完成呢 我尝试过这个命令,但它一次只复制一个分区 bq cp-a':.U20180605':。 我可以从用逗号分隔的源表中一次选择多个表,但如果我没有按如下所述指定目标表日期分区,那么它将创建具有相同名称的新表..而不是在先前创建的分区表中追加数据 bq cp-a':.U20180605': 如何一次性将所有分区从源表复制到目标表?是否有任何查询或bq命令来执行此操作 根据

我在prod环境中有一个分区表(有一年的日期分区),我想将所有这些分区复制到驻留在dev环境中的另一个分区表中。我怎么能一次完成呢

我尝试过这个命令,但它一次只复制一个分区

bq cp-a':.U20180605':。 我可以从用逗号分隔的源表中一次选择多个表,但如果我没有按如下所述指定目标表日期分区,那么它将创建具有相同名称的新表..而不是在先前创建的分区表中追加数据

bq cp-a':.U20180605':


如何一次性将所有分区从源表复制到目标表?是否有任何查询或bq命令来执行此操作

根据的文档:“源表必须指定为逗号分隔的列表。”

因此,我可以向您推荐3种备选方案:

首先:如果已分区的表包含一个带有分区日期的列,您可以创建一个bq命令来选择所需的分区日期,将列表保存在文件中,并使用bash命令执行它。因此,您可以将所有表附加到所需的目标表中。语法如下所示:

您可以阅读有关bq命令行的更多信息

Second:在shell脚本中,列出所有时间戳分区并进行查询,然后将每个表追加到已创建的分区目标表中。语法是:


我希望它能有所帮助。

您的源表看起来像每日表,每天一个表,而不是BigQuery分区表。目标表是BigQuery分区表吗?如果希望表1的副本在一个数据集中出现在另一个数据集中,只需复制该表即可。无需事先创建目标表。或者,如果要强制覆盖目标表中的数据,则在bq命令中使用-f标志。
bq query --format=csv --nouse_legacy_sql '
SELECT
  CONCAT('bq cp -a <sourceproj>:<dataset>.<table>$', partition_name, ' <testproj>:<dataset>.Partitioned_Destination_Table')
FROM (
  SELECT
    DISTINCT FORMAT_DATETIME('%Y%m%d',
      CAST(_PARTITIONDATE AS datetime)) partition_name
  FROM
    `<sourceproj>.<dataset>.<table>`
  WHERE
    _PARTITIONTIME >= "start_date"
    AND _PARTITIONTIME < "end_date")' > output.csv
bash output.csv
tables=("20200107"  "20200106"  "20200105"  "20200104")

   for val in ${tables[*]}; do
        bq cp -a <project1>:<dataset1>.<table1_$val> <project2>:<dataset2>.<Partitioned_Destination_Table>
   done
 bq mk --transfer_config --project_id=[PROJECT_ID] --data_source=[DATA_SOURCE] --target_dataset=[DATASET] --display_name=[NAME] --params='[PARAMETERS]'