繁体   English   中英

将数据插入 Hive 表

[英]Inserting Data into Hive Table

我是新来的蜂巢。 我已经成功地设置了一个用于开发目的的单节点 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

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

我认为最好的方法是:
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条记录,但是,这是一个简单的直接解决方法,我通常在我想测试时使用:

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

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

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

请参阅“从SQL插入表格”部分: https//cwiki.apache.org/confluence/display/Hive/LanguageManual+DML

你有什么数据插入一个文本文件或日志文件,可以放在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;

要插入像(12,“xyz)这样的特殊值,请执行以下操作:

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

是蜂巢限制

1.插入后无法更新数据

2.没有“插入表值......”声明

3.您只能使用批量加载来加载数据

4.没有“删除”命令

你只能批量删除

但您仍然希望从蜂巢控制台插入记录,而不是从statck中选择 参考这个

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

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

  2. Tool使用所有csv文件生成Hadoop脚本,以下是生成的Hadoop脚本示例,用于将csv插入Hadoop

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

    \n\n

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

    \n\n

    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;

谢谢Vijay

版本配置单元0.14支持此功能

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

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

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

希望这有用。

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

用这个 -

create table dummy_table_name as select * from source_table_name;

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

加载数据 [LOCAL] INPATH '' [OVERWRITE] INTO TABLE <table_name>; 使用此命令,它会立即加载数据,如果文件在本地 fs 中,只需指定文件路径,然后使用 LOCAL 如果文件在 hdfs 中,则无需使用本地

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM