仅为过滤的行扫描列
Scan column only for filtered rows
是否可以使用 BigQuery 仅扫描满足某些条件的行的列?
请考虑:
SELECT col1, col2 FROM table1 WHERE col1 = 'text1'
假设一半的行 col1
等于 text1
而另一半的行 text2
.
对于上面的查询,BigQuery 将扫描 col1
和 col2
以获得整个 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
是否可以使用 BigQuery 仅扫描满足某些条件的行的列?
请考虑:
SELECT col1, col2 FROM table1 WHERE col1 = 'text1'
假设一半的行 col1
等于 text1
而另一半的行 text2
.
对于上面的查询,BigQuery 将扫描 col1
和 col2
以获得整个 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