【问题标题】:Explode a string in HIVE在 HIVE 中分解字符串
【发布时间】:2023-03-08 01:05:01
【问题描述】:

我遇到了一个有趣的问题。我有一个调用 Python UDF 的 HIVE 脚本来操作一些日期。 Python 的输出是 6 列,3 列是字符串,3 列是数组。

例如print '%s\t%s\t%s\t%s\t%s\t%s\t%s' % (ID1, ID2, ID3, ARR1, ARR2, ARR3)

这是我的 python UDF 输出中的一行:

10161   10400511433810000       (0000010161, 10400511433810001) ["0011583180","0011583180","0011583180"]        ['2004-04-16', '2004-04-16', '2004-04-16']      ['2004-09-03', '2004-09-03', '2004-09-03']      

# 问题1: 我正在使用%s,因为我无法找到一种方法将数组返回给 HIVE,而 HIVE 会将它们作为数组读取。

所以我在 HIVE 中创建了一个表,它甚至将数组作为字符串导入,假设我能够将字符串拆分为一个数组。我使用的脚本:

insert overwrite table table2
SELECT 
ID1,
ID2,
ID3,
SPLIT(ARR1, '\\\t') as ARR1,
SPLIT(ARR2, '\\\t') as ARR2,
SPLIT(ARR3, '\\\t') as ARR3
FROM table1 
LIMIT 10;  

# 问题2:我得到以下输出:

0000010167      10400514362740001       (0000010167, 10400514362740001) ["[\"0022136941\",\"0022315161\"]"]     ["['1900-01-01', '2007-05-01']"]        ["['1900-01-01', '2008-06-16']"]        

我真正需要的是:

0000010167      10400514362740001       (0000010167, 10400514362740001)      0022136941       1900-01-01      1900-01-01
0000010167      10400514362740001       (0000010167, 10400514362740001)      0022315161       2007-05-01      2008-06-16

【问题讨论】:

    标签: python hadoop split hive user-defined-functions


    【解决方案1】:

    在我的想法中,你有一个水平的桌子,但你需要的是一个垂直的桌子。我不知道 如何使用 Hive 来解决这个问题,所以我用 mapreduce 解决了它。 是的,在这种情况下使用 mapreduce 非常容易。 这是一个中文示例,但您只需要了解Java代码即可。 mapreduce example.

    【讨论】:

      【解决方案2】:

      您可能想查看Exhibit,它是 Hive UDF/UDTF 的原型,它在行内执行嵌套 SQL 查询,并将其与 Lateral view 相关联。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-03
        • 1970-01-01
        • 2019-10-16
        • 2012-12-29
        • 2020-03-12
        相关资源
        最近更新 更多