2017-07-03 4 views
0

Ich möchte Partition Wert als Parameter übergeben.Parameter Übergabe an die Partition funktioniert nicht in der Struktur

SET runmdt = date_sub(current_date,5); 

Die folgende Abfrage funktioniert gut.

SELECT 
cal_id,caller_name,location 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 

Beim Einfügen in Partitionstabelle funktioniert es nicht.

SET runmdt = date_sub(current_date,5); 
INSERT OVERWRITE TABLE amobe_tbl PARTITION (create_dt=${hiveconf:runmdt}) 
SELECT 
cal_id,caller_name,location 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 

FAILED: ParseException Linie 1:92 Eingang nicht in der Nähe von 'DATE_SUB' erkennen '(' 'current_date' in konstanten create_dt ist Datum Datentyp

Bitte mir helfen

Danke.. Voraus.

+0

bekommen Sie Ihre Antwort, aber in jedem Fall des WHERE-Klausel keinen Sinn macht (WHERE a.create_dt IN (...) und ein. create_dt = $ {hiveconf: runmdt} ') –

Antwort

0

Hive Variablen sind nichts anderes als ein Text Ersatz-Mechanismus.
Die Ersetzung erfolgt vor dem Parsen und Ausführen.

hive> set hivevar:v1=se; 
hive> set hivevar:v2=l; 
hive> set hivevar:v3=ec; 
hive> set hivevar:v4=t 1+; 
hive> set hivevar:v5=2; 
hive> ${hivevar:v1}${hivevar:v2}${hivevar:v3}${hivevar:v4}${hivevar:v5}; 
OK 
3 

Verwendung dynamische Partitionen

set hive.exec.dynamic.partition.mode=nonstrict; 

SET runmdt = date_sub(current_date,5); 
INSERT OVERWRITE TABLE amobe_tbl PARTITION (create_dt) 
SELECT 
cal_id,caller_name,location,${hiveconf:runmdt} 
from 
amobe_tbl a 
WHERE a.create_dt IN 
(select DISTINCT create_dt from mt_call 
WHERE create_dt between date_sub(current_date,20) and current_date) 
and a.create_dt=${hiveconf:runmdt}; 
+0

Vielen Dank für Ihre Hilfe – Rock

+0

Gern geschehen. Bitte stellen Sie sicher, dass Sie die Antwort akzeptieren (indem Sie das Symbol "V" links neben der Antwort markieren) –

Verwandte Themen