Hive QL选择字符串的数字子串

时间:2014-01-15 05:46:53

标签: sql hql hive

我有一个包含两列的表:id, datastring

id列只是一个bigint,而datastring列的元素看起来像

{"12345":[6789,true]}

{"1234678":[5678, false]}

我想选择一个表,其中第一列是id,第二列是数据字符串的引号部分中的数字。但是,这个数字并不总是相同的数字。

结果应为

id, numstring

4321, 12345
4322, 134678

提前致谢。

1 个答案:

答案 0 :(得分:2)

您至少有两个选择。第一个是缓慢而干净的,第二个是快速而肮脏的。

让我们从第二个选项开始 - 内置Hive函数regexp_extract

SELECT id, regexp_extract(datastring, '^\\{"(\\d+)".*$', 1) AS numstring 
  FROM your_table

完成!

regexp_extract有三个参数:string,regexp和group index。如果regexp与字符串匹配,则regexp_extract返回由组索引指定的regexp组。

第一个选项是在Java中编写自己的UDF,它将使用Jackson或其他任何东西从数据字符串中提取numstring。我会选择regexp_extract。但那就是我。