Google bigquery 仅扫描筛选行的列

Google bigquery 仅扫描筛选行的列,google-bigquery,bigquery-standard-sql,Google Bigquery,Bigquery Standard Sql,使用BigQuery是否可以只扫描某些条件为true的行 请考虑: SELECT col1, col2 FROM table1 WHERE col1 = 'text1' 假设一半的行具有col1equaltext1,另一半具有text2 通过上面的查询,BigQuery将扫描整个表的col1和col2,然后通过where子句过滤出行 有没有办法在筛选完行后读取col2?给出您评论中的答案:获取自动导入到BigQuery中的表,然后进行优化,以便进一步查询 例如,创建表后,请执行以下操作: CR

使用BigQuery是否可以只扫描某些条件为true的行

请考虑:

SELECT col1, col2 FROM table1 WHERE col1 = 'text1'
假设一半的行具有
col1
equal
text1
,另一半具有
text2

通过上面的查询,BigQuery将扫描整个表的
col1
col2
,然后通过
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

这背后的原因是什么?你为什么认为你需要这个?因为成本?如果是这样的话,这不会改变成本,因为不管怎样,整个col2都会被扫描!除非您可以通过col1Well对表进行分区和选择性集群,否则这就回答了我的问题。是的,我担心成本。我觉得扫描col2是浪费时间的,而在我的实际应用程序中,它只与10%的行相关。在我的应用程序中,col2由重复记录组成,因此有大量数据需要考虑集群(如果适用于您的数据),这些表会从Firebase Analytics自动导出到BigQuery。我不确定集群是否适用。在我的应用程序中,col2由重复记录组成,因此,当引用col2时,每个记录都将被扫描,并且我无法限制处理的数据,这是否正确?谢谢。我的表中有
event_date
(字符串,“20190815”)和
event_timestamp
(int64156584367102067)。你知道我是否可以用这个按日期分区吗?创建一个新列,用实际日期
日期(TIMESTAMP_MICROS(1565843367102067))
,并按它分区