GET_QUERY_OPERATOR_STATS 和 EXPLAIN 函数和命令:由数组表示的父运算符

注意

此行为变更在 2023_05 捆绑包中。

有关捆绑包的当前状态,请参阅 捆绑包历史记录

以下命令和函数提供有关查询执行的详细信息:

这些命令和函数的输出包括有关构成查询的运算符节点树中每个运算符节点的信息。

背景

当前,此信息包括用于识别单个父节点的列或属性。此功能不会处理运算符节点有多个父节点的情况。

例如,假设您正在生成以下查询的配置文件:

WITH wv AS (
    SELECT a FROM t WHERE a % 2 = 1
  )
  SELECT a FROM wv WHERE a % 3 = 1
  UNION ALL
  SELECT a FROM wv WHERE a % 5 = 1;
Copy

在此查询的配置文件中,WithClause [4] 节点有多个父节点:

查询配置文件中的运算符节点树

对于上述查询,GET_QUERY_OPERATOR_STATS 和 EXPLAIN 命令和函数的输出具有将 WithReference [3] 识别为父节点 WithClause [4] 的列或属性。但是,存在两个父节点: WithReference [3]WithReference [8]

输出变更

在当前版本中,父节点的现有列或属性被以下包含父节点 IDs 的数组的列或属性之一所取代:

SQL 命令或函数

现有列或属性

新列或属性

EXPLAIN 和 SYSTEM$EXPLAIN_PLAN_JSON

parent

parentOperators

GET_QUERY_OPERATOR_STATS

PARENT_OPERATOR_ID

PARENT_OPERATORS

EXPLAIN 命令和 EXPLAIN_JSON 函数的表输出变更

假设您执行了以下语句:

EXPLAIN WITH wv AS (
    SELECT a FROM t WHERE a % 2 = 1
  )
  SELECT a FROM wv WHERE a % 3 = 1
  UNION ALL
  SELECT a FROM wv WHERE a % 5 = 1;
Copy

输出变更如下所述:

之前:

输出包括父列,其中包含单个父节点 ID:

+------+------+--------+---------------+ ...
| step | id   | parent | operation     | ...
+------+------+--------+---------------+ ...
| NULL | NULL |   NULL | GlobalStats   | ...
|    1 |    0 |   NULL | Result        | ...
|    1 |    1 |      0 | UnionAll      | ...
|    1 |    2 |      1 | Filter        | ...
|    1 |    3 |      2 | WithReference | ...
|    1 |    4 |      3 | WithClause    | ...
...
现在:

输出包括 parentOperators 列,其中包含父节点 IDs 的数组:

+------+------+-----------------+---------------+ ...
| step | id   | parentOperators | operation     | ...
|------+------+-----------------+---------------+ ...
| NULL | NULL | NULL            | GlobalStats   | ...
|    1 |    0 | NULL            | Result        | ...
|    1 |    1 | [0]             | UnionAll      | ...
|    1 |    2 | [1]             | Filter        | ...
|    1 |    3 | [2]             | WithReference | ...
|    1 |    4 | [3, 8]          | WithClause    | ...
...

对于 EXPLAIN_JSON 函数,如果传递给该函数的计划不包含有关父运算符的信息,则 parentOperators 列将为 NULL。

EXPLAIN 命令和 SYSTEM$EXPLAIN_PLAN_JSON 的 JSON 输出中的变更

假设您执行了一条生成查询计划 JSON 输出的语句。例如:

EXPLAIN USING JSON WITH wv AS (
    SELECT a FROM t WHERE a % 2 = 1
  )
  SELECT a FROM wv WHERE a % 3 = 1
  UNION ALL
  SELECT a FROM wv WHERE a % 5 = 1;
Copy

输出变更如下所述:

之前:

输出包括父属性,其中包含单个父节点 ID:

{
  ...
  "Operations": [[
    ...
    {"id":1,"parent":0,"operation":"UnionAll"},
    {"id":2,"parent":1,"operation":"Filter", ...},
    {"id":3,"parent":2,"operation":"WithReference"},
    {"id":4,"parent":3,"operation":"WithClause", ...},
    ...
Copy
现在:

输出包括 parentOperators 属性,其中包含父节点 IDs 的数组:

{
  ...
  "Operations":[[
    ...
    {"id":1,"operation":"UnionAll","parentOperators":[0]},
    {"id":2,"operation":"Filter",... , "parentOperators":[1]},
    {"id":3,"operation":"WithReference","parentOperators":[2]},
    {"id":4,"operation":"WithClause",... ,"parentOperators":[3,8]},
    ...
Copy

GET_QUERY_OPERATOR_STATS 函数输出的变更

假设您执行了以下语句:

WITH wv AS (
    SELECT a FROM t WHERE a % 2 = 1
  )
  SELECT a FROM wv WHERE a % 3 = 1
  UNION ALL
  SELECT a FROM wv WHERE a % 5 = 1;
Copy
SET lid = LAST_QUERY_ID();
Copy
SELECT * FROM TABLE(GET_QUERY_OPERATOR_STATS($lid));
Copy

输出变更如下所述:

之前:

输出包括 PARENT_OPERATOR_ID 列,其中包含单个父节点 ID:

+-----+---------+-------------+--------------------+---------------+ ...
| ... | STEP_ID | OPERATOR_ID | PARENT_OPERATOR_ID | OPERATOR_TYPE | ...
+-----+---------+-------------+--------------------+---------------+ ...
| ... |       1 |           0 |               NULL | Result        | ...
| ... |       1 |           1 |                  0 | UnionAll      | ...
| ... |       1 |           2 |                  1 | Filter        | ...
| ... |       1 |           3 |                  2 | WithReference | ...
| ... |       1 |           4 |                  3 | WithClause    | ...
...
现在:

输出包括 PARENT_OPERATORS 列,其中包含父节点 IDs 的数组:

|-----+---------+-------------+------------------+---------------+ ...
| ... | STEP_ID | OPERATOR_ID | PARENT_OPERATORS | OPERATOR_TYPE | ...
|-----+---------+-------------+------------------+---------------+ ...
| ... |       1 |           0 | NULL             | Result        | ...
| ... |       1 |           1 | [                | UnionAll      | ...
|     |         |             |   0              |               | ...
|     |         |             | ]                |               | ...
| ... |       1 |           2 | [                | Filter        | ...
|     |         |             |   1              |               | ...
|     |         |             | ]                |               | ...
| ... |       1 |           3 | [                | WithReference | ...
|     |         |             |   2              |               | ...
|     |         |             | ]                |               | ...
| ... |       1 |           4 | [                | WithClause    | ...
|     |         |             |   3,             |               | ...
|     |         |             |   8              |               | ...
|     |         |             | ]                |               | ...
...

参考:1175

语言: 中文