将数据插入Hive表

时间:2012-06-15 15:19:11

标签: sql insert hadoop hive

我是新手。我已经成功设置了一个单节点hadoop集群用于开发目的,除此之外,我已经安装了hive和pig。

我在hive中创建了一个虚拟表:

create table foo (id int, name string);

现在,我想在此表中插入数据。我可以像sql一样一次添加数据吗?请帮我一个类似的命令:

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

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

1,name1
2,name2
..
..

..


1000,name1000

如何将此数据加载到虚拟表中?

11 个答案:

答案 0 :(得分:26)

我认为最好的方法是:
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;

答案 1 :(得分:8)

没有直接的方法可以从终端一次插入1条记录,但是,这是一个简单的直接解决方法,我通常在我想测试时使用它:

假设t是一个至少有1条记录的表。列的类型或数量无关紧要。

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

答案 2 :(得分:4)

Hive显然支持从Hive 0.14开始的INSERT ... VALUES。

请参阅'从SQL插入表格'在:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

答案 3 :(得分:3)

您将哪些数据插入到一个文本文件或日志文件中,该文件可以放在hdfs中的一个路径上,然后在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;

答案 4 :(得分:2)

插入ad-hoc值,如(12,&#34; xyz),执行以下操作:

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

答案 5 :(得分:1)

它是limitation of hive

1.插入数据后无法更新数据

2.没有&#34;插入表值...&#34;声明

3.您只能使用批量加载

加载数据

4.没有&#34;删除&#34;命令

5.您只能进行批量删除

但您仍然希望从hive控制台插入记录,而不是从statck中选择。参考this

答案 6 :(得分:1)

您可以试试这个,我开发了一个工具来从csv文件生成配置单元脚本。以下是有关如何生成文件的几个示例。 工具 - https://sourceforge.net/projects/csvtohive/?source=directory

  1. 使用Browse选择一个CSV文件并设置hadoop根目录ex:/ user / bigdataproject /

  2. 工具生成包含所有csv文件的Hadoop脚本,以下是一个示例 生成Hadoop脚本以将csv插入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;

  4. 由于 维杰

答案 7 :(得分:1)

版本配置文件0.14

支持此功能

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

答案 8 :(得分:1)

您可以使用以下代码行将值插入到现有表中。这里的表是db_name.table_name,有两列,我在表中插入'All','done'作为一行。

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

希望这有用。

答案 9 :(得分:0)

Hadoop文件系统不支持将数据附加到现有文件。虽然,您可以将CSV文件加载到HDFS中,并告诉Hive将其视为外部表。

答案 10 :(得分:0)

使用此 -

create table dummy_table_name as select * from source_table_name;

这将创建包含source_table_name上现有数据的新表格。