【问题标题】:BigQuery, date partitioned tables and decoratorBigQuery、日期分区表和装饰器
【发布时间】:2017-01-18 22:44:16
【问题描述】:

我熟悉使用 表装饰器 来查询表,例如一周前的表或在特定日期范围内插入的数据。

引入日期分区表揭示了一个名为_PARTITIONTIME 的伪列。使用 date 装饰器 语法,您可以将记录添加到表中的某个分区。

我想知道在幕后是否也使用伪列 _PARTITIONTIME 来支持表装饰器或其他简单的东西。

如果是,是否可以访问/更改它,就像我们对分区表的伪列所做的那样?

是叫_PARTITIONTIME 还是_INSERTIONTIME?当然,两者都没有奏效。 :)

【问题讨论】:

    标签: google-bigquery decorator


    【解决方案1】:

    首先通过读取分区检查表是否确实被分区

     SELECT TIMESTAMP(partition_id)
      FROM [dataset.partitioned_table$__PARTITIONS_SUMMARY__]
    

    如果不是你会得到错误:Cannot read partition information from a table that is not partitioned

    然后是另一个重要步骤:要选择_PARTITIONTIME 的值,您必须使用别名。

    SELECT
      _PARTITIONTIME AS pt,
      field1
    FROM
      mydataset.table1
    

    但是当你在 WHERE 中使用时,它不是强制性的,只有在选择时才可以。

    #legacySQL
    SELECT
      field1
    FROM
      mydataset.table1
    WHERE
      _PARTITIONTIME > DATE_ADD(TIMESTAMP('2016-04-15'), -5, "DAY")
    

    您始终可以使用装饰器引用一个分区表:mydataset.table$20160519

    【讨论】:

    • 谢谢。您描述了 _PARTITIONTIME 在分区表中的主要用法。我问的是表装饰器的等价物,它允许我们根据插入时间访问记录。它是否也围绕隐藏/伪列?它可以访问吗?如何?谢谢
    • 没有记录表装饰器的实现细节,因此无法回答这个问题,但很可能他们没有使用您可以修改的列。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多