需要Google BigQuery旧语法帮助

时间:2016-10-27 20:36:12

标签: google-bigquery

我在从标准SQL转换Google BigQuery语句时遇到了麻烦 到旧版SQL。对于上下文,我发布了标准SQL和相应的表模式。

简而言之......下面的代码选择了最新的' (AS-IS)版本的 用于报告的产品层次结构。这是通过在标准SQL中使用STRUCT来完成的。 我不确定如何在旧版SQL中执行此操作。

任何帮助将不胜感激! clbarrineau

标准SQL示例

    
SELECT    STR_NBR
,         SKU
,         SKU_CRT_DT
,         DS.*
,         (
           SELECT AS STRUCT
                     X.*
           FROM  (
                 SELECT  *
                 ,       ROW_NUMBER() OVER(ORDER BY EFF_BGN_DT DESC) AS ROW_NUM
                 FROM    SLS.PROD_HIER
                 ) AS X
           WHERE ROW_NUM = 1
           ) AS P_HIER
FROM      `XXXX.YYYY.SKU_STR_SLS_20141201` SLS
,         UNNEST(DAILY_SALES) AS DS;


Schema Definition
STR_NBR--------------------------------STRING-----------NULLABLE
SKU------------------------------------INTEGER----------NULLABLE
SKU_CRT_DT-----------------------------DATE-------------NULLABLE
DAILY_SALES----------------------------RECORD-----------REPEATED
DAILY_SALES.SLS_DT---------------------DATE-------------NULLABLE
DAILY_SALES.*(many other attributes) --XXXX-------------XXXX
PROD_HIER------------------------------RECORD-----------REPEATED
PROD_HIER.eff_bgn_dt-------------------DATE-------------NULLABLE
PROD_HIER.*(many other attributes) ----XXXX-------------XXXX

1 个答案:

答案 0 :(得分:0)

一些建议,但您可能希望联系Tableau的支持,询问能够使用标准SQL的状态。在某些工具中,可以通过将#standardSQL放在查询的顶部来强制使用标准SQL。

对于旧版SQL,您需要使用FLATTEN而不是UNNEST的逗号运算符。比如FLATTEN(XXXX.YYYY.SKU_STR_SLS_20141201, DAILY_SALES.SLS_DT)之类的东西。但是,由于您希望在展平之前计算行数,因此可能需要将FLATTEN应用于子查询本身。我的遗留SQL有点生疏,所以我不想让你误导一个非功能性的查询,但是看看有关FLATTEN的其他一些SO问题,看看它是如何使用的。