配置单元中的映射类型变量
Posted
技术标签:
【中文标题】配置单元中的映射类型变量【英文标题】:Map type variable in hive 【发布时间】:2013-01-25 03:02:16 【问题描述】:我在尝试在 hive 中定义地图类型时遇到问题。根据Hive Manual 肯定有一个地图类型,不幸的是没有任何关于如何使用它的例子。 :-(
假设,我有一个包含以下列的表(用户):
Name Ph CategoryName
此“类别名称”列具有一组特定的值。现在我想创建一个将 CategoryName 映射到 CategoryID 的哈希表。我试着做:
set hivevar:nameToID=map('A',1,'B',2);
我有两个问题:
当我执行set hivevar:$nameToID['A']
时,我认为它会将值打印为 1。但我得到了
“$hivevar:nameToID['A'] 未定义”
我不知道该怎么说,select name, ph, $nameToID[CategoryName] from users
【问题讨论】:
【参考方案1】:假设您有下表:
describe test;
name string
ph string
category map<string,int>
select * from test;
name ph category
Name1 ph1 "type":1000,"color":200,"shape":610
Name2 ph2 "type":2000,"color":200,"shape":150
Name3 ph3 "type":3000,"color":700,"shape":167
访问地图栏:
select ph, category["type"], category["color"] from test;
ph1 1000 200
ph2 2000 200
ph3 3000 700
使用 Hive 变量的等效项:
set hivevar:nameToID=
map("t", category["type"], "c", category["color"], "s", category["shape"]);
select ph, $nameToID["t"], $nameToID["c"] from test;
ph1 1000 200
ph2 2000 200
ph3 3000 700
这适用于 Hive 0.9.0
【讨论】:
感谢洛兰德的回复。我刚刚检查了我们节点上的 hive 版本,不幸的是它是 0.8.1.6。所以我觉得我在这里不走运。 :-( 无论如何感谢您的帮助! 嗨洛兰,这是我正在尝试的:hive> set hivevar:nameToID=map("t","2","c","1");
hive> set $nameToID["t"];
$nameToID["t"] is undefined
你想达到什么目的? Hive 变量/属性是 [key=value] 对。 set $nameToID["t"]
似乎不完整。如果您想使用 hivevar 访问地图值,请参阅上面的答案。另请注意,在访问集合的值时,您不能同时评估返回所需索引的任何函数(在这种情况下,您将收到 Non-constant expression for map indexes not supported
错误)。这就是我在地图值中定义完整字段名称的原因。以上是关于配置单元中的映射类型变量的主要内容,如果未能解决你的问题,请参考以下文章