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() 构造中。