web-dev-qa-db-fra.com

Insertion de données dans la table Hive

Je suis nouveau sur Hive. J'ai réussi à configurer un cluster hadoop à nœud unique à des fins de développement et, en plus, j'ai installé Hive et pig.

J'ai créé une table factice dans Hive:

create table foo (id int, name string);

Maintenant, je veux insérer des données dans ce tableau. Puis-je ajouter des données comme sql un enregistrement à la fois? veuillez m'aider avec une commande analogue pour:

insert into foo (id, name) VALUES (12,"xyz);

De plus, j'ai un fichier csv qui contient des données au format:

1,name1
2,name2
..
..

..


1000,name1000

Comment puis-je charger ces données dans la table factice?

22
Tapan Avasthi

Je pense que la meilleure façon est:
a) Copiez les données dans HDFS (si ce n'est déjà fait)
b) Créez une table externe sur votre CSV comme ceci

CREATE EXTERNAL TABLE TableName (id int, name string)
ROW FORMAT DELIMITED   
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n'
STORED AS TEXTFILE
LOCATION 'place in HDFS';

c) Vous pouvez déjà commencer à utiliser TableName en lui envoyant des requêtes.
d) si vous souhaitez insérer des données dans une autre table Hive:

insert overwrite table finalTable select * from table name;
26
David Gruzman

Il n'y a pas de moyen direct d'insérer 1 enregistrement à la fois depuis le terminal, cependant, voici une solution de contournement simple et simple que j'utilise habituellement lorsque je veux tester quelque chose:

En supposant que t est une table avec au moins 1 enregistrement. Peu importe le type ou le nombre de colonnes.

INSERT INTO TABLE foo
SELECT '12', 'xyz'
FROM t
LIMIT 1;
8
MoustafaAAtta

Hive prend apparemment en charge INSERT ... VALUES à partir de Hive 0.14.

Veuillez consulter la section "Insertion dans des tableaux à partir de SQL" sur: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DML

4
user3650393

pour insérer une valeur ad hoc comme (12, "xyz), procédez comme suit:

insert into table foo select * from (select 12,"xyz")a;
3
bignano

Quelles que soient les données que vous avez insérées dans un fichier texte ou fichier journal qui peuvent être placées sur un chemin dans hdfs, puis écrire une requête comme suit dans Hive

  Hive>load data inpath<<specify inputpath>> into table <<tablename>>;

EXEMPLE:

Hive>create table foo (id int, name string)
row format delimited
fields terminated by '\t' or '|'or ','
stored as text file;
table created..
    DATA INSERTION::
    Hive>load data inpath '/home/Hive/foodata.log' into table foo;
3
Mahesh R

Vous pouvez utiliser les lignes de code suivantes pour insérer des valeurs dans une table déjà existante. Ici, la table est db_name.table_name ayant deux colonnes, et j'insère "Tous", "terminé" comme une ligne dans la table.

insert into table db_name.table_name
select 'ALL','Done';

J'espère que cela vous a été utile.

1
Rahib

cela est pris en charge à partir de la version Hive 0.14

INSERT INTO TABLE pd_temp (dept, make, cost, id, asmb_city, asmb_ct, retail) VALUES ('production', 'thailand', 10,99202, 'northcarolina', 'usa', 20)

1
sateesh

Vous pouvez essayer ceci, j'ai développé un outil pour générer des scripts Hive à partir d'un fichier csv. Voici quelques exemples sur la façon dont les fichiers sont générés. Outil - https://sourceforge.net/projects/csvtohive/?source=directory

  1. Sélectionnez un fichier CSV à l'aide de Parcourir et définissez le répertoire racine hadoop ex:/user/bigdataproject /

  2. L'outil génère un script Hadoop avec tous les fichiers csv et voici un exemple de script Hadoop généré pour insérer csv dans Hadoop

    #!/bin/bash -v
    hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv Hive -f ./AllstarFull.Hive



    hadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv Hive -f ./Appearances.Hive



    hadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv Hive -f ./AwardsManagers.Hive
  3. Exemple de scripts Hive générés

    CREATE DATABASE IF NOT EXISTS lahman;
    USE lahman;
    CREATE TABLE AllstarFull (playerID string,yearID string,gameNum string,gameID string,teamID string,lgID string,GP string,startingPos string) row format delimited fields terminated by ',' stored as textfile;
    LOAD DATA INPATH '/user/bigdataproject/AllstarFull.csv' OVERWRITE INTO TABLE AllstarFull;
    SELECT * FROM AllstarFull;

Merci Vijay

1
Vijay Kumar

C'est un limitation de Hive .

1.Vous ne pouvez pas mettre à jour les données après leur insertion

2.Il n'y a pas de déclaration "insérer dans les valeurs du tableau ..."

3.Vous ne pouvez charger des données qu'en utilisant le chargement en bloc

4.Il n'y a pas de commande "supprimer de"

5.Vous ne pouvez supprimer qu'en bloc

Mais vous voulez toujours insérer un enregistrement à partir de la console Hive que vous pouvez faire sélectionnez dans statck. se référer ce

1
Ashish Panery

Le système de fichiers Hadoop ne prend pas en charge l'ajout de données aux fichiers existants. Cependant, vous pouvez charger votre fichier CSV dans HDFS et dire à Hive de le traiter comme une table externe.

0
Olaf

Utilisez ceci -

create table dummy_table_name as select * from source_table_name;

Cela créera la nouvelle table avec les données existantes disponibles sur source_table_name.

0
Indrajeet Gour