web-dev-qa-db-fra.com

Exportation de la table Hive dans un compartiment S3

J'ai créé une table de ruche via une session interactive Elastic MapReduce et l'ai renseignée à partir d'un fichier CSV comme suit:

CREATE TABLE csvimport(id BIGINT, time STRING, log STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';

LOAD DATA LOCAL INPATH '/home/hadoop/file.csv' OVERWRITE INTO TABLE csvimport;

Je veux maintenant stocker la table Hive dans un compartiment S3 afin que la table soit préservée une fois que je termine l'instance de MapReduce.

Est-ce que quelqu'un sait comment faire ça?

19
seedhead

Oui, vous devez exporter et importer vos données au début et à la fin de votre session Hive.

Pour ce faire, vous devez créer une table mappée sur un compartiment et un répertoire S3.

CREATE TABLE csvexport (
  id BIGINT, time STRING, log STRING
  ) 
 row format delimited fields terminated by ',' 
 lines terminated by '\n' 
 STORED AS TEXTFILE
 LOCATION 's3n://bucket/directory/';

Insérer les données dans la table s3 et lorsque l'insertion est terminée, le répertoire aura un fichier csv

 INSERT OVERWRITE TABLE csvexport 
 select id, time, log
 from csvimport;

Votre table est maintenant préservée et lorsque vous créez une nouvelle instance de Hive, vous pouvez réimporter vos données.

Votre table peut être stockée dans quelques formats différents en fonction de l'endroit où vous souhaitez l'utiliser.

20

Ci-dessus, Query doit utiliser le mot clé EXTERNAL, à savoir:

CREATE EXTERNAL TABLE csvexport ( id BIGINT, time STRING, log STRING ) 
row format delimited fields terminated by ',' lines terminated by '\n' 
STORED AS TEXTFILE LOCATION 's3n://bucket/directory/';
INSERT OVERWRITE TABLE csvexport select id, time, log from csvimport;

Une autre alternative consiste à utiliser la requête

INSERT OVERWRITE DIRECTORY 's3n://bucket/directory/'  select id, time, log from csvimport;

la table est stockée dans le répertoire S3 avec les délimiteurs par défaut de Hive.

18
Thejas

Si vous pouviez accéder à la console aws et avoir les "Access Key Id" et "Secret Access Key" pour votre compte

Tu peux essayer ça aussi ..

CREATE TABLE csvexport(id BIGINT, time STRING, log STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
LOCATION 's3n://"access id":"secret key"@bucket/folder/path';

Insérez maintenant les données comme indiqué ci-dessus.

INSERT OVERWRITE TABLE csvexport select id, time, log from csvimport;
0
hadooper