Используйте разделы, Люк! Простой и проверенный способ оптимизации ваших SQL-запросов.

Максимально эффективно использовать разделы, Люк! Простой и надежный способ оптимизации ваших SQL-запросов.

Если вы когда-либо писали SQL-запрос, который выполнялся очень долго, то эту статью для вас

Baby Yoda loves partitions. Do you? Image by Victor Serban on Unsplash

Data Scientists обожают SQL, но, боже мой, мы ужасно плохи в написании эффективных запросов (может быть потому, что мы потратили слишком много времени на споры о том, произносится “S-Q-L” или “сиквел”).

В этой статье я покажу вам, как использовать разделы SQL, чтобы оптимизировать ваши запросы и написать код, который быстрее и дешевле выполняется. Если вы освоили основы SQL и хотите начать использовать высокоуровневые навыки Data Science, это будет отличным дополнением к вашему арсеналу.

Что такое разделенная таблица?

Разделенная таблица – это таблица, разделенная на сегменты/разделы (кто бы мог подумать?).

В разделенной таблице каждый сегмент хранится в разных местах на сервере. Это отличается от обычной (неразделенной) SQL-таблицы, где вся таблица находится в одном месте.

Вот сравнение с использованием фиктивных данных о ежедневных продажах трех моих любимых книг:

Изображение автора

И неразделенная таблица, и разделенная таблица содержат те же данные; единственное отличие заключается в том, что разделенная таблица делит данные на разные сегменты. Это по-прежнему одна таблица (то есть это не трое отдельных таблиц); просто данные хранятся по-другому.

Почему нам это важно? Ну, как мы скоро увидим, мы можем использовать эту структуру для написания более эффективных SQL-запросов.

Создание разделенных таблиц

Создание разделенной таблицы – это проще простого.

Например, если мы используем следующий код для создания обычной (неразделенной) таблицы…

CREATE TABLE `myproject.mydataset.unpartitioned` (  date DATE,   book_name STRING,  total_sales INT64);INSERT INTO `myproject.mydataset.unpartitioned`VALUES  ('2023-12-01', 'Shoe Dog', 154),  ('2023-12-01', 'Born to Run', 90),  ('2023-12-02', 'Running with the…