解决方案hive 构造给定大小的数组 array

Posted Sinsa_SI

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决方案hive 构造给定大小的数组 array相关的知识,希望对你有一定的参考价值。

需求

现有如下数据表 table_1

ab
a13
a22
a31

想要得到的结果表为 table_2

ab
a13
a13
a13
a22
a22
a31

方案

从表 table_1 到 table_2,实际就是对数据按照 b 列的取值进行展开,如 b 列取值为 3 时所在行展开为 3 行。分析思路如下:

  1. 我们首先想到的是 explode 函数有此功能,这样新问题是 explode 接受的参数为 array,因此需要构造一个给定大小的数组
  2. 构造一个给定大小的数组,这里给出的方案是结合字符串 udf 函数 splitrepeat,具体 sql 如下:
select a, b 
from table_1
lateral view explode(split(repeat('a', b-1), 'a')) mtb as cc

总结

  1. hive 构造给定大小的数组过程中,使用到了 2 个字符串 udf 函数 splitrepeat
  2. 注意 repeat 函数中长度要 -1

以上是关于解决方案hive 构造给定大小的数组 array的主要内容,如果未能解决你的问题,请参考以下文章

创建具有构造函数中给定大小的数组

java基础知识4--数组的常用方法(Array)

javascript 创建给定大小的空数组

Hive获取array数组长度

php从给定数组生成所有组合

Laravel 5:in_array() 期望参数 2 是数组,给定对象