簡體   English   中英

在scala中使用sqlContext.sql進行子查詢

[英]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 不支持BEGINCOMMIT,所以最好的選擇是將其放入兩個命令中。

您尚未發布錯誤。 我以為您在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM