如果我有两个分区表并使用主键连接这两个表,则使用 BigQuery。
它对连接部分的性能有什么影响吗? 如果字段未分区,它将以不同的方式执行?
是的,BigQuery 使用"join"优化其执行查询计划,但这取决于查询的结构。您需要对查询使用一些规则,以便使用"join"对分区表获得最佳性能。您可以看到以下示例:
我创建了两个带有字段"event_timestamp"的分区表。我将把这两个表合并起来。
CREATE TABLE `table1` ( event_timestamp TIMESTAMP, id INT64 )
PARTITION BY DATE(event_timestamp);
CREATE TABLE `table2` ( event_timestamp TIMESTAMP, id INT64 )
PARTITION BY DATE(event_timestamp);
我创建了一个视图。在这种情况下,我加入了表 1 和表 2。
CREATE VIEW `view1` AS
SELECT t1.event_timestamp,t1.id
FROM `table1` t1
INNER JOIN `table2` t2
USING (id)
WHERE TIMESTAMP_TRUNC(t1.event_timestamp, quarter) = TIMESTAMP_TRUNC(t2.event_timestamp, quarter)
如果我执行此查询。
SELECT *
FROM view1
WHERE event_timestamp BETWEEN '2020-01-01' AND '2020-04-01'
在这种情况下,视图仅修剪第一个表中的分区。
Yo可以看到这个例子:
SELECT t1.event_timestamp,t1.id
FROM table1 t1
INNER JOIN table2 t2
USING (id)
WHERE t1.event_timestamp BETWEEN '2022-01-01' AND '2022-04-01'
AND t2.event_timestamp BETWEEN '2022-01-01' AND '2022-04-01'
查询修剪了两个表的分区。
如果要join
两个分区表,并在两个表中使用用作分区的列。将扫描所有表。 动态修剪不通过子查询或联接工作。有一个公共功能请求,您可以点击此链接。没有 ETA 可以解决此问题。