[英]Using sqlContext.sql for sub queries in scala
我創建了以下HIVE代碼,並要求對其進行翻譯以在scala中使用。 據我了解,我們需要使用sqlContext.sql在線可用的示例僅包含簡單的select語句, 就像下面的示例一樣。
例如,在scala中運行一個簡單的sql查詢:
val tableA = sqlContext.sql("Select * from game");
我似乎無法在下面的代碼中使用相同的語法。什么是翻譯下面的代碼以適應上面的用法的語法?
DROP TABLE ADW.TERA_BARCODE_LOOKUP_TABLE_RAW ;
CREATE TABLE ADW.TERA_BARCODE_LOOKUP_TABLE_RAW AS
SELECT CAST(BRCDE_REF_I AS STRING) AS BARCODE,
MAX(TRIM(GST_SRC_ID)) AS GST_SRC_ID,MAX(SRC_ACTV_TS) AS SRC_ACTV_TS
FROM
(SELECT RANKED.*
FROM
(SELECT BRCDE_REF_I,GST_SRC_ID,SRC_ACTV_TS,
RANK() over (partition by BRCDE_REF_I ORDER BY SRC_ACTV_TS DESC) AS RANK
FROM
ADW.GST_SRC_ID_BRCDE_LKUP_TABLE X
WHERE UPPER(X.CURR_ACTV_F) = 'Y' AND TRIM(X.GST_SRC_ID) IN
(SELECT TRIM(GST_SRC_I) FROM ADW.CANDIDATE_GST_ID_SRC_TABLE GROUP BY TRIM(GST_SRC_I))
) RANKED
WHERE RANKED.RANK = 1 ) X
GROUP BY BRCDE_REF_I ;
有兩個SQL命令,並且因為Apache Hive 不支持BEGIN和COMMIT,所以最好的選擇是將其放入兩個命令中。
您尚未發布錯誤。 我以為您在DROP TABLE
上也會出錯,因此將其更改為DROP TABLE IF EXISTS
。
另外,在Scala中使用多行字符串時,必須用"""
而不是"
來包裝它們。
sqlContext.sql("DROP TABLE IF EXISTS ADW.TERA_BARCODE_LOOKUP_TABLE_RAW")
sqlContext.sql("""
CREATE TABLE ADW.TERA_BARCODE_LOOKUP_TABLE_RAW AS
SELECT CAST(BRCDE_REF_I AS STRING) AS BARCODE,
MAX(TRIM(GST_SRC_ID)) AS GST_SRC_ID,MAX(SRC_ACTV_TS) AS SRC_ACTV_TS
FROM
(SELECT RANKED.*
FROM
(SELECT BRCDE_REF_I,GST_SRC_ID,SRC_ACTV_TS,
RANK() over (partition by BRCDE_REF_I ORDER BY SRC_ACTV_TS DESC) AS RANK
FROM
ADW.GST_SRC_ID_BRCDE_LKUP_TABLE X
WHERE UPPER(X.CURR_ACTV_F) = 'Y' AND TRIM(X.GST_SRC_ID) IN
(SELECT TRIM(GST_SRC_I) FROM ADW.CANDIDATE_GST_ID_SRC_TABLE GROUP BY TRIM(GST_SRC_I))
) RANKED
WHERE RANKED.RANK = 1 ) X
GROUP BY BRCDE_REF_I
""")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.