将数据插入hive表

时间:2013-06-07 09:32:01

标签: database hadoop hive

使用Cygwin发行版,我安装了Hadoop 0.20.3和Hive 0.11.0。

首先,我不明白如何使用Hive CLI:

hive> show tables;

然后输入,没有任何反应。我可以使用hive -e/-f.

执行查询

然后,我创建了一个表:

CREATE TABLE tweet_table(
tweet STRING
)
COMMENT 'Table of string'

但是如何将数据插入此表?我看到了一些INSERT INTO示例,但是当我尝试时:

INSERT INTO TABLE tweet_table (tweet) VALUES ("data")

我有一个错误:

FAILED: ParseException line 1:30 cannot recognize input near '(' 'tweet' ')' in select clause

如何在表格中附加数据?

6 个答案:

答案 0 :(得分:36)

您可以通过两种方式将新数据插入表格。

  1. 使用load命令将文件数据加载到表中。

    LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename.
    
  2. 您可以使用select查询将新数据插入到表格中。

    INSERT INTO table tablename1 select columnlist FROM secondtable;
    

答案 1 :(得分:4)

如果您已经有一个带有一些数据的表pre_loaded_tbl。您可以使用技巧通过以下查询将数据加载到表中

INSERT INTO TABLE tweet_table 
  SELECT  "my_data" AS my_column 
    FROM   pre_loaded_tbl 
   LIMIT   5;

另请注意" my_data"独立于pre_loaded_tbl中的任何数据。您可以选择任何数据并写入任何列名称(此处为my_data和my_column)。 Hive不要求它具有相同的列名。但是select语句的结构应该与tweet_table的结构相同。您可以使用limit来确定可以插入tweet_table的次数。

但是,如果你没有'创建任何表,您将不得不使用上述答案中的文件复制或加载数据命令加载数据。

答案 2 :(得分:3)

尝试在数据中使用单引号:

insert into table test_hive values ('1','puneet');

答案 3 :(得分:1)

如果表没有分区,那么代码将是

插入表table_name中,从another_table(source table)中选择col_a,col_b,col_c

-在这里可以应用任何条件,例如限制,分组依据,排序依据等...

如果表具有分区,则代码将为

设置hive.exec.dynamic.partition = true;
设置hive.exec.dynamic.partition.mode = nonstrict;

插入表table_name分区(partition_col1paritition_col2)中 选择col_a,col_b,col_c,partition_col1,partition_col2 来自another_table(source table)

-在这里可以应用任何条件,例如限制,分组依据,排序依据等...

答案 4 :(得分:0)

我遇到了类似的问题所以我使用impala将单行插入到我的表中,它适用于同一个查询。这肯定会有用。

答案 5 :(得分:0)

尽管有一个可接受的答案,但我想补充一点,从Hive 0.14开始,允许记录级别的操作。正确的语法和查询为:

INSERT INTO TABLE tweet_table VALUES ('data');