2017-05-26 7 views
0

Ich habe eine Hive-Tabelle, wo ich den Bindestrich ('-') durch Unterstrich ('_') ersetzen möchte. Die Beispielabfrage ist als:Wie ersetzen Bindestrich (Strich) in Tabellenname?

CREATE TABLE test_${yearAndMonth} ...... 
INSERT OVERWRITE TABLE test_${yearAndMonth} ...... 

Die 'JahrUndMonat' enthält Wert wie: 2017-05; Also möchte ich den Namen des Tabellenwerts als test_2017_05 haben; Der 'YearAndMonth' muss jedoch den Bindestrich-Wert enthalten. na
nicht eingegeben werden erkennen in der Nähe von 'test_' '$' '{' in der Tabelle:

Ich habe mit versucht: regex Zum Beispiel ersetzen:

CREATE TABLE test_${regexp_replace(yearAndMonth, '-', '_')} ...... 
INSERT OVERWRITE TABLE test_${regexp_replace(yearAndMonth, '-', '_')} ...... 

Aber ich bin immer Fehler wie mich

Irgendwelche Vorschläge bitte.

Update: in diesem Versuch war so:

CREATE TABLE test_regexp_replace(${yearAndMonth}, "-", "_") ...... 
INSERT OVERWRITE TABLE test_regexp_replace(${yearAndMonth}, "-", "_") ...... 

Ich erhalte diese Fehlermeldung: EOF fehlt an '(' in der Nähe von 'test_regexp_replace'

+0

** (1) ** Sie haben ein falsches Verständnis davon, was Hive-Variablen sind. Überprüfen Sie https://StackOverflow.com/questions/42887401/storing-result-of-query-in-hive-variable/42887453#42887453. ** (2) ** Sie müssen die Variablen im richtigen Format übergeben. –

Antwort

0

Ändern des variablen Format in Struktur ist keine gute Idee, versuchen Sie, das Format vor der Übergabe zu ändern.Aktivieren Sie etwas ähnliches wie unten funktioniert (hinzugefügt id int als Beispielspalte, können Sie Ihre eigenen hinzufügen oder übergeben sie von einer anderen Variablen, falls erforderlich)

hive --hiveconf table_name=table_$(date '+%Y')_$(date '+%m') -e "create table \${hiveconf:table_name}(id int); insert overwrite table \${hiveconf:table_name}" 
Verwandte Themen