Сокращение (ограничение) разделов в разделенных таблицах больших запросов - PullRequest
0 голосов
/ 25 января 2019

У меня есть секционированная таблица, созданная в BigQuery следующим образом:

 CREATE TABLE IF NOT EXISTS `{{ my_project }}.{{ my_dataset }}.my_table`
(
dt TIMESTAMP
, other_fields
)
PARTITION BY DATE(dt)
OPTIONS(
partition_expiration_days=180
)
  • Разделена на: DAY
  • Поле разделения: dt (тип: TIMESTAMP)

Как видите, поле разбиения - TIMESTAMP, но я хочу разделить на DAY, а не TIMESTAMP.Так каков правильный способ сокращения разделов?Могу ли я преобразовать поле разделения в DATE, как в подходе 1, или мне нужно идти в подходе 2?

  • Подход 1:

SELECT COUNT(*) FROM `my_project.my_dataset.my_table` WHERE CAST(dt AS DATE) = "2019-01-01"

  • Подход 2:

SELECT COUNT(*) FROM `my_project.my_dataset.my_table` WHERE dt >= "2019-01-01 00:00:00" AND dt < "2019-01-02 00:00:00"

1 Ответ

0 голосов
/ 25 января 2019

Подход 1 не будет работать, поскольку BigQuery SQL не поддерживает тип данных DATE в функции CAST ()

Подход 2 должен работать, однако вы также можете использовать функцию FORMAT_DATE (), чтобы удалить TIMSTAMP ЧЧ: ММ: СС, а затем просто передать свою последовательность «ГГГГ / ММ / ДД».

Другой вариант, если ваша таблица структурирована с суффиксом таблицы, - это использовать _TABLE_SUFFIX

WHERE _TABLE_SUFFIX >= '2019-01-01'
AND _TABLE_SUFFIX <= '2019-01-15'

Надеюсь, вам пригодится один из этих вариантов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...