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、日期分区表和装饰器的主要内容,如果未能解决你的问题,请参考以下文章

列中的 BigQuery 日期分区

是否可以使用“$”装饰器访问标准 SQL 中的 BigQuery 分区?

从 Dataflow python 作业写入 bigquery 中的分区表

Bigquery 表装饰器 绝对时间使用

BigQuery 表设计最佳实践:日期分区和分片的组合?

BigQuery 日期分区视图