我在将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 回答
一些建议,尽管您可能希望通过将
#standardSQL
放在查询的顶部来强制标准SQL联系Tableau _3007169 .对于旧版SQL,您需要使用FLATTEN而不是
UNNEST
的逗号运算符 . 比如FLATTEN(XXXX.YYYY.SKU_STR_SLS_20141201, DAILY_SALES.SLS_DT)
之类的东西 . 但是,由于您希望在展平之前计算行数,因此可能需要将FLATTEN
应用于子查询本身 . 我的遗留SQL有点生疏,所以我不想让你误导一个非功能性的查询,但是看看有关FLATTEN
的其他一些SO问题,看看它是如何使用的 .