我有一个包含两列的表:id, datastring
id列只是一个bigint,而datastring列的元素看起来像
{"12345":[6789,true]}
{"1234678":[5678, false]}
我想选择一个表,其中第一列是id,第二列是数据字符串的引号部分中的数字。但是,这个数字并不总是相同的数字。
结果应为
id, numstring
4321, 12345
4322, 134678
提前致谢。
答案 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
。但那就是我。