Hive侧视图 LATERAL VIEW 和 LATERAL VIEW OUTER 使用示例
1. 在Hive SQL中, LATERAL VIEW
和 LATERAL VIEW OUTER
都用于在查询中展开复杂数据类型的字段,但它们之间有一些区别:
-
LATERAL VIEW:
LATERAL VIEW
用于将复杂数据类型的字段展开为表格形式,以便在查询中使用。- 通常与
explode()
函数一起使用,用于展开数组类型的字段。
-
LATERAL VIEW OUTER:
LATERAL VIEW OUTER
是LATERAL VIEW
的扩展,用于处理在展开复杂数据类型时可能存在NULL
值的情况。- 当使用
LATERAL VIEW OUTER
时,如果展开操作无法成功(例如,数组字段为NULL
),则会返回一个NULL
行。
2. 下面使用实际代码示例来说明:
- 创建表hero_actions,包含hero和actions两个字段,并插入数据
CREATE TABLE hero_actions
(
hero STRING,
actions STRING
);
INSERT OVERWRITE TABLE hero_actions
VALUES ('Lvbu', '右边腿,左正登'), -- Lvbu的actions包括右边腿和左正登
('Jack', null); -- Jack的actions为空
查询一:使用LATERAL VIEW展开actions字段中的数据,并将展开后的数据作为新的字段action
SELECT hero, action
FROM hero_actions
LATERAL VIEW explode(split(actions, ',')) actionTable AS action;
查询二:使用LATERAL VIEW OUTER展开actions字段中的数据,并将展开后的数据作为新的字段action
SELECT hero, action
FROM hero_actions
LATERAL VIEW OUTER explode(split(actions, ',')) actionTable AS action;
3. 两个查询执行结果如下:
- 第一个查询(使用 LATERAL VIEW ):
Lvbu 右边腿
Lvbu 左正登
- 第二个查询(使用 LATERAL VIEW OUTER ):
Lvbu 右边腿
Lvbu 左正登
Jack NULL
在第一个查询中,由于 Jack 的 actions 字段为 NULL ,所以在使用 LATERAL VIEW 展开时,不会生成任何新的行。而在第二个查询中,使用 LATERAL VIEW OUTER 能够处理 NULL 值情况,保留了 Jack 的原始行并将 action 字段设为 NULL 。
总的来说,
LATERAL VIEW
和LATERAL VIEW OUTER
都用于在Hive中展开复杂数据类型的字段,但LATERAL VIEW OUTER
会处理NULL
值情况,确保展开操作的稳健性。根据具体情况和需求,可以选择合适的关键字来展开数据类型以便在查询中使用。