Крест, соединяющий необъявленные пустые массивы - PullRequest
0 голосов
/ 04 мая 2018

У меня есть таблица, которая получена из схемы JSON, например:

{name: 'Foo', implies: []}
{name: 'Bar', implies: ['Foo']}
{name: 'Baz', implies: ['Foo', 'Bar']}

Я хотел бы удалить поле implies, чтобы у меня было одно name на значение. Например:

name, implies
Foo,
Bar, Foo
Baz, Foo
Baz, Bar 

У меня есть запрос:

SELECT name, implies FROM table, UNNEST(implies) AS implies

Но имена с пустыми значениями пропускаются, поэтому я не получаю поле имени "Foo".

Я не могу сделать FULL JOIN на UNNEST(implies):

 Array scan is not allowed with FULL JOIN: UNNEST expression

Как получить ожидаемый результат при данной схеме?

1 Ответ

0 голосов
/ 04 мая 2018

Вы можете использовать LEFT JOIN здесь

#standardSQL
SELECT name, implies 
FROM `project.dataset.your_table`
LEFT JOIN UNNEST(implies) AS implies

Вы можете проверить это с помощью фиктивных данных из вашего вопроса как

#standardSQL
WITH `project.dataset.your_table` AS (
SELECT 'Foo' name, [] implies UNION ALL
SELECT 'Bar', ['Foo'] UNION ALL
SELECT 'Baz', ['Foo', 'Bar']
)
SELECT name, implies 
FROM `project.dataset.your_table`
LEFT JOIN UNNEST(implies) AS implies

с результатом как

Row name    implies  
1   Foo     null     
2   Bar     Foo  
3   Baz     Foo  
4   Baz     Bar  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...