BigQuery、日期分区表和装饰器
Posted
技术标签:
【中文标题】BigQuery、日期分区表和装饰器【英文标题】:BigQuery, date partitioned tables and decorator 【发布时间】:2017-01-18 22:44:16 【问题描述】:我熟悉使用 表装饰器 来查询表,例如一周前的表或在特定日期范围内插入的数据。
引入日期分区表揭示了一个名为_PARTITIONTIME
的伪列。使用 date 装饰器 语法,您可以将记录添加到表中的某个分区。
我想知道在幕后是否也使用伪列 _PARTITIONTIME
来支持表装饰器或其他简单的东西。
如果是,是否可以访问/更改它,就像我们对分区表的伪列所做的那样?
是叫_PARTITIONTIME
还是_INSERTIONTIME
?当然,两者都没有奏效。 :)
【问题讨论】:
【参考方案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 在分区表中的主要用法。我问的是表装饰器的等价物,它允许我们根据插入时间访问记录。它是否也围绕隐藏/伪列?它可以访问吗?如何?谢谢 没有记录表装饰器的实现细节,因此无法回答这个问题,但很可能他们没有使用您可以修改的列。以上是关于BigQuery、日期分区表和装饰器的主要内容,如果未能解决你的问题,请参考以下文章
是否可以使用“$”装饰器访问标准 SQL 中的 BigQuery 分区?