Je dois déplacer une table Hive d'une base de données à une autre. Comment puis je faire ça?
Depuis 0.14, vous pouvez utiliser l'instruction suivante pour déplacer une table d'une base de données à une autre dans le même métastore:
use old_database;
alter table table_a rename to new_database.table_a
Les instructions ci-dessus déplacent également les données de la table sur hdfs si table_a
est une table gérée.
crée une table externe new_db.table comme old_db.table location '(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 essayer - CTAS
USE NEW_DB;
CREATE TABLE table
AS
SELECT * FROM OLD_DB.table;
DROP TABLE OLD_DB.table;
Si les tables sont partitionnées, vous pouvez fondamentalement copier les données partitionnées de l'ancienne table vers la nouvelle table et supprimer les anciennes.
use new_db;
Créer une nouvelle table dans une nouvelle base de données:
Create Table table_name;
Insérez des données dans de nouvelles tables à partir d'anciennes tables à l'aide de la commande:
insert into new_table_name partition (partition_column='value')
select col1, col2, col3, col4 from old_db.old_table_name
where partition_column='value';
Cela pourrait vous être utile.
EXPORT TABLE table_or_partition TO hdfs_path;
IMPORT [[EXTERNAL] TABLE table_or_partition] FROM hdfs_path [LOCATION[table_location]];
Quelques exemples de déclarations ressemblent à ceci:
EXPORT TABLE <table name> TO 'location in hdfs';
Use test_db;
IMPORT FROM 'location in hdfs';
Export Import can be appled on a partition basis as well:
EXPORT TABLE <table name> PARTITION (loc="USA") to 'location in hdfs';
Les commandes d'importation ci-dessous sont importées dans une table externe au lieu d'une table gérée.
IMPORT EXTERNAL TABLE FROM 'location in hdfs' LOCATION ‘/location/of/external/table’;
https://issues.Apache.org/jira/browse/Hive-2496
cette amélioration est toujours ouverte. Je sais que c'est possible à Impala, pas à Hive actuellement.
Le développement semble en panne. Vous pouvez voter pour cette question sur cette page pour attirer l'attention.
La base de données que vous souhaitez migrer vous aurait fourni un connecteur de base de données. Avec l’aide de sqoop et du connecteur de base de données, vous pouvez le migrer. Ce serait formidable si vous êtes plus précis sur le type de base de données vers laquelle vous souhaitez migrer les données.
Il y a beaucoup de méthodes données dans les réponses mais pas d'indication sur quand utiliser quoi,
Utilisez CTAS lorsque votre cible est une table gérée:
CREATE NEW_DB.TABLE table AS SELECT * FROM OLD_DB.TABLE;
DROP TABLE OLD_DB.TABLE;
Si vous voulez simplement le faire avec un simple changement de nom de table, mais que l'emplacement de la table ne change pas:
alter table old_database.table_a rename to new_database.table_a;
Utiliser CREATE LIKE et INSERT:
CREATE NEW_DB.TABLE table LIKE OLD_DB.TABLE;
INSERT INTO TABLE new_table_name partition (partition_column) select col1, col2, col3, col4 from old_db.old_table_name where partition_column='value';
DROP TABLE old_db.old_table_name;