Обрезка после разделения строки на BigQuery

# #sql #google-bigquery

Вопрос:

Я пытаюсь обрезать свою символьную переменную, которая представляет собой простую строку, такую как John или Lucy . Обычно есть некоторое дополнительное пространство, и я хотел бы удалить эти дополнительные пробелы, используя TRIM внутри WITH AS предложения

 WITH students AS (
    SELECT 
    AZE,
    EPI,
    SYMB,
    from schools.boston, 
    unnest(split(AZE, ',') || split(EPI, ',')) as SYMB)
 

пример входных данных

 {
  "id": 1,
  "AZE": "english , chinese , french",
  "EPI": "math, physics"
},
{
  "id": 2,
  "AZE": "",
  "EPI": "computer science"
},
{
  "id": 3,
  "AZE": "taiwanese, russian, italian, turkish",
  "EPI": "painting, drawing"
}
 

выходные СИМВОЛЬНЫЕ строки

 id 1 - row 1:english 
id 1 - row 2: chinese --> extra space to remove
id 1 - row 3: french  --> extra space to remove
id 1 - row 4:math 
id 1 - row 5: physics --> extra space to remove
 

Единственное место, где я смог использовать обрезку в своем запросе, было в SELECT , но оно выполняется только TRIM до процесса разделения. Каков был бы наилучший способ применить a TRIM к моей SYMB переменной?

  WITH students AS (
        SELECT 
        trim(AZE) as AZE,
        trim(EPI) as EPI,
        SYMB,
        from schools.boston, 
        unnest(split(AZE, ',') || split(EPI, ',')) as SYMB)
 

Комментарии:

1. Можете ли вы предоставить некоторые примеры данных

2. Я просто добавил один пример, надеюсь, в этом есть смысл

Ответ №1:

SYMB является результатом unnest() , так что это то, что вы хотите обрезать:

 select . . . , trim(symb)
 

Ответ №2:

 with data as (
    select 1 as id, 'english, chinese, french' as AZE, "math, physics" as EPI   union all 
    select 2, "", "computer science"    union all 
    select 3, "taiwanese, russian, italian, turkish", "painting, drawing"
),
split_and_concat as (
    select 
        data.*, split(AZE, ',') || split(EPI, ',') as SYMB
    from data
),
trimmed as (
    select
        split_and_concat.*, trim(item) as item
    from split_and_concat,
    unnest(SYMB) as item
)
select id, item
from trimmed