admin

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

sql

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

id列只是bigint,而datastring列包含的元素看起来像

{"12345":[6789,true]}

{"1234678":[5678, false]}

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

结果应该是

id, numstring

4321, 12345
4322, 134678

提前致谢。


阅读 194

收藏
2021-06-07

共1个答案

admin

您至少有两个选择。第一个很慢很干净,第二个又快又脏。

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

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

完毕!

regexp_extract接受三个参数:字符串,正则表达式和组索引。如果regexp与字符串匹配,则regexp_extract返回由组索引指定的regexp组。

第一种选择是用Java编写自己的UDF,它将使用Jackson或其他方法从数据字符串中提取numstring。我会去的regexp_extract。就是我

2021-06-07