Разделение строки на столбцы для извлечения значений с помощью BigQuery

Как я могу разделить строку на определенный символ и извлечь значение каждого. Идея состоит в том, что мне нужно извлечь каждое слово между строками, включая начало/конец строки, поскольку эта информация что-то представляет. Есть ли шаблон регулярного выражения? или способ разделить информацию на столбцы?

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
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
55
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это похоже на вариант использования 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.

в вашем решении это не удастся, если количество столбцов не всегда одинаково. Возвращает ошибку вместо нулевого значения

trillion 03.05.2022 10:07

Туше! Хорошо, просто используйте SAFE_OFFSET. См. stackoverflow.com/questions/54546549/…

Mike Karp 05.05.2022 23:13
Ответ принят как подходящий

Рассмотрим ниже подход

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 столбцов имен, поэтому здесь важен нуль. Решение ниже не имеет этой функции. Мне просто нужно будет переименовать столбцы, которые, как мне кажется, нельзя сделать напрямую?

trillion 03.05.2022 10:05

Другие вопросы по теме