分区表对使用 BigQuery 的联接有影响吗?



如果我有两个分区表并使用主键连接这两个表,则使用 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 可以解决此问题。

最新更新