15

使用 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

如何在我的表中附加数据?

4

5 回答 5

41

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

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

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

    INSERT INTO table tablename1 select columnlist FROM secondtable;
    
于 2013-06-07T11:13:55.357 回答
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 中的次数。

但是,如果您尚未创建任何表,则必须在上述答案中使用文件复制或加载数据命令加载数据。

于 2013-09-13T16:43:49.573 回答
4

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

insert into table test_hive values ('1','puneet');
于 2016-12-22T10:33:26.553 回答
2

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

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

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

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

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

插入表table_namepartition( partition_col1, paritition_col2) select col_a,col_b,col_c,partition_col1,partition_col2 fromanother_table(source table)

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

于 2018-10-18T07:41:22.277 回答
0

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

INSERT INTO TABLE tweet_table VALUES ('data');
于 2019-04-14T13:45:44.603 回答