Hive 配置单元中的映射类型变量

Hive 配置单元中的映射类型变量,hive,hiveql,Hive,Hiveql,我在尝试定义配置单元中的映射类型时遇到问题。据了解,确实存在一种映射类型,但遗憾的是,没有任何关于如何使用它的示例:-( 假设我有一个具有以下列的表(用户): Name Ph CategoryName 此“CategoryName”列具有特定的值集。现在我想创建一个哈希表,将CategoryName映射到CategoryID。我尝试了以下操作: set hivevar:nameToID=map('A',1,'B',2); 我有两个问题: 当我设置hivevar:${nameT

我在尝试定义配置单元中的映射类型时遇到问题。据了解,确实存在一种映射类型,但遗憾的是,没有任何关于如何使用它的示例:-(

假设我有一个具有以下列的表(用户):

Name     Ph    CategoryName
此“CategoryName”列具有特定的值集。现在我想创建一个哈希表,将CategoryName映射到CategoryID。我尝试了以下操作:

set hivevar:nameToID=map('A',1,'B',2); 
我有两个问题:

  • 当我设置hivevar:${nameToID['A']}时,我以为它会将值打印为1 “${hivevar:nameToID['A']}未定义”

  • 我不知道如何才能从用户那里说出像,
    select name,ph,${nameToID[CategoryName]}这样的话


  • 假设您有下表:

    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}
    
    使用配置单元变量的等效项:

    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”]未定义
    要实现什么?配置单元变量/属性是[key=value]对。
    设置${nameToID}[“t”]
    似乎不完整。如果您想使用hivevar访问映射值,请参阅上面的答案。还要注意,在访问集合值时,您不能同时计算任何返回所需索引的函数(在这种情况下,您将得到不支持的映射索引的
    非常量表达式
    错误).这就是我在映射值中定义完整字段名的原因。
    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