2014-10-29 11 views
16

Ich habe Standard db in Hive-Tabelle, die 80 Tabellen enthält.
Ich habe eine weitere Datenbank erstellt und ich möchte alle Tabellen von der Standard-DB in neue Datenbanken kopieren.So kopieren Sie alle Hive-Tabelle von einer Datenbank in andere Datenbank

Gibt es eine Möglichkeit, ich kann von einer DB in andere DB kopieren, ohne einzelne Tabelle zu erstellen.

Bitte lassen Sie mich wissen, ob eine Lösung .. Vielen Dank im Voraus

Antwort

21

ich paar Optionen denken.

  1. Verwenden Sie CTAS.

    CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1; 
    CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2; 
    ... 
    
  2. Verwenden Import-Funktion von Hive https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

Hoffnung, das hilft.

+0

Beachten Sie, dass 'show databases' die 80 Namen angibt, die benötigt werden, und dass die 80 Zeilen dann einfach in einem Werkzeug wie excel erstellt werden können. –

+0

das ist gutes Zeug :) –

+0

Nr. 1 funktionierte gut für mich, außer die Partitionen nicht kopieren. Irgendeine Möglichkeit, das zu erreichen? – vk1011

4

externe Tabelle erstellen new_db.table wie old_db.table location '(Pfad der Datei in hdfs-Datei)';

Wenn Sie eine Partition in der Tabelle haben, müssen Sie die Partition in new_db.table hinzufügen.

1

Dies sind wahrscheinlich die schnellste und einfachste Möglichkeit zum Kopieren/Verschieben von Tabellen von einer Datenbank zur anderen.

Zu Tischsource

Seit 0.14 zu bewegen, können Sie Anweisung folgende Tabelle in der gleichen Metastore zum anderen aus einer Datenbank zu verschieben:

alter table old_database.table_a rename to new_database.table_a; 

Die obigen Ausführungen wird auch die Tabelle bewegen Daten auf hdfs, wenn table_a eine verwaltete Tabelle ist.

Um Tabelle zu kopieren

Sie immer CREATE TABLE <new_db>.<new_table> AS SELECT * FROM <old_db>.<old_table>; Anweisungen verwenden können.Aber ich glaube, diese alternative Methode zum Kopieren von Datenbank hdfs dfs -cp und anschließend Erstellen von Tabellen mit LIKE kann ein wenig schneller sein, wenn Ihre Tabellen sind riesig:

hdfs dfs -cp /user/hive/warehouse/<old_database>.db /user/hive/warehouse/<new_database>.db 

Und dann in Hive:

CREATE DATABASE <new_database>; 
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>; 
+0

Dies ist keine "Kopie", sondern eine "Bewegung". –

+0

@ThomasDecaux Mein schlechtes. Habe die Antwort zum Kopieren auch aktualisiert. Vielen Dank. – PratPor

1

Sie nähern eine der folgenden Optionen:

Die Syntax sieht in etwa so aus: EXPORT TABLE table_or_partition TO hdfs_path; IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION [table_location]];

Einige Beispielanweisungen würden folgendermaßen aussehen: EXPORT TABLE TO 'location in hdfs';

Verwenden Sie test_db; IMPORT FROM 'Ort in hdfs';

Export Import kann auch auf Partitionsbasis angewendet werden: EXPORT TABLE PARTITION (loc = "USA") zu "location in hdfs";

Die folgenden Importbefehle importieren in eine externe Tabelle statt in eine verwaltete Tabelle IMPORT EXTERNAL TABLE FROM 'Speicherort in hdfs' LOCATION '/ location/of/external/table';

Verwandte Themen