【问题标题】:Big Query copy partition tables within certain rangeBig Query 复制一定范围内的分区表
【发布时间】:2018-05-14 10:47:48
【问题描述】:

我在 BigQuery 中有生产数据集和测试数据集。两者都以天为单位进行分区(都具有 _PARTITIONTIME 列)。

我有没有办法将特定范围内的生产数据集(使用 bq cp 函数)分区表复制到测试数据集?例如:在过去 1 个月内。

如果我只想复制 1 个分区表,我只会使用 $[yyyymmdd] 关键字来选择那 1 个分区表,但我会尽量避免使用逗号 30 次来选择一个月的分区表。

我知道可以使用 _PARTITIONTIME >= "2018-01-01 00:00:00" AND _PARTITIONTIME

是否也可以为copy做类似的事情?

谢谢

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    答案是否定的。 您可以使用 bq 命令编写简单的脚本来执行此操作。

    或者您可以生成 bq 命令来执行此操作:

    #standardSQL
    SELECT
      CONCAT('bq cp <srcproj>:<dataset>.<table>$', partname, ' <testproj>:<dataset>.<table>$', partname)
    FROM (
      SELECT
        DISTINCT FORMAT_DATETIME('%Y%m%d',
          CAST(_PARTITIONDATE AS datetime)) partname
      FROM
        `<srcproj>.<dataset>.<table>`
      WHERE
        _PARTITIONTIME >= "2018-05-10 00:00:00"
        AND _PARTITIONTIME < "2018-05-13 00:00:00")
    

    【讨论】:

    • 哎呀.. 我有大约 20 个表需要复制.. :( 我可能会编写一个简单的程序来生成 bash 脚本..
    • 我仍然建议使用我给你的查询来生成列表。它将正确处理丢失的分区,因为它直接从 BQ 元数据构建列表。所以基本上你的 bash 脚本只会循环遍历 20 个表的列表并为所有内容转储 bq cp 命令?。如果你觉得有用,请不要忘记投票回答?
    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    相关资源
    最近更新 更多