Je lance la requête Hive avec Java. Exemple:
"SELECT * FROM table WHERE id> 100"
Comment exporter le résultat dans un fichier hdfs.
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;
Cette commande redirigera la sortie vers un fichier texte de votre choix:
$Hive -e "select * from table where id > 10" > ~/sample_output.txt
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;
@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 :)
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
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.
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"
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;
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
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