【问题标题】:How would I use a dictionary for mapping in Hive?如何在 Hive 中使用字典进行映射?
【发布时间】:2021-11-03 13:47:34
【问题描述】:

假设我有一个表'my_table':

region_code | name
123         | 'test'
54          | 'test2'

还有一本字典:

dict = (123 -> "Moscow", 54 -> "Saint Petersburg")

我想做:

select dict[region_code] as region_code, name from my_table 获取:

region_code       | name
'Moscow'          | 'test'
'Saint Petersburg'| 'test2'

这在 hive 中可行吗?

【问题讨论】:

    标签: sql dictionary hive hiveql


    【解决方案1】:

    Dict 是一个地图,您可以使用 map() 构造创建地图并在查询中使用。

    演示:

    with my_table as(--demo dataset, use real table instead
    select 123 region_code, 'test' name union all
    select 54,'test2'
    )
    
    select region_code,
           map(123, "Moscow", 54, "Saint Petersburg")[region_code] as region_name,
           name
      from my_table;
    

    结果:

    region_code region_name         name
    123         Moscow              test
    54          Saint Petersburg    test2
    

    另外,如果你多次使用 dict,你可以使用变量:

    --declare variable
    set hiveconf:region_code_name_map=map(123, "Moscow", 54, "Saint Petersburg");
    
    with my_table as(
    select 123 region_code, 'test' name union all
    select 54,'test2'
    )
    
    select region_code,
           --use variable substitution
           ${hiveconf:region_code_name_map}[region_code] as region_name,
           name
      from my_table;
    

    或者使用宏+变量:

    --declare variable
    set hiveconf:region_code_name_map=map(123, "Moscow", 54, "Saint Petersburg");
    --create a macro
    create temporary macro code2name(code int) ${hiveconf:region_code_name_map}[code];
    
    with my_table as(
    select 123 region_code, 'test' name union all
    select 54,'test2'
    )
    
    select region_code,
           --use macro
           code2name(region_code) as region_name,
           name
      from my_table
    

    所有这些演示示例都产生相同的结果。也只能对地图内容进行参数化:123, "Moscow", 54, "Saint Petersburg",您可以将变量放入查询中的 map() 构造中。

    【讨论】:

      猜你喜欢
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      相关资源
      最近更新 更多