Понимание разницы между стандартным и устаревшим SQL в контексте Google Cloud BigQuery

BigQuery — это управляемая служба хранилища данных на платформе Google Cloud, которая позволяет организациям сохранять свои данные, а аналитикам — получать к ним доступ и извлекать ценную информацию.

Когда я начал работать с BigQuery, я столкнулся с двумя терминами, которые тогда были мне не очень понятны, а именно Стандартный и Устаревший SQL. По сути, это два диалекта, которые поддерживаются BigQuery и имеют разный синтаксис, семантику и функции.

Устаревший и стандартный SQL

В прошлом BigQuery выполнял запросы с использованием нестандартного диалекта SQL, который назывался BigQuery SQL. Однако после выпуска BigQuery 2.0 служба теперь поддерживает стандартный SQL, в то время как предыдущий BigQuery SQL был переименован в устаревший SQL.

Стандартный SQL — это язык запросов, совместимый с ANSI. Важно отметить, что в настоящее время предпочтительным диалектом для выполнения запросов в BigQuery является стандартный SQL.

Устаревший SQL по-прежнему поддерживается в основном для целей обратной совместимости, поэтому рекомендуется перейти на стандартный SQL, поскольку мы ожидаем, что в какой-то момент в будущем устаревший SQL станет устаревшим. Такие функции, как язык определения данных (DDL) и язык модели данных (DML), поддерживаются только стандартным SQL.

Основные отличия

Каждый тип в устаревшем SQL имеет эквивалент в стандартном SQL (и наоборот), что означает, что тип в устаревшем SQL имеет другое имя на стандартном диалекте. Для точного сопоставления между стандартным и устаревшим диалектами вы можете обратиться к официальной документации.

Кроме того, стандартный диалект имеет меньший диапазон допустимых значений типа TIMESTAMP по сравнению с устаревшим SQL. Первый принимает только значения в диапазоне между 0001-01-01 00:00:00.000000 и 9999-12-31 23:59:59.999999.

Способ экранирования символов, таких как дефисы, в запросах также различается между стандартным и устаревшим диалектами. В первом случае мы используем обратные кавычки (`), а во втором — квадратные скобки ([]).

Кроме того, устаревший SQL использует двоеточие : в качестве разделителя при ссылке на имя проекта, в то время как стандартный диалект требует точки .

#standardSQL
SELECT *
FROM `bigquery-public-data.samples.shakespeare`;
#legacySQL
SELECT * 
FROM `bigquery-public-data:samples.shakespeare`;

Стоит также отметить, что стандартный диалект не поддерживает декораторы таблиц и некоторые другие функции подстановочных знаков.

Преимущества стандартного SQL

Как уже упоминалось, стандартный SQL имеет несколько преимуществ по сравнению с диалектом Legacy SQL. В частности, он поддерживает

  • WITH пунктов
  • Пользовательские функции SQL
  • Подзапросы в предложениях SELECT и WHERE
  • Вставляет, обновляет и удаляет
  • Дополнительные типы данных, такие как ARRAY и STRUCT
  • Более точное предложение COUND(DISTINCT ..) (по сравнению с EXACT_COUNT_DISTINCT устаревшего диалекта SQL, который раньше имел много существенных ограничений)
  • Коррелированные подзапросы
  • и более сложные JOIN предикаты

Практические примеры этой функциональности стандартного диалекта SQL вы можете найти в официальной документации BigQuery.

Изменение диалекта по умолчанию

Диалектом по умолчанию в BigQuery является стандартный SQL. Однако это можно изменить, включив префикс как часть ваших SQL-запросов. Если вы хотите переключиться на Legacy SQL, вам нужно включить префикс #legacySQL перед тем, как указать запрос. Соответствующий префикс для стандартного SQL — #standardSQL.

Обратите внимание, что эти префиксы должны предшествовать запросу, они нечувствительны к регистру, и ожидается, что между запросом и самим префиксом будет присутствовать символ новой строки.

В качестве примера рассмотрим следующий запрос, использующий устаревший диалект SQL:

#legacySQL
SELECT
  weight_pounds, 
  state, 
  year, 
  gestation_weeks
FROM
  [bigquery-public-data:samples.natality]
ORDER BY
  weight_pounds DESC
LIMIT
  10;

Последние мысли

BigQuery определенно является одним из самых популярных облачных сервисов на Google Cloud Platform, поскольку практически каждой современной организации требуется управляемый сервис хранилища данных.

Поэтому очень важно использовать большинство доступных функций, которые помогут вам решать проблемы эффективно и масштабно.

В сегодняшней статье мы обсудили один из самых фундаментальных аспектов BigQuery — диалект SQL, используемый для выполнения операций службы. Обратите внимание, что мы рассмотрели лишь небольшую часть общих различий между устаревшими и стандартными диалектами SQL.

Если вы все еще используете Legacy SQL, я лично настоятельно рекомендую перейти на стандартный диалект SQL, так как это рекомендуемый Google диалект, который также предлагает более мощные функции. Полный список отличий смотрите в Официальном руководстве «Миграция на стандартный SQL

Стать участником и читать все истории на Medium. Ваш членский взнос напрямую поддерживает меня и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.



Статьи по теме, которые вам также могут понравиться