Hive QL выбор числовой подстроки строки
У меня есть таблица с двумя столбцами: id, datastring
Столбец id-это просто bigint, а столбец datastring содержит элементы, которые выглядят как
{"12345":[6789,true]}
{"1234678":[5678, false]}
Я хотел бы выбрать таблицу, где первый столбец является идентификатором, а второй столбец-номером в кавычках части datastring. Однако это число не всегда совпадает с числом цифр.
Результат должен быть
id, numstring
4321, 12345
4322, 134678
Заранее благодарю.
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. Но это я.
Comments