#sql #google-bigquery
#sql #google-bigquery
Вопрос:
У меня есть таблица в наборе данных со следующей схемой:
date TIMESTAMP
id INTEGER
...
Таблица секционируется по столбцу даты.
Предварительный просмотр таблицы в пользовательском интерфейсе BQ показывает, что в феврале в ней много строк:
date, id, ...
2019-02-19 16:18:00 UTC, 534480012, ...
2019-02-19 16:23:00 UTC, 534423879, ...
Однако этот запрос возвращает нулевые результаты:
SELECT id FROM `<project>.<dataset>.<table>`
WHERE
TIMESTAMP_SUB(date, INTERVAL 60*24 HOUR) <= `date` AND
TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`
(И да, на момент написания этой статьи должны отображаться февральские строки.)
Более того, даже запрос «по умолчанию» возвращает нулевые результаты:
SELECT id FROM `<project>.<dataset>.<table>` WHERE date = TIMESTAMP("2019-02-19") LIMIT 1000
Ошибок нет ни в том, ни в другом случае. Просто пустые результаты. Что я делаю не так?
Ответ №1:
Как это вообще может быть правдой?
TIMESTAMP_SUB(date, INTERVAL 24 HOUR) >= `date`
Если вычесть 24 часа, то это будет меньше, чем date
, а не больше, чем date
.
Что касается вашего второго запроса, у вас просто нет временных меток, которые были бы точно в полночь. Предположительно, вы намереваетесь сделать что-то вроде:
WHERE DATE(date) = DATE('2019-02-19')
Я настоятельно рекомендую вам изменить имя столбца. Называть столбец после ключевого слова SQL — плохая идея. Называть что-либо «датой», когда это действительно временная метка, вводит в заблуждение.