【问题标题】:Big Query specify _PARTITIONTIME when inserting from one table into anotherBig Query 在从一个表插入到另一个表时指定 _PARTITIONTIME
【发布时间】:2017-12-12 14:30:08
【问题描述】:

我有两个 Big Query 表,t1t2,它们都包含 _PARTITIONTIME 列。

我的目标是将行从t2 插入到t1 中,以保持_PARTITIONTIME

有没有办法将INSERT_PARTITIONTIME 作为选定变量?

或者有没有办法在插入行后追溯定义_PARTITIONTIME 列?

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    目前您可以使用partition decorators 写入分区

    [TABLE_NAME]$20160501

    但是有一个高请求功能正在进行中,这将允许您选择一个列并将其用作分区日。

    为了写入 20 个不同的分区,您需要创建至少 20 个不同的查询和写入,如 here 所述

    bq query --allow_large_results --replace --noflatten_results \
    --destination_table 'mydataset.temps$20160101' \
    'SELECT stn,temp from [bigquery-public-data:noaa_gsod.gsod2016] WHERE mo="01" AND da="01" limit 100'
    
    bq query --allow_large_results --replace --noflatten_results \
    --destination_table 'mydataset.temps$20160102' \
    'SELECT stn,temp from [bigquery-public-data:noaa_gsod.gsod2016] WHERE mo="01" AND da="02" limit 100'
    

    更多解决方案在这里解决: Migrating from non-partitioned to Partitioned tables

    【讨论】:

      【解决方案2】:

      我不知道这是什么时候实现的,但它确实有效!

      当您使用 DML 语句将行添加到摄取时间时 分区表,可以指定行所在的分区 应该添加。您使用 _PARTITIONTIME 引用分区 伪列。

      INSERT INTO PROJECT_ID.DATASET.t2 (_PARTITIONTIME, field1, field2) 
      SELECT _PARTITIONTIME, field1, field2
      FROM PROJECT_ID.DATASET.t1
      

      https://cloud.google.com/bigquery/docs/using-dml-with-partitioned-tables#inserting_data_into_ingestion-time_partitioned_tables

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-08-01
        • 2014-07-29
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多