将数据插入到表蜂房(Inserting Data into Hive Table)

2019-06-25 13:10发布

我是新来的蜂巢。 我已经成功设立的发展宗旨,在它的上面一个单节点的Hadoop集群,我已经安装了Hive和Pig。

我在蜂巢中创建一个虚拟表:

create table foo (id int, name string);

现在,我想将数据插入此表。 我可以一次添加数据,就像SQL的一个记录? 好心帮我类似的命令:

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

另外,我有一个包含格式数据的csv文件:

1,name1
2,name2
..
..

..


1000,name1000

我怎么能这样的数据加载到虚表?

Answer 1:

我认为最好的方法是:
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)你可以开始使用表名已被发出查询到它。
d)如果您想将数据插入到其他蜂巢表:

insert overwrite table finalTable select * from table name;


Answer 2:

还有在从终端一次插入1个记录没有直接的方法,但是,这里有一个简单直接的解决方法,当我想要测试一些东西,我通常使用:

假设t是具有至少1结果的表。 不要紧,什么类型或列数。

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


Answer 3:

蜂巢显然支持INSERT ... VALUES在蜂巢0.14开始。

请参阅在节“将插入到从SQL表”: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML



Answer 4:

什么都数据已插入到一个文本文件或日志文件,它可以把一个路径在HDFS中,然后在蜂巢如下编写查询

  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;


Answer 5:

插入喜欢的ad-hoc值(12,“XYZ),这样做:

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


Answer 6:

这是一个蜂巢的限制 。

它插入后1.You不能更新数据

2.有没有“插入表格值...”语句

3.You只能使用批量负载加载数据

4.There不是命令“从删除”

5.You只能做批量删除

但你还是要插入从蜂巢控制台记录比你能做到从statck选择 。 参照此



Answer 7:

你可以试试这个,我已经发展到生成CSV文件蜂巢脚本的工具。 以下是有关的文件是如何生成的几个例子。 工具- https://sourceforge.net/projects/csvtohive/?source=directory

  1. 选择使用浏览一个CSV文件,并设置Hadoop的根目录例如:/用户/ bigdataproject /

  2. 工具生成的Hadoop脚本所有CSV文件,下面是产生的Hadoop脚本样本插入到CSV的Hadoop

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

    #!/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 蜂巢-f ./Appearances.hive

    Hadoop的FS -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv 蜂巢-f ./AwardsManagers.hive

  3. 产生的蜂巢脚本示例

     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;

由于维杰



Answer 8:

这是从版本蜂巢0.14支持

INSERT INTO TABLE pd_temp(部门,制造,成本,ID,asmb_city,asmb_ct,零售)VALUES( '生产', '泰',10,99202, '北卡罗莱纳', '美国',20)



Answer 9:

您可以使用下面的代码行把值插入到现有的表。 下面的表格是db_name.table_name有两列,而我将“全部”,“完成”在表中的行。

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

希望这是有益的。



Answer 10:

Hadoop的文件系统不支持数据附加到现有的文件。 虽然,您可以加载CSV文件导入HDFS,告诉蜂房把它作为外部表。



Answer 11:

用这个 -

create table dummy_table_name as select * from source_table_name;

这将创建上提供的新表与现有数据source_table_name



文章来源: Inserting Data into Hive Table