2016-01-06 10 views
6

Ich habe den folgenden HIVE-Code erstellt und muss es übersetzen, um in scala zu verwenden. Von dem, was ich verstehe, müssen wir verwenden sqlContext.sql Die Beispiele, die nur online verfügbar sind, haben einfache Select-Anweisungen. Wie im folgenden Beispiel.Verwenden von sqlContext.sql für Unterabfragen in Scala

Zum Beispiel eine einfache SQL-Abfrage in scala auszuführen:

val tableA = sqlContext.sql("Select * from game"); 

Ich kann nicht scheinen, die gleiche Syntax für den Code below.What zu verwenden, ist die Syntax den Code zu übersetzen, die oben zu passen Verwendung.

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 ; 
+0

Was ist der Fehler? Ich würde einen "BEGIN TRAN" und "COMMIT" am Anfang und am Ende des mysql-Codes hinzufügen und versuchen, es erneut auszuführen. –

Antwort

2

Es gibt zwei SQL-Befehle, und weil Apache Hive doesn't support BEGIN and COMMIT beste Option für Sie wird es in zwei Befehle zu setzen.

Sie haben Ihren Fehler nicht veröffentlicht. Ich nahm an, Sie könnten auch Fehler auf DROP TABLE, so änderte es auf DROP TABLE IF EXISTS.

Auch in Scala, mehrzeilige Zeichenfolgen zu verwenden, müssen Sie sie mit """, nicht " umhüllen.

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 
""")