web-dev-qa-db-fra.com

Chargement de données d'un fichier .txt vers une table stockée sous ORC dans Hive

J'ai un fichier de données qui est en .txt _ format. J'utilise le fichier pour charger des données dans des tables Hive. Quand je charge le fichier dans un tableau comme

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS TEXTFILE;

les données sont chargées correctement en utilisant

LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

et je peux courir un SELECT * FROM test_details_txt; sur la table dans Hive.

Cependant, si j'essaie de charger les données dans une table qui est

CREATE TABLE test_details_txt(
visit_id INT,
store_id SMALLINT) STORED AS ORC; 

Je reçois le message d'erreur suivant lors de la tentative d'exécution d'un SELECT:

Failed with exception Java.io.IOException:Java.io.IOException: Malformed ORC file hdfs://master:6000/user/Hive/warehouse/test.db/transaction_details/test_details.txt. Invalid postscript.

Lors du chargement des données à l'aide de l'instruction LOAD ci-dessus, je ne reçois aucune erreur ni exception.

Y at-il tout ce qui doit être fait en utilisant le LOAD DATA IN PATH.. commande pour stocker des données dans une table ORC?

35
Neels

LOAD DATA copie simplement les fichiers dans les fichiers de données Hive. Hive ne fait aucune transformation lors du chargement de données dans des tables.

Donc, dans ce cas, le fichier d'entrée /home/user/test_details.txt doit être au format ORC si vous le chargez dans une table ORC.

Une solution possible consiste à créer une table temporaire avec STORED AS TEXT, puis LOAD DATA, puis copiez les données de cette table dans la table ORC.

Voici un exemple:

CREATE TABLE test_details_txt( visit_id INT, store_id SMALLINT) STORED AS TEXTFILE;
CREATE TABLE test_details_orc( visit_id INT, store_id SMALLINT) STORED AS ORC;

-- Load into Text table
LOAD DATA LOCAL INPATH '/home/user/test_details.txt' INTO TABLE test_details_txt;

-- Copy to ORC table
INSERT INTO TABLE test_details_orc SELECT * FROM test_details_txt;
60
Sunny Nanda

Pas:

  1. Commencez par créer une table en utilisant TEXTFILE (c.-à-d. Par défaut ou dans le format de votre choix)
  2. Charger les données dans la table de texte.
  3. Créer une table en utilisant stocké en tant que ORC en tant que select * from text_table;
  4. Sélectionnez * dans la table orc.

Exemple:

CREATE TABLE text_table(line STRING);

LOAD DATA 'path_of_file' OVERWRITE INTO text_table;

CREATE TABLE orc_table STORED AS ORC AS SELECT * FROM text_table;

SELECT * FROM orc_table;   /*(it can now be read)*/
5
Brijesh Mishra

Etant donné que Hive n'effectue aucune transformation sur nos données d'entrée, le format doit être identique: le fichier doit être au format ORC ou nous pouvons charger les données d'un fichier texte dans une table de texte dans Hive.

1
Amarnath Kumar

Étapes pour charger des données au format de fichier ORC dans Hive

1.Créez une table normale en utilisant le format textFile

2.Chargez les données normalement dans cette table

3.Créez une table avec le schéma des résultats attendus de votre table Hive normale en utilisant stocké en tant que fichier orc

4.Insérez la requête d'écrasement pour copier les données de la table textFile dans la table orcfile

Reportez-vous au blog pour savoir comment charger des données dans tous les formats de fichiers dans Hive

Charger les données dans tous les formats de fichiers dans Hive

0

Le fichier ORC est un format de fichier binaire, vous ne pouvez donc pas charger directement de fichiers texte dans des tables ORC. ORC signifie Optimized Row Columnar, ce qui signifie qu'il peut stocker des données de manière optimisée par rapport aux autres formats de fichier. ORC réduit la taille des données d'origine jusqu'à 75%. En conséquence, la vitesse de traitement des données augmente également. ORC affiche de meilleures performances que les formats de fichier Texte, Séquence et RC. Un fichier ORC contient des données de lignes dans des groupes appelés Stripes avec un pied de fichier. Le format ORC améliore les performances lorsque Hive traite les données.

Vous devez d’abord créer une table normale en tant que textFile, charger vos données dans la table textFile, puis utiliser une requête d’insertion/écrasement pour écrire vos données dans un fichier ORC.

create table table_name1 (schema of the table) row format delimited by ',' | stored as TEXTFILE

create table table_name2 (schema of the table) row format delimited by ',' | stored as ORC

load data local inpath ‘path of your file’ into table table_name1;(loading data from a local system)

INSERT OVERWRITE TABLE table_name2 SELECT * FROM table_name1;

Désormais, toutes vos données seront stockées dans un fichier ORC. La procédure similaire est appliquée à tous les formats de fichiers binaires, à savoir les fichiers de séquence, les fichiers RC et les fichiers Parquet dans Hive.

Vous pouvez vous référer au lien ci-dessous pour plus de détails.

https://acadgild.com/blog/file-formats-in-Apache-Hive/

0