Bigquery 查询计划产生未知输出

Bigquery query plan produce unknown output

我试图更好地理解 BigQuery queryPlan,并尝试使用该 queryPlan 在列级别建立数据沿袭。

一切顺利,READCOMPUTE等……都还算可以理解,然后跨了JOIN一步。使用一个简单的查询,将两个 table 连接在一个列上,并从两个 table 输出列:

CREATE OR REPLACE TABLE wrk_dataset.t1 AS ( select 1 as t1f1 );
CREATE OR REPLACE TABLE wrk_dataset.t2 AS ( select 1 as t2f1 );

SELECT t1f1 AS t3f1,
       t1f1 AS t3f2, 
       t2f1 AS t3f3,
FROM   wrk_dataset.t1
JOIN   wrk_dataset.t2
  ON   t1f1 = t2f1

我在 queryPlan 中得到了这些步骤:

S00: 输入

READ    :t2f1
        FROM wrk_dataset.t2

WRITE   
        TO __stage00_output

S02:输出

READ    :t1f1
        FROM wrk_dataset.t1

READ    
        FROM __stage00_output

JOIN    INNER HASH JOIN EACH WITH ALL ON  = 

WRITE   , 
        TO __stage02_output 

所以一开始,一切都很好,

然后它变得复杂:该步骤输出 </code> 和 <code>,但它们的乘积是什么?同样在我的 SELECT 中,我要求 3 列(其中 2 列相同),所以我可以 猜测 </code> 可能是 <code>t1f1 </code> 是 <code>t2f1 但仅通过查看 SELECT.

是不是像其他框架一样只看计划就知道查询结果?

编辑

所以,显然只是一个简单的 READ 比我想的更难理解。

SELECT id, id FROM ( select 1 as id )

给我那个查询计划:

COMPUTE      := 1
WRITE       
            TO __stage00_output 

所以我想我无法通过仅查看 queryPlan 来确定 table 的架构,这将是我的查询结果?

查询计划不可能。发送到最后一步的 $variables TO __stage00_output 包含要发送到输出的列数据。如果重复,则不会发送多次。它只会在最终输出中显示多次(因为从一步到另一步多次传递相同的信息没有意义。)

如果没有重复的列,可以认为是输出模式的表示,但最好不要使用。查询计划旨在用于通过监视其执行时间等来排除故障并识别查询的瓶颈..