Google bigquery 如果使用子查询,Google大查询查询完整表的费用

Google bigquery 如果使用子查询,Google大查询查询完整表的费用,google-bigquery,billing,legacy-sql,Google Bigquery,Billing,Legacy Sql,我有一个分区表,并试图将搜索限制在几个分区内。为此,我使用遗留SQL运行一个查询,如下所示: SELECT * FROM [project:dataset.table] WHERE _PARTITIONTIME >= "2018-07-10 00:00:00" AND _PARTITIONTIME < "2018-07-11 00:00:00" AND col IN ( SELECT col FROM [project:dataset.ta

我有一个分区表,并试图将搜索限制在几个分区内。为此,我使用遗留SQL运行一个查询,如下所示:

SELECT
  *
FROM
  [project:dataset.table]
WHERE
  _PARTITIONTIME >= "2018-07-10 00:00:00"
  AND _PARTITIONTIME < "2018-07-11 00:00:00"
  AND col IN (
  SELECT
    col
  FROM
    [project:dataset.table]
  WHERE
    _PARTITIONTIME >= "2018-07-10 00:00:00"
    AND _PARTITIONTIME < "2018-07-11 00:00:00"
    AND col2 > 0)
我使用_PARTITIONTIME限制了主查询和子查询,因此大查询应该只需要搜索那些分区。当我运行这个查询时,我会收到账单,好像我只是查询了整个表而没有使用_PARTITIONTIME。为什么会发生这种情况

更新
使用标准SQL的等效查询没有此问题,因此请将其用作解决方法。我还是想知道为什么会发生这种情况。如果这只是一个bug,或者如果遗留SQL确实尝试访问表中的所有数据以进行这样的查询

如问题中所述,切换到standardSQL是正确的解决方案。您不应该期望对传统SQL方言进行任何大的更新,而standardSQL将不断得到一些实质性的更新

还请注意,目前有两种类型的分区表:

按摄取时间划分的表 基于时间戳或日期列进行分区的表 如果尝试使用旧SQL查询第二种类型:

SELECT COUNT(*)
FROM [fh-bigquery:wikipedia_v2.pageviews_2018]
WHERE datehour BETWEEN "2018-01-01 00:00:00" AND "2018-01-02 00:00:00" 
查询在旧版SQL中不支持的字段上分区的表时出现错误

同时,这项工作:

#standardSQL
SELECT COUNT(*)
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE datehour BETWEEN "2018-01-01 00:00:00" AND "2018-01-02 00:00:00" 

我添加这些要点是为了增强信息,现在是时候切换到standardSQL以充分利用BigQuery了。

如问题所述,切换到standardSQL是正确的解决方案。您不应该期望对传统SQL方言进行任何大的更新,而standardSQL将不断得到一些实质性的更新

还请注意,目前有两种类型的分区表:

按摄取时间划分的表 基于时间戳或日期列进行分区的表 如果尝试使用旧SQL查询第二种类型:

SELECT COUNT(*)
FROM [fh-bigquery:wikipedia_v2.pageviews_2018]
WHERE datehour BETWEEN "2018-01-01 00:00:00" AND "2018-01-02 00:00:00" 
查询在旧版SQL中不支持的字段上分区的表时出现错误

同时,这项工作:

#standardSQL
SELECT COUNT(*)
FROM `fh-bigquery.wikipedia_v2.pageviews_2018`
WHERE datehour BETWEEN "2018-01-01 00:00:00" AND "2018-01-02 00:00:00" 

我添加这些要点是为了增强信息,现在是时候切换到standardSQL以充分利用BigQuery了。

我认为这是BigQuery遗留SQL特有的问题

这里有一个关于何时以及何时明确提到遗留SQL的案例列表-在遗留SQL中,_PARTITIONTIME筛选器仅在以下情况下工作。。。
我在这个列表中看不到您的具体情况,但是最好的方法就是在这里使用标准SQL

我认为这是一个BigQuery遗留SQL特定的问题

这里有一个关于何时以及何时明确提到遗留SQL的案例列表-在遗留SQL中,_PARTITIONTIME筛选器仅在以下情况下工作。。。 我在这个列表中看不到您的具体情况,但最好的方法就是在这里使用标准SQL