我是新手。我已经成功设置了一个单节点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
如何将此数据加载到虚拟表中?
答案 0 :(得分:26)
我认为最好的方法是:
a)将数据复制到HDFS(如果尚未存在)
b)像这样
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)
1.插入数据后无法更新数据
2.没有&#34;插入表值...&#34;声明强>
3.您只能使用批量加载
加载数据4.没有&#34;删除&#34;命令
5.您只能进行批量删除
但您仍然希望从hive控制台插入记录,而不是从statck中选择。参考this
答案 6 :(得分:1)
您可以试试这个,我开发了一个工具来从csv文件生成配置单元脚本。以下是有关如何生成文件的几个示例。 工具 - https://sourceforge.net/projects/csvtohive/?source=directory
使用Browse选择一个CSV文件并设置hadoop根目录ex:/ user / bigdataproject /
工具生成包含所有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
生成的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;
由于 维杰
答案 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
上现有数据的新表格。