首页 文章

需要Google BigQuery Legacy语法帮助

提问于
浏览
0

我在将Google BigQuery语句从标准SQL转换为旧版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

    一些建议,尽管您可能希望通过将 #standardSQL 放在查询的顶部来强制标准SQL联系Tableau _3007169 .

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

相关问题