我有一个包含两列的表格:id,datastring
id 列只是一个 bigint,而 datastring 列的元素类似于
{"12345":[6789,true]}
{"1234678":[5678, false]}
我想选择一个表,其中第一列是 id,第二列是数据字符串引号部分中的数字。但是,这个数字并不总是相同的位数。
结果应该是
id, numstring
4321, 12345
4322, 134678
提前致谢。
最佳答案
您至少有两个选择。第一个缓慢而干净,第二个快速而肮脏。
让我们从第二个选项开始 - 内置 Hive 函数 regexp_extract
:
SELECT id, regexp_extract(datastring, '^\\{"(\\d+)".*$', 1) AS numstring
FROM your_table
完成!
regexp_extract
采用三个参数:字符串、正则表达式和组索引。如果 regexp 与字符串匹配,则 regexp_extract
返回由组索引指定的正则表达式组。
第一个选项是用 Java 编写自己的 UDF,它将使用 Jackson 或其他方式从数据字符串中提取 numstring。我会选择regexp_extract
。但这就是我。
关于sql - Hive QL 选择字符串的数字子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129956/