[英]How to escape html code data while inserting data into a table of 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;
您可以试试这个,我开发了一个工具来从csv文件生成配置单元脚本。 以下是有关如何生成文件的几个示例。 工具 - https://sourceforge.net/projects/csvtohive/?source=directory
使用Browse选择一个CSV文件并设置hadoop根目录ex:/ user / bigdataproject /
Tool使用所有csv文件生成Hadoop脚本,以下是生成的Hadoop脚本示例,用于将csv插入Hadoop
#!/bin/bash -v
\n\n
hadoop fs -put ./AllstarFull.csv /user/bigdataproject/AllstarFull.csv hive -f ./AllstarFull.hivehadoop fs -put ./Appearances.csv /user/bigdataproject/Appearances.csv hive -f ./Appearances.hive
\n\nhadoop fs -put ./AwardsManagers.csv /user/bigdataproject/AwardsManagers.csv hive -f ./AwardsManagers.hive
生成的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.