Как я могу разделить строку на определенный символ и извлечь значение каждого. Идея состоит в том, что мне нужно извлечь каждое слово между строками, включая начало/конец строки, поскольку эта информация что-то представляет. Есть ли шаблон регулярного выражения? или способ разделить информацию на столбцы?
Name
A|B|C|D|E|F|G
Name col1 col2 col3 col4 col5 col6 col7
A|B|C|D|E|F|G A B C D E F G
Я использую для этого BigQuery и не смог найти способ получить информацию обо всех них. Я попробовал код регулярного выражения, который работает только в случае, когда у нас есть A|B|C.
Я должен сравнить значение каждого столбца, а затем создать условия, используя case when
КОД:
select
regexp_extract(name, "\\w+\\S(x|y)") as c2, -- gives either x or y
left(regexp_substr(name, "\\w+\\S\\w+\\S\\w+"),1) as c1,
right(regexp_extract(name, "\\w+\\S\\w+\\S\\w+"),1) as c3
from Table
Это похоже на вариант использования SPLIT().
select split(name,"|")[safe_offset(0)] as c1, split(name,"|")[safe_offset(1)] as c2, ..
from table
см. https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#split
Добавлено использование safe_offset вместо смещения для Индекс массива 74 выходит за пределы (переполнение) большой запрос Google.
Туше! Хорошо, просто используйте SAFE_OFFSET. См. stackoverflow.com/questions/54546549/…
Рассмотрим ниже подход
select * from (
select *
from your_table, unnest(split(name, '|')) value with offset
)
pivot(any_value(value) as col for offset in (0,1,2,3,4,5,6))
если применяется к фиктивным данным, как в вашем вопросе - вывод
Решение имеет смысл, так как в некоторых случаях может не быть 6 столбцов имен, поэтому здесь важен нуль. Решение ниже не имеет этой функции. Мне просто нужно будет переименовать столбцы, которые, как мне кажется, нельзя сделать напрямую?
в вашем решении это не удастся, если количество столбцов не всегда одинаково. Возвращает ошибку вместо нулевого значения