Понимание разницы между стандартным и устаревшим 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.
Статьи по теме, которые вам также могут понравиться