web-dev-qa-db-fra.com

Hive requête de sortie au fichier

Je lance la requête Hive avec Java. Exemple:

"SELECT * FROM table WHERE id> 100"

Comment exporter le résultat dans un fichier hdfs.

37
cldo

La requête suivante insérera les résultats directement dans HDFS:

INSERT OVERWRITE DIRECTORY '/path/to/output/dir' SELECT * FROM table WHERE id > 100;
61
Charles Menguy

Cette commande redirigera la sortie vers un fichier texte de votre choix:

$Hive -e "select * from table where id > 10" > ~/sample_output.txt
35
tnguyen80

Cela placera les résultats dans des fichiers délimités par des tabulations dans un répertoire:

INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/YourTableDir'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
SELECT * FROM table WHERE id > 100;
23
topkara

@sarath comment écraser le fichier si je veux exécuter une autre commande select * à partir d'une autre table et écrire dans le même fichier?

INSERT OVERWRITE LOCAL REPERTOIRE '/ home/training/mydata/output' SELECT expl, compte (expl) en tant que total
FROM (SELECT explose (scinde) en tant que expl FROM (SELECT scinde (mots, '') en tant que scission FROM nombre de mots) t2) t3 GROUP BY expl;

Ceci est un exemple pour la question de sarath

ce qui précède est un travail de comptage de mots stocké dans le fichier de sortie qui se trouve dans le répertoire local :)

2
Ankita

Je suis d'accord avec la réponse de tnguyen80. Veuillez noter que lorsqu'il y a une valeur de chaîne spécifique dans la requête, il est préférable de donner une requête entière entre guillemets.

Par exemple:

$Hive -e "select * from table where city = 'London' and id >=100" > /home/user/outputdirectory/city details.csv
1
Magesh Nagarajan

Pour enregistrer directement le fichier dans HDFS, utilisez la commande ci-dessous:

Hive> insert overwrite  directory '/user/cloudera/Sample' row format delimited fields terminated by '\t' stored as textfile select * from table where id >100;

Cela mettra le contenu dans le dossier/user/cloudera/Sample dans HDFS.

1
Aditi Gupta

La méthode idéale consiste à utiliser "INSERT OVERWRITE DIRECTORY"/pathtofile "select * from temp where id> 100" au lieu de "Hive -e 'select * from ...'> /filepath.txt"

1
Sandeep Dabhade

Pour définir le répertoire de sortie et le format du fichier de sortie, etc., procédez comme suit:

INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] 
SELECT ... FROM ...

Exemple:

INSERT OVERWRITE DIRECTORY '/path/to/output/dir'
ROW FORMAT DELIMITED
STORED AS PARQUET
SELECT * FROM table WHERE id > 100;
0
kennyut

Entrez cette ligne dans l'interface de ligne de commande Hive:

insert overwrite directory '/data/test' row format delimited fields terminated by '\t' stored as textfile select * from testViewQuery;

testViewQuery - une vue spécifique

0
Don
  1. Créer une table externe
  2. Insérer des données dans la table
  3. Facultatif, supprimez la table plus tard, ce qui ne supprimera pas ce fichier puisqu'il s'agit d'une table externe

Exemple:

Création d'une table externe pour stocker les résultats de la requête à '/ user/myName/projectA_additionaData /'

CREATE EXTERNAL TABLE additionaData
(
     ID INT,
     latitude STRING,
     longitude STRING
)
COMMENT 'Additional Data gathered by joining of the identified cities with latitude and longitude data' 
ROW FORMAT DELIMITED FIELDS
TERMINATED BY ',' STORED AS TEXTFILE location '/user/myName/projectA_additionaData/';

Envoi des résultats de la requête dans la table temporaire

 insert into additionaData 
     Select T.ID, C.latitude, C.longitude 
     from TWITER  
     join CITY C on (T.location_name = C.location);

Déposer la table temporaire

drop table additionaData
0
user2458922