BigQuery select и псевдоним поля из вложенного массива без группировки - PullRequest
0 голосов
/ 09 января 2020

У меня есть некоторые данные в таблице BigQuery, где одно из полей является массивом структур. Я пытаюсь по существу сделать SELECT *, но псевдоним вложенных полей в массиве. Вот краткий пример:

with array_of_records as (
  select
    'field1' as regular_field,
    [struct ('arr_1a' as field_1, 'arr_1b' as field_2), struct ('arr_2a' as field_1, 'arr_2b' as field_2)] as array_field
)

select
  regular_field,
  array_agg (
    struct (
      array_entry.field_1 as field_a,
      array_entry.field_2 as field_b
    )
  ) as array_field
from array_of_records, unnest(array_field) array_entry
group by 1

Есть ли способ сделать это без необходимости использовать array_agg и group_by? Я спрашиваю, потому что таблица имеет большое количество полей, и я хочу избежать группировки по всем, кроме вложенного поля массива. Я понимаю, что могу также объединить каждый столбец с чем-то вроде any_value(), но это тоже не кажется особенно чистым решением.

1 Ответ

2 голосов
/ 09 января 2020

Из опыта я знаю, что выполнение этого подзапроса может быть большим выигрышем:

select regular_field,
       (SELECT array_agg(struct(array_entry.field_1 as field_a, array_entry.field_2 as field_b))
        FROM  unnest(ar.array_field) array_entry
       ) as array_field       
from array_of_records ar;

Это позволяет избежать "глобального" агрегирования, поэтому данные не должны перемещаться между множеством узлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...