如何在hive中获取所有可能的模式

时间:2017-11-09 17:44:12

标签: hadoop hive hiveql

我有下表:

+----------+----+
|customerID|name|
+----------+----+
|         1| Ram|
+----------+----+

我希望输出为(列值的所有可能值):

+----------+----+
|customerID|name|
+----------+----+
|         1| Ram|
|         2| Arm|
|         3| Mar|
|         .| ...|
|         .| ...|
+----------+----+

1 个答案:

答案 0 :(得分:1)

拆分字符串,爆炸数组并使用自身交叉连接来查找所有可能的组合:

 with s as (select col 
              from (select explode( split(lower('Ram'),'')) as col)s 
             where col <>''
           ) 
 select concat(upper(s1.col), s2.col, s3.col) as name, 
        row_number() over() as customerId
   from s s1 
        cross join s s2 
        cross join s s3
where s1.col<>s2.col and s2.col<>s3.col;

结果:

OK
name    customerid
Mam     1
Mar     2
Mrm     3
Mra     4
Ama     5
Amr     6
Arm     7
Ara     8
Rma     9
Rmr     10
Ram     11
Rar     12
Time taken: 185.638 seconds, Fetched: 12 row(s)

如果没有上一个WHERE s1.col<>s2.col and s2.col<>s3.col,您将获得所有组合,例如AaaArrRrr等。