Hive QL выбор числовой подстроки строки



У меня есть таблица с двумя столбцами: id, datastring

Столбец id-это просто bigint, а столбец datastring содержит элементы, которые выглядят как

{"12345":[6789,true]}

{"1234678":[5678, false]}

Я хотел бы выбрать таблицу, где первый столбец является идентификатором, а второй столбец-номером в кавычках части datastring. Однако это число не всегда совпадает с числом цифр.

Результат должен быть

id, numstring

4321, 12345
4322, 134678

Заранее благодарю.

120   1  

1 ответ:

У вас есть по крайней мере два варианта. Первый-медленный и чистый, второй-быстрый и грязный.

Начнем со второго варианта-встроенной функции улья regexp_extract:
SELECT id, regexp_extract(datastring, '^\\{"(\\d+)".*$', 1) AS numstring 
  FROM your_table

Готово!

regexp_extract принимает три аргумента: string, regexp и group index. Если регулярное выражение совпадает со строкой, то regexp_extract возвращает группу регулярных выражений, указанную индексом группы.

Первый вариант-написать свой собственный UDF на Java, который будет извлекать numstring из datastring с помощью Jackson или что угодно. Я бы пошел с regexp_extract. Но это я.

    Ничего не найдено.

Добавить ответ:
Отменить.