假设我有一个计算列: -
select str_to_map("k1:1,k2:2,k3:3")["k1"] as col1,
str_to_map("k1:1,k2:2,k3:3")["k2"] as col2,
str_to_map("k1:1,k2:2,k3:3")["k3"] as col3;
如何仅修复列计算一次并在查询中多次访问其值?计算的地图是相同的,只有不同的列正在访问不同的密钥。反复执行相同的计算是浪费资源。这个例子故意过于简单,但重点是我想知道如何在Hive中避免这种冗余。
答案 0 :(得分:0)
在一般使用子查询中,它们只计算一次。
select map_col.["k1"] as col1,
map_col.["k2"] as col2,
map_col.["k3"] as col3
from
(
select str_to_map("k1:1,k2:2,k3:3") as map_col from table...
)s;
您还可以将一些查询实现到表中,以便在不同的查询或工作流中重用数据集。