为什么 Query_parallelism 会影响两个 UUID 列之间的连接结果

Why Query_parallelism affects the result of a join between two UUID columns

我运行在ignite 2.10.0上进行了以下测试

我用 query_parallelism=1 创建了 2 个表,但没有关联键。 当我加入以下 2 个表时,我得到了预期的结果。

0: jdbc:ignite:thin://localhost:10800> SELECT "id" AS "_A_id", "source_id" AS "_A_source_id" FROM PUBLIC."source_ml_blue";
+--------------------------------------+--------------------------------------+
|                _A_id                 |             _A_source_id             |
+--------------------------------------+--------------------------------------+
| 86c068cd-da89-11eb-a185-3da86c6c6bb3 | 86c068cc-da89-11eb-a185-3da86c6c6bb3 |
+--------------------------------------+--------------------------------------+
1 row selected (0.004 seconds)
0: jdbc:ignite:thin://localhost:10800> SELECT "id" AS "_B_id", "flx_src_ip_text" AS "_B_src_ip" FROM PUBLIC."source_nprobe_tcp_blue";
+--------------------------------------+-----------+
|                _B_id                 | _B_src_ip |
+--------------------------------------+-----------+
| 86c068cc-da89-11eb-a185-3da86c6c6bb3 | 1.1.1.1   |
+--------------------------------------+-----------+
1 row selected (0.003 seconds)
0: jdbc:ignite:thin://localhost:10800> SELECT _A."id" AS "_A_id", _A."source_id" AS "_A_source_id", _B."id"  AS "_B_id", _B."flx_src_ip_text" AS "_B_src_ip" FROM PUBLIC."source_ml_blue" AS "_A" INNER JOIN  PUBLIC."source_nprobe_tcp_blue" AS "_B" ON "_A"."source_id"="_B"."id";
+--------------------------------------+--------------------------------------+--------------------------------------+-----------+
|                _A_id                 |             _A_source_id             |                _B_id                 | _B_src_ip |
+--------------------------------------+--------------------------------------+--------------------------------------+-----------+
| 86c068cd-da89-11eb-a185-3da86c6c6bb3 | 86c068cc-da89-11eb-a185-3da86c6c6bb3 | 86c068cc-da89-11eb-a185-3da86c6c6bb3 | 1.1.1.1   |
+--------------------------------------+--------------------------------------+--------------------------------------+-----------+
1 row selected (0.005 seconds)

如果我删除并创建具有 query_parallelism = 8 的相同表,我不会出现 SQL 错误(2 个表的并行度相等)但是连接的结果是空的。

知道我为什么会出现这种行为吗?

问题来自 SQL 客户端:它必须了解并行性。

在 DBeaver 上,我必须在连接属性中启用 ignite.jdbc.distributedJoins 才能使请求正常工作。

您观察到此行为是因为对并行查询执行进行了优化。您的记录很可能落入不同的分区(由不同的线程处理)。如果您增加两个表中的记录数,您将看到此连接的一个子集。 这里最优雅的选择是让 "_A"."source_id""_B"."id"affinity keysignite.jdbc.distributedJoins 很可能会影响集群安装的性能。亲和力搭配将使匹配 "_A"."source_id""_B"."id" 的项目驻留在同一分区中,以避免跨分区交互(对于集群环境,它会导致额外的网络跃点)。