表中有一列是 array<string>
. 从此以后,每天都对表进行分区 2018-01-01
. 在某个阶段,数组中的值从字符串变为整数。数据如下所示:
| yyyy_mm_dd | h_id | p_id | con |
|------------|-------|------|---------------|
| 2018-10-01 | 52988 | 1 | ["res", "av"] |
| 2018-10-02 | 52988 | 1 | ["1","2"] |
| 2018-10-03 | 52988 | 1 | ["1","2"] |
字符串和整数之间存在Map。”res“Map到1,av”Map到2等等。但是,我编写了一个查询来执行一些逻辑。下面是它的一个片段(子查询):
SELECT
t.yyyy_mm_dd,
t.h_id,
t.p_id,
CAST(e.con AS INT) AS api
FROM
my_table t
LATERAL VIEW EXPLODE(con) e AS con
我的问题是,这不适用于以前使用字符串而不是整数的日期。是否仍然需要选择con并将字符串重新Map为整数,以便数据跨所有分区?
预期产量:
| yyyy_mm_dd | h_id | p_id | con |
|------------|-------|------|---------------|
| 2018-10-01 | 52988 | 1 | ["1","2"] |
| 2018-10-02 | 52988 | 1 | ["1","2"] |
| 2018-10-03 | 52988 | 1 | ["1","2"] |
一旦选定的值都是整数(在字符串数组中),则 CAST(e.con AS INT)
会有用的
编辑:为了澄清,我将在使用前将解决方案作为子查询 lateral view explode
. 这样我在一个表上展开,其中所有分区中都有整数 con
. 我希望这有道理。
1条答案
按热度按时间anauzrmj1#
CAST(e.api as INT)
如果无法强制转换,则返回null。collect\u list将收集一个包含重复项且不包含空值的数组。如果需要没有重复元素的数组,请使用collect\u set()。