在蜂房地图类型变量(Map type variable in hive)

2019-08-08 04:53发布

我有麻烦试图在蜂巢定义地图类型。 据蜂巢手册肯定是有地图类型,不幸的是有没有对如何使用它的例子。 :-(

假设,我有下列的表(用户):

Name     Ph    CategoryName

这种“类别名称”列有特定的设置值。 现在,我想创建一个映射类别名称,以类别ID散列表。 我试着这样做:

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

我有2个问题:

  1. 当我set hivevar:${nameToID['A']}我认为,这将打印出值为1,但我得到“$ {hivevar:nameToID [‘A’]}未定义”

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

Answer 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

使用蜂房变量的等效:

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

这适用于蜂巢0.9.0



文章来源: Map type variable in hive
标签: hive hiveql