Exportation de la table de ruche vers un seau S3
-
14-11-2019 - |
Question
J'ai créé une table de ruche via une session interactive MapReduce élastique et l'ai remplie à partir d'un fichier CSV comme ceci:
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 seau S3 afin que la table soit conservée une fois que j'ai terminé l'instance MapReduce.
Est-ce que quelqu'un sait comment faire ça?
La solution
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 le seau S3 et le répertoire
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 des données dans la table S3 et lorsque l'insert est terminé, le répertoire aura un fichier CSV
INSERT OVERWRITE TABLE csvexport
select id, time, log
from csvimport;
Votre table est désormais conservée et lorsque vous créez une nouvelle instance de ruche, vous pouvez réimporter vos données
Votre table peut être stockée dans quelques formats différents selon l'endroit où vous souhaitez l'utiliser.
Autres conseils
La requête ci-dessus doit utiliser un mot-clé externe, c'est-à-dire:
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;
Le tableau est stocké dans le répertoire S3 avec des délimiteurs par défaut Hive.
Si vous pouviez accéder à la console AWS et avoir le "Access Key Id
" et "Secret Access Key
"Pour votre compte
Vous pouvez essayer 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 les autres indiqués ci-dessus.
INSERT OVERWRITE TABLE csvexport select id, time, log from csvimport;