Hive:无法插入到带有地图列的表中

Posted

技术标签:

【中文标题】Hive:无法插入到带有地图列的表中【英文标题】:Hive: Cannot insert into table with map column 【发布时间】:2019-03-01 00:38:16 【问题描述】:

这是我的桌子

hive> desc test_tab;
OK
test_map    map<string,string>
test_date               string

# Partition Information
# col_name              data_type               comment

test_date               string
Time taken: 0.087 seconds, Fetched: 7 row(s)

这是我的插入语句

hive> insert into table test_tab
    > values ('2018-02-28', map("key","val"));

但我明白了

FAILED: ParseException line 2:0 cannot recognize input near 'values' '(' ''2018-02-28'' in select clause

我也试过

hive> insert into table test_tab partition (test_date = '2018-02-28')
    > select  map("key","val");
FAILED: NullPointerException null

我做错了什么?

这里是 hive 版本信息

Hive 0.13.1-SNAPSHOT

【问题讨论】:

【参考方案1】:

您可以通过两种方式将数据加载到配置单元表中 * 使用 HDFS 命令: 您的表结构应该由 MAP KEYS TERMINATED BY '=' (任何分隔符)

CREATE TABLE `test_sample`(
  `test_map` map<string,string>   
)
PARTITIONED BY (
  `test_date ` string)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY ','
  MAP KEYS TERMINATED BY '='
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

示例 input.txt 二月=28

hadoop fs -put input.txt HDFS_dest_Path

将文件上传到 Hadoop fs 后,然后将数据加载到表中:

load data inpath <location of the hadoop table> into table test_sample partition(test_date='2019-02-28');
使用查询:

如果文件系统中已经存在类似的数据,您可以通过 hive Query 将其插入到您的表中。

INSERT INTO TABLE test_tab PARTITION(test_date= '2019-02-28')
select map from  test_sample;

注意:test_tab 表不一定需要 MAP KEYS TERMINATED BY '=' 约束。

【讨论】:

以上是关于Hive:无法插入到带有地图列的表中的主要内容,如果未能解决你的问题,请参考以下文章

将记录插入到具有180列的表中

在具有标识列的表中插入 select from

使用 OLEDBConnection 将新记录插入到带有 Visual Basic 的表中

如何在配置单元表中插入具有地图列的数据框

无法使用 PowerShell 插入到始终加密的表中

如何将 Update 语句添加到我将要插入到带有 MS SQL 查询的表中的选定行中?