Улей создать массив из строки - PullRequest
0 голосов
/ 15 марта 2019

В моих данных у меня есть строки, разделенные запятыми.Было бы намного проще, если бы это были массивы, поэтому я могу легко сопоставить их, например, с другим массивом.Тем не менее я не могу создать массив из строки.

Пример кода:

create table tmp_array_string as
select '"abc", "def"' as tmp_string
      , array("abc", "def") as tmp_array

select a.*
     , array(tmp_string) as not_a_proper_array
     , size(tmp_array) as array_size
     , size(array(tmp_string) ) not_the_proper_array_size
from tmp_array_string a

Почему массив (tmp_string не приводит к массиву с 2 элементами и есть ли способчтобы сделать эту работу?

Большое спасибо!


После ответа на оставленное соединение, вот доказательство правильности. :-)
select a.*
     , array(tmp_string) as not_a_proper_array
     , split(regexp_replace(tmp_string,'"',''),',\\s*') as correct_array
     , size(tmp_array) as array_size
     , size(split(regexp_replace(tmp_string,'"',''),',\\s*')) as correct_size
     , size(array(tmp_string) ) not_the_proper_array_size
from tmp_array_string ater code here

правильный размер приводит к 2 :-)

1 Ответ

0 голосов
/ 15 марта 2019

Используйте split(str, ','), чтобы получить массив. Смотри доск: здесь

select split('abc, def',',\\s*'); --Delimiter is comma+zero or more spaces

Результат:

OK
["abc","def"]
Time taken: 1.676 seconds, Fetched: 1 row(s)

Если строка с разделителями содержит дополнительные двойные кавычки, удалите их, используя regex_replace:

 select split(regexp_replace('"abc", "def"','"',''),',\\s*');

Результат:

OK
["abc","def"]
Time taken: 3.735 seconds, Fetched: 1 row(s)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...