web-dev-qa-db-ja.com

Hiveテーブルへのデータの挿入

私はHiveが初めてです。開発目的で単一ノードのhadoopクラスターを正常にセットアップし、その上にHiveとpigをインストールしました。

Hiveでダミーテーブルを作成しました。

create table foo (id int, name string);

次に、このテーブルにデータを挿入します。 sqlのようにデータを一度に1レコードずつ追加できますか?次のようなコマンドで親切に助けてください:

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

また、次の形式のデータを含むcsvファイルがあります。

1,name1
2,name2
..
..

..


1000,name1000

このデータをダミーテーブルに読み込むにはどうすればよいですか?

22
Tapan Avasthi

最善の方法は次のとおりです。
a)データをHDFSにコピーします(まだない場合)
b)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)クエリを発行して、TableNameの使用を開始できます。
d)他のHiveテーブルにデータを挿入する場合:

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

端末から一度に1つのレコードを挿入する直接的な方法はありませんが、何かをテストする場合に通常使用する簡単な簡単な回避策があります。

tが少なくとも1つのレコードを持つテーブルであると仮定します。列のタイプや数は関係ありません。

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

Hiveは、Hive 0.14以降のINSERT ... VALUESをサポートしているようです。

次の「SQLからテーブルへの挿入」セクションを参照してください。 https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DML

4
user3650393

(12、 "xyz)のようなアドホックな値を挿入するには、次のようにします。

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

1つのテキストファイルまたはログファイルに挿入したデータがhdfsの1つのパスに配置され、Hiveで次のようにクエリを書き込むことができます。

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

例:

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

次のコード行を使用して、既存のテーブルに値を挿入できます。ここでは、テーブルはdb_name.table_nameであり、2つの列があり、テーブルの行として 'All'、 'done'を挿入しています。

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

これがお役に立てば幸いです。

1
Rahib

これはバージョン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

これを試してみてください。csvファイルからHiveスクリプトを生成するツールを開発しました。以下は、ファイルの生成方法に関するいくつかの例です。ツール- https://sourceforge.net/projects/csvtohive/?source=directory

  1. 参照を使用してCSVファイルを選択し、hadoopルートディレクトリを設定します(例:/ user/bigdataproject /)

  2. ツールはすべてのcsvファイルを使用してHadoopスクリプトを生成し、csvをHadoopに挿入するために生成された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. 生成されたHiveスクリプトのサンプル

    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;

ありがとうビジェイ

1
Vijay Kumar

Hiveの制限 です。

1.挿入後はデータを更新できません

2。「テーブル値に挿入...」ステートメントはありません

3.あなたはバルクロードを使用してのみデータをロードできます

4.「delete from」コマンドはありません

5.一括削除のみが可能

ただし、Hiveコンソールからレコードを挿入したい場合は、statckから選択を実行します。参照 this

1
Ashish Panery

Hadoopファイルシステムは、既存のファイルへのデータの追加をサポートしていません。ただし、CSVファイルをHDFSにロードして、Hiveに外部テーブルとして扱うように指示することもできます。

0
Olaf

これを使って -

create table dummy_table_name as select * from source_table_name;

これにより、source_table_nameで利用可能な既存のデータを使用して新しいテーブルが作成されます。

0
Indrajeet Gour