仅为过滤的行扫描列

Scan column only for filtered rows

是否可以使用 BigQuery 仅扫描满足某些条件的行的列?

请考虑:

SELECT col1, col2 FROM table1 WHERE col1 = 'text1'

假设一半的行 col1 等于 text1 而另一半的行 text2.

对于上面的查询,BigQuery 将扫描 col1col2 以获得整个 table,然后通过 where 子句过滤掉行。

有没有办法在过滤行后读取 col2

鉴于您评论中的答案:将自动导入到BigQuery中的表进行优化,以供进一步查询。

例如,创建表后,执行此操作:

CREATE OR REPLACE TABLE `mydataset.mytable`
PARTITION BY DATE(timestamp_column)
CLUSTER BY col1
AS
SELECT *
FROM `original.table`

如果 col1 恰好是一个嵌套列,那么您可以这样做:

CREATE OR REPLACE TABLE `mydataset.mytable`
PARTITION BY DATE(timestamp_column)
CLUSTER BY col1_u
AS
SELECT *, col1_u
FROM `original.table`, UNNEST(col1) col1_u

如果每日数据不足以进行聚类,请考虑按年份进行分区:

CREATE OR REPLACE TABLE `mydataset.mytable`
PARTITION BY ts_year
CLUSTER BY col1_u
AS
SELECT *, col1_u, TIMESTAMP_TRUNC(ts_column, YEAR) ts_year
FROM `original.table`, UNNEST(col1) col1_u