Hive 如何将键值对插入到配置单元映射中?

Hive 如何将键值对插入到配置单元映射中?,hive,Hive,基于以下内容,配置单元具有贴图类型。但是,似乎没有一种文档化的方法可以通过带有一些自定义项或内置函数的SELECT将新的键值对插入到配置单元映射中。这可能吗 作为澄清,假设我有一个名为foo的表,其中有一列,键入map,名为column\u,包含

基于以下内容,配置单元具有贴图类型。但是,似乎没有一种文档化的方法可以通过带有一些自定义项或内置函数的
SELECT
将新的键值对插入到配置单元映射中。这可能吗

作为澄清,假设我有一个名为
foo
的表,其中有一列,键入
map
,名为
column\u,包含

现在我想创建一个新表,该表也有一列,键入
map
,但我希望每个map(包含在单个列中)都有一个额外的键值对

查询可能如下所示:

CREATE TABLE IF NOT EXISTS bar AS
SELECT ADD_TO_MAP(column_containing_map, "NewKey", "NewValue") 
FROM foo;

然后,表
bar
将包含与表
foo
相同的映射,除了
bar
中的每个映射将有一个额外的键值对。

对不起,我没有完全理解这一点。带有一些自定义项或内置函数的是什么意思?如果希望插入到具有映射字段的表中,它类似于任何其他数据类型。例如:

我有一个名为complex1的表,创建方式如下:

CREATE TABLE complex1(c1 array<string>, c2 map<int,string> ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' COLLECTION ITEMS TERMINATED BY '-' MAP KEYS TERMINATED BY ':' LINES TERMINATED BY '\n';
CREATE TABLE complex1(c1数组,c2映射)行格式分隔字段以“,”结尾的集合项以“-”结尾的映射键以“:”结尾的行以“\n”结尾;
我还有一个名为com.txt的文件,其中包含以下内容: 穆罕默德·塔里克,007:Bond

现在,我将把这些数据加载到上面创建的表中:

将路径“/inputs/com.txt”中的数据加载到表complex1中

因此,该表包含:

从complex1中选择*

[“穆罕默德”、“塔里克”]{7:“邦德”}

所用时间:0.062秒

我还有一张表,叫做complex2:

CREATE TABLE complex2(c1 map<int,string>);
创建表complex2(c1映射);
现在,要从complex1中选择数据并插入complex2,我将执行以下操作:

在表complex2中插入从complex1中选择c2

扫描表格以进行交叉检查:

从complex2中选择*

{7:“债券”}

所用时间:0.062秒


HTH

我认为来自的联合收割机功能将满足您的需要。稍微修改原始问题中的查询,它看起来像这样

SELECT 
    combine(column_containing_map, str_to_map("NewKey:NewValue")) 
FROM 
    foo;

此示例的限制是str_to_map创建一个映射。如果您的配置单元映射包含键或值的其他基本类型,则此操作将不起作用。

假设您有一个包含不同主题的学生标记的学生表

hive> desc student;
id                      string
name                    string
class                    string
marks                   map<string,string>
这里的“empinfo”表可以是数据库中的任何表。 结果如下:

100     Sekar   Mathematics     {"Mathematics":"78"}

对于键值对,可以像以下sql一样插入:

在表中插入学生值(“id”、“名称”、“类”

地图(“键1”、“值1”、“键2”、“值2”、“键3”、“值3”、“键4”、“值4”))


请注意映射中值的顺序。

尝试了与Hive MapR 5上给出的完全相同的示例,并得到以下错误
失败:SemanticException[错误10293]:无法为insert/values
中不支持的TOK_函数类型的insert values表达式创建临时文件,表结构中没有
map
字段,查询插入值没有问题如果要插入多个值,它将如何工作?像多个键值对?
100     Sekar   Mathematics     {"Mathematics":"78"}