【问题标题】:Hive QL selecting numeric substring of stringHive QL 选择字符串的数字子字符串
【发布时间】:2014-01-15 05:46:52
【问题描述】:

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

id 列只是一个 bigint,而 datastring 列的元素看起来像

{"12345":[6789,true]}

{"1234678":[5678, false]}

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

结果应该是

id, numstring

4321, 12345
4322, 134678

提前致谢。

【问题讨论】:

    标签: sql hql hive


    【解决方案1】:

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

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

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

    完成!

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2013-12-31
      相关资源
      最近更新 更多