在hive中映射类型变量

tes*_*123 10 hive hiveql

我无法在hive中定义地图类型.根据Hive手册,肯定有一种地图类型,遗憾的是没有任何关于如何使用它的例子.:-(

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

Name     Ph    CategoryName
Run Code Online (Sandbox Code Playgroud)

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

set hivevar:nameToID=map('A',1,'B',2); 
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 当我这样做时,set hivevar:${nameToID['A']}我认为它会将值打印为1.但我得到"$ {hivevar:nameToID ['A']}未定义"

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

Lor*_*dig 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}
Run Code Online (Sandbox Code Playgroud)

访问地图列:

select ph, category["type"], category["color"] from test;
ph1    1000    200
ph2    2000    200
ph3    3000    700
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)

这适用于Hive 0.9.0