hive explode 与序列号

标签 hive explode

数据如下:

col1  Col2  pathstr
3   5   some_string_a> some_string_b>some_string_c
8   6   some_string_d> some_string_e>some_string_f

第三列“pathstr”是有顺序的路径数据。我使用 explode 功能如下:

SELECT col1, col2, path,
FROM table_paths
LATERAL VIEW explode(split(pathstr,'>')) subView as path;

并得到以下结果:

3 5 some_string_a
3 5 some_string_b
3 5 some_string_c
8 6 some_string_d
8 6 some_string_e
8 6 some_string_f

但是,分解的数据会丢失路径字符串的顺序信息。我想知道是否可以生成一个额外的“序列”列,如下所示。或者有更好的方法来做到这一点。

3 5 some_string_a, 1
3 5 some_string_b, 2
3 5 some_string_c, 3
8 6 some_string_d, 1
8 6 some_string_e, 2
8 6 some_string_f, 3

最佳答案

您可以使用posexplode 。它分解为两列,即数组中的位置和值。

配置单元查询示例:

hive> SELECT a.col1, a.col2, b.path, b.pos
> FROM (
>     SELECT 3 col1, 5 col2, 
>         "some_string_a> some_string_b>some_string_c" pathstr
>     UNION ALL
>     SELECT 8 col1, 6 col2, 
>         "some_string_d> some_string_e>some_string_f" pathstr
> ) a
> LATERAL VIEW POSEXPLODE(split(pathstr,'>')) b as pos, path
> ;
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201708181020_16679, Tracking URL = /jobdetails.jsp?jobid=job_201708181020_16679
Kill Command = /opt/mapr/hadoop/hadoop-0.20.2/bin/../bin/hadoop job  -kill job_201708181020_16679
Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0
2017-08-19 07:48:31,023 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 1.5 sec
MapReduce Total cumulative CPU time: 1 seconds 500 msec
Ended Job = job_201708181020_16679
MapReduce Jobs Launched: 
Job 0:  Cumulative CPU: 1.5 sec   MAPRFS Read: 264 MAPRFS Write: 80 SUCCESS
Total MapReduce CPU Time Spent: 1 seconds 500 msec
OK
3   5   some_string_a   0
3   5    some_string_b  1
3   5   some_string_c   2
8   6   some_string_d   0
8   6    some_string_e  1
8   6   some_string_f   2
Time taken: 327.33 seconds, Fetched: 6 row(s)

关于 hive explode 与序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23277233/

相关文章:

hadoop - 使用 Spark 上的 Hive 将数据从 gzip 转换为equenceFile 格式

PHP 在键值对中拆分字符串

hadoop - 使用derby初始化时出现Hive异常

mysql - 如何在hive中的select语句中编写带有附加列的子查询,该附加列的单个值是通过某些行的总和获得的

php - 在 PHP 中,哪个更快 : preg_split or explode?

PHP:按域对电子邮件进行排序

php - d/m/y 到 Y-m-d php stringtotime 无法正常工作

Mysql explode 函数

hive - Hive 中的解析异常

hadoop - HIVE 1.x ACID 功能 - 更新和删除不起作用