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