删除数据时未使用Bigquery分区

时间:2018-11-13 06:18:32

标签: google-bigquery

我们的项目费用很高。看起来此类命令未使用分区。 bigquery中是否有一种方法可以根据子查询的结果来强制查询变得分区意识?

以下查询当前正在处理TB的数据。

    delete from tableName
    where QuoteDate >= cast((SELECT batch_date as start  from batch_table where  Batch_Status='Running') as timestamp)

处理1TB数据。

理想情况下,这只能处理数百MB的数据。

delete from TableName
    where
        QuoteDate >= '2018-11-01'

处理约100MB

2 个答案:

答案 0 :(得分:0)

来自the documentation

  

需要解析查询的多个阶段才能解析谓词的复杂查询(例如内部查询或子查询),不会从查询中删除分区。

...

  

以下查询不修剪分区(请注意使用子查询):

#standardSQL
SELECT
  t1.name,
  t2.category
FROM
  table1 t1
INNER JOIN
  table2 t2
ON
  t1.id_field = t2.field2
WHERE
  t1.ts = (SELECT timestamp from table3 where key = 2)

目前,您需要评估您单独提供的查询。

答案 1 :(得分:0)

使用BigQuery scripting(现在是Beta版),可以降低成本。

基本上,已定义脚本变量以捕获子查询的动态部分。然后在随后的查询中,脚本变量用作过滤器以修剪要扫描的分区。

DECLARE date_filter DATETIME 
  DEFAULT (SELECT batch_date from batch_table where  Batch_Status='Running');

delete from tableName
where QuoteDate >= date_filter;