在运行广播联接时,BigQuery可以做谓词下推吗?

时间:2018-12-19 22:06:54

标签: google-bigquery

是否可以在执行广播联接时使BigQuery使用谓词下推?将其命名为“谓词下推”可能是错误的,因为这样的想法是BQ在检查广播数据中是否有匹配的数据之前,不应从“大”表中“实现”整行。

如果我从一个带有很多列(700多个)的大表中进行筛选,并且条件简单,并且条件使它只能找到几行,那么查询运行很快,我发现筛选条件是在读取步骤中使用。我认为这是因为BQ在具体化每一行之前先检查条件。

现在,如果我使用与一个小尺寸的表,基本上应用了类似的过滤条件,但条件是通过广播联接来进行的,查询变得非常慢,并且使用了更多的时隙。在执行细节中,它显示了首先对连接的两面都执行READ步骤,然后对广播连接进行了处理。在这种情况下,是否有办法使其做谓词下推?我是否应该为此提出功能请求?

具有简单谓词的快速查询:

SELECT *
FROM `sales`
WHERE 
  sales_date = '2018-12-01' -- partition pruning condition
  AND phone_number = '5552859865' -- lookup by phone number
LIMIT 10

通过广播联接使用相同谓词进行缓慢查询。这不是一个真正的查询,它只是为了演示问题而设计的。如果省略了“ if”条件,则BQ会意识到它可以使用常量,并且会使用谓词下推。

SELECT t.*
FROM (
  SELECT if(tran_num is null, '555', '5552859865') as phone_number
  FROM `sales`
  WHERE sales_date = '2018-12-01'
  LIMIT 1) t0
JOIN `sales` t USING (phone_number)
WHERE sales_date = '2018-12-01'
LIMIT 1000

0 个答案:

没有答案