我们在BigQuery中有一个按日分区的表,它是通过流插入更新的。
文档说:“当流到分区表时,流缓冲区中的数据对于_PARTITIONTIME伪列有一个空值”。
但是,如果我查询select count(*) from table where _PARTITIONTIME is NULL
,它总是返回0,尽管bq show
告诉我流缓冲区中有很多行。
这是否意味着流缓冲区中的行根本不存在伪列?在任何情况下,如何只在流缓冲区中查询数据,而不使其成为全表扫描?
提前感谢
发布于 2017-02-02 07:51:51
流缓冲区中的数据具有_PARTITIONTIME
列的_PARTITIONTIME
值。
SELECT
fields
FROM
`dataset.partitioned_table_name`
WHERE
_PARTITIONTIME IS NULL
发布于 2017-01-26 01:12:14
当您将数据流到BQ时,通常会有“热身”周期,这就是流数据可用于查询、复制和导出等操作所需的时间。
文档最后指出,经过长达90分钟的时间后,伪列_PARTITIONTIME
接收到一个非空值,这意味着您的流数据已经为您想要在数据上运行的任何类型的操作做好了充分准备(能够运行查询通常需要几秒钟)。
这意味着当该字段为null时,您不需要查询分区表查找,而是这样做:
SELECT
fields
FROM
`dataset.partitioned_table_name`
WHERE
_PARTITIONTIME = TIMESTAMP('2017-01-20')
在本例中,您将只查询日期分区Jan/20中的流数据(这避免了全表扫描)。
您也可以选择一个日期范围,您只需将WHERE
子句更改为:
WHERE _PARTITIONTIME BETWEEN TIMESTAMP('2017-01-20') AND TIMESTAMP('2017-01-22')
会在你的桌子上查询两天。
https://stackoverflow.com/questions/41864257
复制相似问题