J'ai db par défaut dans la table Hive qui contient 80 tables.
J'ai créé une base de données supplémentaire et je souhaite copier toutes les tables de la base de données par défaut vers de nouvelles bases de données.
Existe-t-il un moyen de copier d'une base de données vers une autre base de données, sans créer de table individuelle.
S'il vous plaît laissez-moi savoir si une solution .. Merci d'avance
Je peux penser à quelques options.
Utilisez CTAS.
CREATE TABLE NEWDB.NEW_TABLE1 AS select * from OLDDB.OLD_TABLE1;
CREATE TABLE NEWDB.NEW_TABLE2 AS select * from OLDDB.OLD_TABLE2;
...
Utiliser la fonction IMPORT de Hive https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+ImportExport
J'espère que cela t'aides.
créer une table externe new_db.table comme l'emplacement old_db.table '(chemin du fichier dans le fichier hdfs)';
si vous avez une partition dans la table, vous devez ajouter une partition dans new_db.table.
Vous pouvez approcher l'une des options suivantes:
La syntaxe ressemble à ceci: EXPORT TABLE table_or_partition TO hdfs_path; IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION [table_location]];
Quelques exemples d'instructions ressembleraient à: EXPORTER LA TABLE À 'emplacement dans hdfs';
Utilisez test_db; IMPORTER DE 'emplacement dans hdfs';
Export Import peut également être appliqué sur une base de partition: EXPORTER LA PARTITION DE TABLE (loc = "USA") vers 'location in hdfs';
Les commandes d'importation ci-dessous importent dans une table externe au lieu d'une table gérée IMPORT EXTERNAL TABLE FROM 'location in hdfs' LOCATION '/ location/of/external/table';
Ce sont probablement le moyen le plus rapide et le plus simple de copier/déplacer des tables d'une base de données à une autre.
Pour déplacer la table source
Depuis la version 0.14, vous pouvez utiliser l'instruction suivante pour déplacer la table d'une base de données vers une autre dans la même métastore:
alter table old_database.table_a rename to new_database.table_a;
Les instructions ci-dessus déplaceront également les données de la table sur hdfs si table_a
est une table gérée.
Pour copier la table
Vous pouvez toujours utiliser CREATE TABLE <new_db>.<new_table> AS SELECT * FROM <old_db>.<old_table>;
déclarations. Mais je crois que cette méthode alternative de copie de base de données en utilisant hdfs dfs -cp
puis créer des tables avec LIKE
peut être un peu plus rapide si vos tables sont énormes:
hdfs dfs -cp /user/Hive/warehouse/<old_database>.db /user/Hive/warehouse/<new_database>.db
Et puis dans Hive:
CREATE DATABASE <new_database>;
CREATE TABLE <new_database>.<new_table> LIKE <old_database>.<old_table>;