2017-04-05 2 views
1

Ich möchte eine vorhandene Tabelle, die Textformat enthält, in das ORC-Format ändern. Ich konnte es tun, indem: (1) Erstellen einer Tabelle im Ork-Format manuell mit den Partitionen und dann (2) mithilfe der INSERT OVERWRITE-Anweisung, um die Tabelle aufzufüllen.CTAS mit dynamischer Partition

Ich versuche, CTAS (Create Table ... AS Select ...) Anweisung dafür zu verwenden. Gibt es eine Möglichkeit, die dynamische Partitionierung mit CTAS-Anweisung aufzunehmen? Also, wenn mein Text-Datensatz hat mehrere Partitionen (zum Beispiel: Jahr und Monat), kann ich dies direkt in CTAS-Anweisung zeigen?

könnte das Format so etwas wie diese:

CREATE TABLE TEST_TABLE 
STORED AS ORC 
WITH PARTITION(year, month) 
LOCATION '/<my_location>' 
tblproperties ("orc.compress"="SNAPPY") 
AS SELECT * FROM <existing_table>; 

Jede Idee, bitte?

Hinweis: Der Grund, warum ich mich für CTAS-Anweisung interessiert, ist wie folgt: Mit dieser Anweisung muss ich nicht wirklich auf jeden einzelnen Spaltennamen hinweisen. Aber wenn ich eine Ork-basierte Tabelle erstellen und dann manuell auffüllen, musste ich beim Erstellen der Tabelle alle Spalten angeben. Das ist in Ordnung; aber, keine gute Idee, wenn meine vorhandene Tabelle viele Spalten enthält.

Antwort

1

Nicht

hive> create table t partitioned by (p int) as select 1 as i; 
unterstützt

FAILED: SemanticException [Error 10068]:
CREATE-TABLE-AS-SELECT nicht Partitionierungs

+0

Das bedeutet, ich muss es manuell tun. Vielen Dank! – Tanvir

2

2 Schritten beantworten unterstützt in der Zieltabelle:

1. Tabelle target_table_name wie source_table_name erstellen;

2. Insertüberschreib-Tabelle target_table_name partition (Partitionsspaltenname) select * from source_table_name;

Rest als ORC gespeichert, Speicherort, den Sie je nach Komfort und Unterstützung von Hive-Abfrage hinzufügen können.

Manchmal für externe Tabelle oben Schritte funktioniert nicht. Das Problem ist, dass die Daten in einem Verzeichnis auf HDFS aktualisiert werden, aber wir können die Änderungen in der Tabelle nicht sehen, wenn wir die Tabelle auswählen. Hierzu können Sie folgende Schritte ausführen:

Lösung 1: Überprüfen Sie Tabellenmetadaten, wenn aktualisiert oder nicht.

Lösung 2: Wenn Lösung 1 nicht funktioniert, dann:

1.Erstellen Tisch target_table_name wie source_table_name;

2. Überschreib-Tabelle einfügen target_table_name Partition (Partitionsspaltenname) select * from source_table_name;

  1. externe Tabelle another_table_name wie source_table_name als file_format_of_source_table Standort 'location_of_source_table' gespeichert schaffen;

  2. msck Reparaturtabelle another_table;

  3. Dann können Sie source_table löschen und eine andere_Tabelle in source_table_name umbenennen.