我无法在hive中定义地图类型。根据{{3}},确实存在地图类型,遗憾的是没有关于如何使用它的任何示例。 :-(
假设我有一个表(用户),其中包含以下列:
Name Ph CategoryName
此“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
答案 0 :(得分:25)
我们假设你有下表:
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