我有一个包含两列的表: id, datastring
id, datastring
id列只是bigint,而datastring列包含的元素看起来像
{"12345":[6789,true]} {"1234678":[5678, false]}
我想选择一个表,其中第一列是id,第二列是数据字符串的引号部分中的数字。但是,此数字并不总是相同的数字。
结果应该是
id, numstring 4321, 12345 4322, 134678
提前致谢。
您至少有两个选择。第一个很慢很干净,第二个又快又脏。
让我们从第二个选项开始-内置的Hive函数regexp_extract:
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。就是我