24

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

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

4

11 回答 11

28

我认为最好的方法是:
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;
于 2013-03-04T09:51:18.347 回答
8

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

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

INSERT INTO TABLE foo
SELECT '12', 'xyz'
FROM t
LIMIT 1;
于 2014-06-24T08:54:40.380 回答
4

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

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

于 2014-10-11T00:52:17.540 回答
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;
于 2014-10-20T08:16:05.903 回答
3

要插入像 (12,"xyz) 这样的临时值,请执行以下操作:

insert into table foo select * from (select 12,"xyz")a;
于 2016-03-02T18:16:15.200 回答
1

你可以试试这个,我开发了一个从 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. 生成的 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;

谢谢维杰

于 2015-07-13T18:38:05.810 回答
1

这是hive 的限制

1.数据插入后无法更新

2.没有“插入表值...”语句

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

4.没有“删除”命令

5.只能批量删除

但是您仍然希望从配置单元控制台插入记录,而不是从 statck 中选择。参考这个

于 2015-07-09T06:49:46.267 回答
1

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

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

希望这会有所帮助。

于 2018-05-15T12:21:30.830 回答
1

这是从版本 hive 0.14 支持的

插入表 pd_temp(dept,make,cost,id,asmb_city,asmb_ct,retail) 值('production','thailand',10,99202,'northcarolina','usa',20)

于 2015-11-13T21:01:19.343 回答
0

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

于 2012-06-15T19:24:12.883 回答
0

用这个 -

create table dummy_table_name as select * from source_table_name;

这将使用 上可用的现有数据创建新表source_table_name

于 2016-06-09T11:26:10.943 回答