Ich habe einen regulären Ausdruck, um einige rohe Daten in einer Tabelle zu analysieren, etwas wie: ',?([\w]*|\d*)'
.Hive - Verwenden Sie Regxp, um Gruppen zu erstellen und sie einem Array zuzuweisen
select regexp_extract(raw_line,',?([\w]*|\d*){1}',1) as field1
, regexp_extract(raw_line,',?([\w]*|\d*){2}',1) as field2
, ...
, regexp_extract(raw_line,',?([\w]*|\d*){n}',1) as fieldn
from table
Dies erstellt Gruppen zum Analysieren von CSV-Feldern. Das Problem besteht darin, dass die Tabelle und die zu analysierenden Zeilen lang sind. Dies ist also eine teure Operation.
ich mich gefragt, ob ich den regulären Ausdruck (ohne die Gruppe verwenden könnte {n}
und spaltete es in ein Array, dann könnte ich den Array-Indizes verwenden, um jedes Feld zu bekommen So etwas wie:..
select arr_raw[0] as field1,
...,
arr_raw[n] as fieldn
from (
split(
select regexp_extract(raw_line, ',?([\w]*|\d*)'
, ) as arr_raw -- ??
)t
Ich weiß, wie viele Gruppen werden in der Tabelle, aber nicht sicher, ob dies möglich ist, oder das, was der korrekte Syntax/Ansatz soll.
Dank.
prüfen aktualisiert Antwort –