2016-12-07 4 views
2

Что я хочу сделать, должно быть простым: учитывая схему BigQuery, я хочу выделить все таблицы (включая вложенные), кроме нескольких. Трудность в том, что BigQuery имеет вложенную структуру, а некоторые из которых я хочу исключить, вложены в другие записи.BigQuery select * except inested column

Я нашел предложение SELECT * except в BigQuery documentation, которое кажется очень перспективным. Проблема в том, что она, похоже, не поддерживает исключение вложенной структуры.

Например, с помощью открытого github_nested набора данных мы можем написать запрос как

#standardSQL 
SELECT * except (payload) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000 

Это делает то, что мы успешно ожидать, удалив запись полезной нагрузки из результатов. Представим себе теперь, что мы хотим только удалить payload.comment, тем самым сохраняя остальную часть содержимого полезной нагрузки в ответе. Я пробовал

#standardSQL 
SELECT * except (payload.comment) FROM `bigquery-public-data.samples.github_nested` LIMIT 1000 

Однако это не удается.

Кто-нибудь знает, как это сделать?

Спасибо!

ответ

2

Способ думать о том, что вы все еще хотите получить столбец payload, но вы хотите, чтобы у него была другая структура, а именно, чтобы исключить comment. В этом случае вы можете использовать SELECT * REPLACE, чтобы внести изменения. Например,

#standardSQL 
SELECT * REPLACE ((SELECT AS STRUCT payload.* EXCEPT (comment)) AS payload) 
FROM `bigquery-public-data.samples.github_nested` 
LIMIT 1000; 
+0

Спасибо, Эллиот. Это действительно решает проблему, изложенную выше. К сожалению, я был страшным вопросом для плаката и понял, что мое дело было немного сложнее с повторным полем (чего нет в примере). Я добавлю обновление к вопросу. Опять же, извинения! – Spikey

+0

Если это отвечает на исходный вопрос, не возражаете ли вы отметить его как принятый? Не стесняйтесь публиковать еще один вариант вопроса, связанный с повторяющимися полями. Благодаря! –

+0

Если это соглашение, используемое для stackoverflow, обязательно. Спасибо вам за помощь! – Spikey