Bigquery SQL Разбиение длинного текста на число

#google-bigquery

#google-bigquery

Вопрос:

У меня есть данные, содержащие длинную строку, которая выглядит следующим образом

 id | desc |
1 | "1. xxxxxx 2. yyyyyyyy 3. zzzzzzz"
2 | "1. xxxx 2. yyyy
3 | "1. XXX
  

Я хочу разделить его на основе числа, чтобы оно стало строкой

 id | desc
1 | 1. xxx
1 | 2. yyyy
1 | 3. zzz
2 | 1. xxx
2 | 2. yyyy
  

Могу ли я как-нибудь сделать это в bigquery SQL?

Ответ №1:

Ниже приведен стандартный SQL BigQuery

 #standardSQL
select id, `desc`
from `project.dataset.table`, 
unnest(regexp_extract_all(`desc`, r'(d . w )')) `desc`
  

если применить к образцу данных из вашего вопроса — как в примере ниже

 #standardSQL
with `project.dataset.table` as (
  select 1 id, "1. xxxxxx 2. yyyyyyyy 3. zzzzzzz" `desc`union all
  select 2, "1. xxxx 2. yyyy" union all
  select 3, "1. XXX" 
)
select id, `desc`
from `project.dataset.table`, 
unnest(regexp_extract_all(`desc`, r'(d . w )')) `desc`
  

вывод

введите описание изображения здесь