Saya mencoba mengurai string yaitu:

"297", "298", "Y","", "299"

Menggunakan server Regexp tetapi saya tidak dapat melakukannya. Definisi Tabel yang saya buat adalah:

create external table test.test1
(a string,
b string,
c string,
d string)
row format serde 'org.apache.hadoop.hive.serde2.RegexSerDe'
with serdeproperties ("input.regex" = "\"\"|\"([^\"]+)\"")

Regex yang digunakan dalam properti serde terlihat menjanjikan di situs web pengujian regexp tetapi saya mendapatkan pengecualian ketika mencoba membaca tabel, mohon bantu saya dalam hal ini. Saya tahu bahwa ini dapat dengan mudah dilakukan menggunakan csv serde tetapi saya mencoba untuk mencari tahu bagian yang lebih besar dari masalah yang saya harus menggunakan regexp serde Terima kasih

1
TimesNow 28 Februari 2020, 15:43

1 menjawab

Jawaban Terbaik

Di regex itu harus menangkap grup per kolom. Data Anda berisi 5 kolom dan tabel 4, Anda ingin melewatkan satu kolom, bukan?

Misalnya regex ini akan berfungsi: with serdeproperties ('input.regex' = '^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$')

Anda dapat dengan mudah memeriksa tanpa membuat tabel, seperti ini:

select regexp_replace('"297","298","Y","","299"','^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$','$1|$2|$3|$4');
OK
_c0
297|298|Y|299

select regexp_replace('"297","298","Y","this column is skipped","299"','^"(.*?)","(.*?)","(.*?)",.*?,"(.*?)"$','$1|$2|$3|$4');
OK
_c0
297|298|Y|299
0
leftjoin 2 Maret 2020, 14:35