it-swarm.com.de

Einfügen von Daten in die Hive-Tabelle

Ich bin neu in Hive. Ich habe erfolgreich einen Einzelknoten-Hadoop-Cluster für Entwicklungszwecke eingerichtet und darüber hinaus Hive und Pig installiert.

Ich habe eine Dummy-Tabelle in Hive erstellt:

create table foo (id int, name string);

Jetzt möchte ich Daten in diese Tabelle einfügen. Kann ich Daten wie SQL einen Datensatz auf einmal hinzufügen? Bitte helfen Sie mir mit einem analogen Befehl:

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

Außerdem habe ich eine CSV-Datei, die Daten im Format enthält:

1,name1
2,name2
..
..

..


1000,name1000

Wie kann ich diese Daten in die Dummy-Tabelle laden?

22
Tapan Avasthi

Ich denke, der beste Weg ist:
a) Daten in HDFS kopieren (falls noch nicht vorhanden)
b) Erstellen Sie auf diese Weise eine externe Tabelle über Ihrer CSV

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) Sie können TableName bereits jetzt verwenden, indem Sie Abfragen an TableName senden.
d) Wenn Sie Daten in eine andere Hive-Tabelle einfügen möchten:

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

Es gibt keine direkte Möglichkeit, einen Datensatz gleichzeitig vom Terminal aus einzufügen. Hier ist jedoch eine einfache Problemumgehung, die ich normalerweise verwende, wenn ich etwas testen möchte:

Angenommen, t ist eine Tabelle mit mindestens 1 Datensatz. Es spielt keine Rolle, welche Art oder Anzahl von Spalten vorhanden ist.

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

Hive unterstützt offenbar INSERT ... VALUES ab Hive 0.14.

Weitere Informationen finden Sie im Abschnitt 'Einfügen in Tabellen aus SQL' unter: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DML

4
user3650393

gehen Sie folgendermaßen vor, um einen Ad-hoc-Wert wie (12 "xyz) einzufügen:

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

Welche Daten Sie auch immer in eine Text- oder Protokolldatei eingefügt haben, die in hdfs einen Pfad angeben und dann eine Abfrage wie folgt in Hive schreiben kann

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

BEISPIEL:

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

Sie können die folgenden Codezeilen verwenden, um Werte in eine bereits vorhandene Tabelle einzufügen. Hier ist die Tabelle db_name.table_name mit zwei Spalten, und ich füge 'All', 'done' als Zeile in die Tabelle ein.

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

Hoffe das war hilfreich.

1
Rahib

dies wird ab Version Hive 0.14 unterstützt

INSERT IN TABLE pd_temp (Abteilung, Marke, Kosten, ID, asmb_city, asmb_ct, Einzelhandel) VALUES ('production', 'thailand', 10,99202, 'northcarolina', 'usa', 20)

1
sateesh

Sie können dies versuchen, ich habe ein Tool zum Generieren von Hive-Skripten aus einer CSV-Datei entwickelt. Im Folgenden finden Sie einige Beispiele zum Generieren von Dateien. Tool - https://sourceforge.net/projects/csvtohive/?source=directory

  1. Wählen Sie mit Durchsuchen eine CSV-Datei aus und legen Sie das Hadoop-Stammverzeichnis fest, z. B .:/user/bigdataproject /

  2. Tool Generiert ein Hadoop-Skript mit allen CSV-Dateien. Nachfolgend finden Sie ein Beispiel eines generierten Hadoop-Skripts zum Einfügen von CSV in 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. Beispiel für generierte Hive-Skripte

    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;

Vielen Dank, Vijay

1
Vijay Kumar

Es ist ein Beschränkung von Hive .

1.Sie können nach dem Einfügen keine Daten aktualisieren

2. Es gibt keine Anweisung "In Tabellenwerte einfügen ..."

3. Sie können Daten nur mit Massenladung laden

4.Der Befehl "Löschen von" ist nicht vorhanden

5.Sie können nur Massenlöschvorgänge ausführen

Aber Sie möchten immer noch einen Datensatz von der Hive-Konsole einfügen, als Sie tun können von statck auswählen. siehe dies

1
Ashish Panery

Das Hadoop-Dateisystem unterstützt das Anhängen von Daten an vorhandene Dateien nicht. Sie können Ihre CSV-Datei jedoch in HDFS laden und Hive anweisen, sie als externe Tabelle zu behandeln.

0
Olaf

Benutze das -

create table dummy_table_name as select * from source_table_name;

Dadurch wird die neue Tabelle mit den vorhandenen Daten erstellt, die auf source_table_name Verfügbar sind.

0
Indrajeet Gour