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

标签 sql hql hive

我有一个包含两列的表格: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/

相关文章:

sql - Oracle中的CTE和表更新

apache-spark - 用以前的记录填充 NULLS - Netezza SQL

java - 如何正确编写 HQL

mysql - Hive 的 hour() 函数返回 12 小时时钟值

sql - 捕获连接表达式中的所有记录

SQL 条件连接?

c# - 在创建表 SQL Server 命令中引用默认值

java - 在 hibernate 命名查询中调用自定义函数

sql - Hadoop,处理带有分隔符但长度不同的文件

hadoop - hive 中的 Select 语句返回一些具有空值的列