web-dev-qa-db-fra.com

Transférer la table Hive d'une base de données à une autre

Je dois déplacer une table Hive d'une base de données à une autre. Comment puis je faire ça?

23
user2942227

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.

51
Jay

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.

3
bunty

Vous pouvez essayer - CTAS

USE NEW_DB;

CREATE TABLE table
AS
SELECT * FROM OLD_DB.table;

DROP TABLE OLD_DB.table;
2
user 923227

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.

  1. use new_db;
  2. Créer une nouvelle table dans une nouvelle base de données:

    Create Table table_name;
    
  3. 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';
    
1
VPS

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’;
1
Sohil Shivani

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.

0
Tagar

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.

0
kris433

Il y a beaucoup de méthodes données dans les réponses mais pas d'indication sur quand utiliser quoi,

  1. 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;
    
  2. 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;
    
  3. 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;
    
0
Ani Menon