Таблица запросов с 2 повторяющимися полями

У меня есть схема, которая содержит несколько повторяющихся полей, которые являются типом записи. Например, схема такая:

name: string,

class: record(repeated),

class.id :string

class.title: string,

school: record(repeated),

school.id: string,

school.title: string.

Как я могу запросить стандартный SQL и вернуть строку ученика со списком класса и школы (класс и школа совершенно не связаны).

На самом деле работает простой SELECT *, но я хочу выделить каждый столбец и переименовать их, т.е. SELECT имя как имя_ученика, классы, школы. Я также хочу отфильтровать некоторые классы и школы, т.е. показать только те классы, которые удовлетворяют некоторым ограничениям.

Пример: имя: «Том», класс: [{id: 1, название: математика}, {id: 2, название: физика}, {id: 3, название: математика}], школа: [{id: 1, title: Yale}, {id: 2, title: Havard}, {id: 3, title: Yale}] Я хочу отфильтровать по class.title и school.title, чтобы получить следующую строку: name: 'Tom', class: [{id: 1, title: math}, {id: 3, title: math}], school: [{id: 1, title: Yale}, {id: 3, title: Yale}]


person Viet Thang Dinh    schedule 22.01.2018    source источник
comment
Непонятно, что вы пытаетесь сделать. Пожалуйста, покажите пример ввода и ожидаемый результат.   -  person Elliott Brossard    schedule 23.01.2018


Ответы (1)


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

#standardSQL
SELECT name as student_name, 
  ARRAY(SELECT AS STRUCT * FROM UNNEST(class) class WHERE class.title = 'math') classes,
  ARRAY(SELECT AS STRUCT * FROM UNNEST(school) school WHERE school.title = 'Yale') schools
FROM `yourproject.yourdataset.yourtable`  

Вы можете протестировать/поиграть с выше, используя фиктивные данные из вашего вопроса:

#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
  SELECT 
    'Tom' name, 
    [
      STRUCT(1 AS id, 'math' AS title), 
      (2, 'physics'), 
      (3, 'math')
    ] class, 
    [
      STRUCT(1 AS id, 'Yale' AS title), 
      (2, 'Havard'), 
      (3, 'Yale')
    ] school 
)
SELECT name as student_name, 
  ARRAY(SELECT AS STRUCT * FROM UNNEST(class) class WHERE class.title = 'math') classes,
  ARRAY(SELECT AS STRUCT * FROM UNNEST(school) school WHERE school.title = 'Yale') schools
FROM `yourproject.yourdataset.yourtable`   

с результатом, как показано ниже

name    class.id    class.title school.id   school.title     
Tom     1           math        1           Yale     
        3           math        3           Yale     

Вышеприведенное должно дать вам представление о том, как фильтровать внутри повторяющегося поля.

person Mikhail Berlyant    schedule 24.01.2018