我们的项目费用很高。看起来此类命令未使用分区。 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
答案 0 :(得分:0)
需要解析查询的多个阶段才能解析谓词的复杂查询(例如内部查询或子查询),不会从查询中删除分区。
...
以下查询不修剪分区(请注意使用子查询):
#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;