在hive中映射类型变量

时间:2013-01-25 03:02:17

标签: hive hiveql

我无法在hive中定义地图类型。根据{{​​3}},确实存在地图类型,遗憾的是没有关于如何使用它的任何示例。 :-(

假设我有一个表(用户),其中包含以下列:

Name     Ph    CategoryName

此“CategoryName”列具有特定的值集。现在我想创建一个将CategoryName映射到CategoryID的哈希表。我试过了:

set hivevar:nameToID=map('A',1,'B',2); 

我有两个问题:

  1. 当我set hivevar:${nameToID['A']}时,我认为它会将值打印为1.但是我得到了 “$ {hivevar:nameToID ['A']}未定义”

  2. 我不知道怎么说select name, ph, ${nameToID[CategoryName]} from users

1 个答案:

答案 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