将数据插入配置单元表



我是蜂巢的新手。我已经成功地为开发目的设置了一个单节点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 显然支持 INSERT...从 Hive 0.14 开始的值。

请参阅"从 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;
这是

从版本Hive 0.14支持的

在表格中插入pd_temp(部门,制造,成本,ID,asmb_city,asmb_ct,零售)值("生产","泰国",10,99202,"北卡罗来纳州","美国",20)

这是

蜂巢的限制。

1.插入数据后无法更新

2.没有"插入到表中的值..."声明

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

4.没有"从中删除"命令

5.您只能进行批量删除

但是您仍然希望从 Hive 控制台插入记录,而不是可以从 statck 中进行选择

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

  1. 使用浏览选择一个CSV文件并设置Hadoop根目录,例如:/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. Sample of generated Hive scripts

    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;

Thanks Vijay

You can use following lines of code to insert values into an already existing table. Here the table is db_name.table_name having two columns, and I am inserting 'All','done' as a row in the table.

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 上可用的现有数据创建新表。

将数据

[本地] 路径 '' [覆盖] 加载到表 ;使用此命令,它将立即加载数据,只需指定文件路径如果文件在本地 fs 中,则使用 LOCAL,如果文件在 hdfs 中,则无需使用本地

最新更新