2013-08-27 2 views
0

У меня есть набор данных с чередованием, похожий на «Partitioning by date?», но в некоторые дни нет данных и, следовательно, нет дней. Идеальным решением было бы сделать все таблицы (даты) необязательными. Это возможно?Как сделать таблицы необязательными в запросе Bigquery

Подробнее: Если вы выполните выбор из последовательности, следующей за последовательностью [main.2013-08-01], [main.2013-08-02], ... каждая таблица должна существовать. Если какая-либо из этих таблиц не существует, bigquery отвечает на ошибку 500 при попытке выполнить запрос. Используя термин «факультативный», я надеюсь на синтаксис, который позволил бы какой-либо конкретной таблице не существовать, но запрос, который все еще выполняется против других таблиц в сумме. Пример того, на что я надеюсь: возможно, запрос говорит SELECT * от? [Main.2013-08-01],? [Main.2013-08-02], ... но [main.2013-08-02 ] не существует. Допустим, потому что у него есть?? индикатор перед таблицей считается факультативным, и запрос все еще выполняется успешно, и я получаю результаты, но только из [main.2013-08-01] и любых других таблиц, которые действительно существуют.

В настоящее время я решаю эту проблему, сначала сделав запрос на список таблиц набора данных, а затем сравним с осколками, которые я на самом деле хочу запросить для существования и слияния таблиц (например, я хочу, чтобы все дни в августе, bigquery подсказывает мне что 7/27 не существует, поэтому мой блок FROM будет содержать список всех осколков данных EXCEPT 7/27), но этот метод сложный и включает в себя две поездки с большими запросами, поэтому он не кажется идеальным.

+1

Я не уверен, что понимаю, что вы имеете в виду, делая таблицы необязательными. –

+0

Я отредактировал вопрос с более подробной информацией, которая, надеюсь, очистит его! – OverclockedTim

ответ

0

Как обходной путь, вы пробовали иметь пустые столы?

Предположим, что main.2013-08-01 существует, а main.2013-08-02 - нет. Вы могли бы:

SELECT * FROM [main.2013-08-01] WHERE any_column = 'non existing value' 

Этот запрос возвращает 0 результатов, и вы можете выбрать main.2013-08-02 в таблице назначения. Это создаст пустую таблицу с теми же столбцами, что и main.2013-08-01. Тогда вы можете присоединиться, не заботясь о пустоте!

+0

Спасибо Fh, я подозреваю, что это будет работать как обходной путь, но только если я заранее знаю, какие таблицы отсутствуют. Чтобы найти, какие таблицы отсутствуют, мне нужно было бы сделать что-то вроде моего существующего списка таблиц таблицы данных со всеми возможными месячными днями, а затем добавить дополнительный шаг поверх этого, чтобы выполнить запрос, который вы предлагаете, после моего окончательного запроса которые я фактически использую для обработки данных. Таким образом, в этом конкретном случае этот метод на самом деле медленнее, чем обходной путь, который я использую в настоящее время. – OverclockedTim

Смежные вопросы