Поделиться через


Функции T-SQL, которые поддерживаются в Azure Synapse SQL

Azure Synapse SQL — это служба аналитики больших данных, которая позволяет выполнять запросы и анализ данных с помощью языка T-SQL. Вы можете использовать для анализа данных диалект SQL, соответствующий стандарту ANSI, который используется в SQL Server и Базе данных SQL Azure.

Язык Transact-SQL используется в бессерверном пуле SQL, а выделенная модель может ссылаться на разные объекты и имеет некоторые отличия в наборе поддерживаемых функций. На этой странице перечислены основные отличия языка Transact-SQL в разных моделях потребления Synapse SQL.

Объекты базы данных

Модели потребления в Synapse SQL позволяют использовать разные объекты базы данных. В следующей таблице представлено сравнение поддерживаемых типов объектов.

Object Выделенные Бессерверные приложения
Таблицы Да Нет, таблицы в базе данных не поддерживаются. Бессерверный пул SQL может запрашивать только внешние таблицы, которые ссылаются на данные, хранящиеся в Azure Data Lake Storage или Dataverse.
Представления Да. Представления могут использовать элементы языка запросов, доступные в выделенной модели. Да, можно создавать представления для внешних таблиц, запросы с функцией OPENROWSET и другие представления. Представления могут использовать элементы языка запросов, доступные в бессерверной модели.
Схемы Да Да, схемы поддерживаются. Используйте схемы для изоляции разных клиентов и размещения их таблиц на схемах.
Временные таблицы Да Временные таблицы могут использоваться только для хранения некоторых данных из системных представлений, литералов или других временных таблиц. Также поддерживается ОБНОВЛЕНИЕ и УДАЛЕНИЕ во временной таблице. К временным таблицам можно присоединить системные представления. Нельзя выбрать данные из внешней таблицы, чтобы вставить их во временную таблицу или соединить временную таблицу с внешней таблицей. Эти операции завершатся ошибкой, поскольку внешние данные и временные таблицы нельзя смешивать в одном запросе.
Определяемые пользователем процедуры Да Да, хранимые процедуры можно размещать в любых пользовательских базах данных (не в базе данных master). Процедуры могут просто считывать внешние данные и использовать элементы языка запросов, доступные в бессерверном пуле.
Определяемые пользователем функции Да Да. Поддерживаются только встроенные функции с табличным значением. Скалярные определяемые пользователем функции не поддерживаются.
Триггеры No Нет, бессерверные пулы SQL не допускают изменения данных, поэтому триггеры не могут реагировать на изменения данных.
Внешние таблицы Да. См. поддерживаемые форматы данных. Да, внешние таблицы доступны и могут использоваться для чтения данных из Azure Data Lake Storage или Dataverse. См. поддерживаемые форматы данных.
Кэширование запросов Да, несколько форм (кэширование на твердотельных накопителях, кэширование в памяти, кэширование ResultSet). Кроме того, поддерживаются материализованные представления. Нет, кэшируется только статистика файлов.
Кэширование результирующего набора Да Нет, результаты запроса не кэшируются. Кэшируется только статистика файлов.
Материализованные представления Да Нет, материализованные представления не поддерживаются в бессерверных пулах SQL.
Табличные переменные Нет, используйте временные таблицы Нет, табличные переменные не поддерживаются.
Распределение таблиц Да Нет, распределения таблиц не поддерживаются.
Индексы таблиц Да Нет, индексы не поддерживаются.
Секционирование таблиц в хранилище данных SQL Да. Внешние таблицы не поддерживают секционирование. Вы можете секционировать файлы, используя структуру папок Hive-partition, и создавать секционированные таблицы в Spark. Секционирование Spark будет синхронизировано с бессерверным пулом. Если вы не используете Spark, вы можете секционировать файлы в структуре папок и создавать секционированные представления в структуре секций папок, но внешние таблицы нельзя создавать в секционированных папках.
Статистика Да Да, статистика создается во внешних файлах.
Управление рабочими нагрузками, классы ресурсов и контроль параллелизма Да, см. Управление рабочими нагрузками, классы ресурсов и контроль параллелизма. Нет, управление ресурсами, назначенными запросам, невозможно. Бессерверный пул SQL автоматически управляет ресурсами.
Управление затратами Да, при использовании действий по вертикальному масштабированию. Да, вы можете ограничить ежедневное, еженедельное или ежемесячное использование бессерверного пула с помощью портала Azure или процедуры T-SQL.

Язык запросов

Языки запросов, используемые в Synapse SQL, могут поддерживать разный набор функций в зависимости от модели потребления. В следующей таблице приведены наиболее важные отличия в диалектах языка запросов для Transact-SQL:

Оператор Выделенные Бессерверные приложения
Инструкция SELECT Да. Инструкция SELECT поддерживается, но некоторые предложения запроса Transact-SQL, такие как FOR XML/FOR JSON, MATCH, OFFSET/FETCH, не поддерживаются. Да, инструкция SELECT поддерживается, но некоторые предложения запроса Transact-SQL, такие как FOR XML, MATCH, PREDICT, GROUPNG SETS и предложения запроса, не поддерживаются.
Инструкция INSERT Да № Отправка новых данных в Data Lake с помощью Spark или других средств. Используйте Azure Cosmos DB с аналитическим хранилищем для высоко транзакционных рабочих нагрузок. CETAS можно использовать для создания внешней таблицы и вставки данных.
Инструкция UPDATE Да Нет, обновите данные Parquet/CSV с помощью Spark, и изменения будут автоматически доступны в бессерверном пуле. Используйте Azure Cosmos DB с аналитическим хранилищем для высоко транзакционных рабочих нагрузок.
Инструкция DELETE Да Нет, удалите данные Parquet/CSV с помощью Spark, и изменения будут автоматически доступны в бессерверном пуле. Используйте Azure Cosmos DB с аналитическим хранилищем для высоко транзакционных рабочих нагрузок.
Инструкция MERGE Да (предварительная версия) Нет, объедините данные Parquet/CSV с помощью Spark, и изменения будут автоматически доступны в бессерверном пуле.
Инструкция CTAS Да Нет, инструкция CREATE TABLE AS SELECT не поддерживается в бессерверном пуле SQL.
Инструкция CETAS Да, можно выполнить начальную загрузку во внешнюю таблицу с помощью CETAS. Да, можно выполнить начальную загрузку во внешнюю таблицу с помощью CETAS. CETAS поддерживает форматы выходных данных Parquet и CSV.
Транзакции Да Да, транзакции применимы только к объектам метаданных.
Метки Да Нет, метки не поддерживаются в бессерверных пулах SQL.
Загрузка данных Да. Лучше всего использовать инструкцию COPY, но система поддерживает для загрузки данных как массовую загрузку (BCP), так и CETAS. Нет, вы не можете загружать данные в бессерверный пул SQL, поскольку данные хранятся во внешнем хранилище. Сначала вы можете загрузить данные во внешнюю таблицу с помощью инструкции CETAS.
Экспорт данных Да. Использование CETAS. Да. Вы можете экспортировать данные из внешнего хранилища (Azure Data Lake, Dataverse, Azure Cosmos DB) в озеро данных Azure с помощью CETAS.
Типы Да, все типы Transact-SQL, за исключением cursor, hierarchyid, ntext, text и image, rowversion, пространственных типов, sql_variant и xml Да, поддерживаются все типы Transact-SQL, за исключением cursor, hierarchyid, ntext, text и image, rowversion, пространственных типов, sql_variant, xml и табличного типа. Сведения о том, как сопоставлять типы столбцов Parquet с типами SQL см. здесь.
Запросы баз данных No Да, межбазовые запросы и ссылки на имена, состоящие из трех частей, включая инструкцию USE. Запросы могут ссылаться на бессерверные базы данных SQL или базы данных Lake в той же рабочей области. Запросы к нескольким рабочим областям не поддерживаются.
Встроенные или системные функции (анализ) Да, все функции аналитики, преобразования, даты и времени, логические и математические функции из Transact-SQL, кроме CHOOSE и PARSE. Да, поддерживаются все функции аналитики, преобразования, даты и времени, а также логические и математические функции, из Transact-SQL.
Встроенные или системные функции (строка) Да. Все функции Transact-SQL для работы со строками, JSON и параметрами сортировки, кроме STRING_ESCAPE и TRANSLATE. Да. Поддерживаются все функции Transact-SQL для работы со строками, JSON и параметрами сортировки.
Встроенные или системные функции (криптографические) Частично HASHBYTES является единственной поддерживаемой криптографической функцией в бессерверных пулах SQL.
Встроенные или системные функции с табличным значением Да, все функции наборов строк в Transact-SQL, кроме OPENXML, OPENDATASOURCE, OPENQUERY и OPENROWSET. Да, поддерживаются все функции наборов строк в Transact-SQL, кроме OPENXML, OPENDATASOURCE и OPENQUERY.
Встроенные или системные статистические функции Все встроенные статистические выражения Transact-SQL, за исключением CHECKSUM_AGG и GROUPING_ID. Да, поддерживаются все встроенные статистические функции Transact-SQL.
Операторы Да, все операторы Transact-SQL, кроме !> и !< Да, поддерживаются все операторы Transact-SQL.
Управление потоком Да. Все инструкции Transact-SQL для управления потоком, за исключением CONTINUE, GOTO, RETURN, USE и WAITFOR. Да. Поддерживаются все инструкции управления потоком Transact-SQL. Запрос SELECT в условии WHILE (...) не поддерживается.
Инструкции DDL (CREATE, ALTER, DROP) Да. Все инструкции DDL из Transact-SQL, применимые к поддерживаемым типам объектов. Да, поддерживаются все инструкции DDL из Transact-SQL, применимые к поддерживаемым типам объектов.

Безопасность

Пулы Synapse SQL позволяют использовать встроенные функции безопасности для защиты данных и управления доступом. В следующей таблице перечислены основные различия между моделями потребления в Synapse SQL.

Функция Выделенные Бессерверные приложения
Имена входа Недоступно (в базах данных поддерживаются только автономные пользователи). Да, поддерживаются идентификаторы Microsoft Entra на уровне сервера и имена входа SQL.
Пользователи Недоступно (в базах данных поддерживаются только автономные пользователи). Да, пользователи базы данных поддерживаются.
Автономные пользователи Да. Примечание. Только один пользователь Microsoft Entra может быть неограниченным администратором Нет, автономные пользователи не поддерживаются.
Аутентификация по имени пользователя и паролю в SQL Да Да, пользователи могут получить доступ к бессерверному пулу SQL, используя свои имена пользователей и пароли.
Проверка подлинности Microsoft Entra Да, пользователи Microsoft Entra Да, имена входа Microsoft Entra и пользователи могут получить доступ к бессерверным пулам SQL с помощью удостоверений Microsoft Entra.
Сквозная проверка подлинности Microsoft Entra Да Да, сквозная проверка подлинности Microsoft Entra применима к именам входа Microsoft Entra. Удостоверение пользователя Microsoft Entra передается в хранилище, если учетные данные не указаны. Сквозная проверка подлинности Microsoft Entra недоступна для пользователей SQL.
Проверка подлинности маркера подписанного URL-адреса хранилища (SAS) No Да, используя УЧЕТНЫЕ ДАННЫЕ ДЛЯ БАЗЫ ДАННЫХ с маркером подписанного URL-адреса во ВНЕШНЕМ ИСТОЧНИКЕ ДАННЫХ или УЧЕТНЫХ ДАННЫХ на уровне экземпляра с подписанным URL-адресом.
Проверка подлинности по ключу доступа к хранилищу Да, с использованием DATABASE SCOPED CREDENTIAL в EXTERNAL DATA SOURCE. Нет, используйте маркер SAS вместо ключа доступа к хранилищу.
Проверка подлинности по управляемому удостоверению для службы хранилища Да, с использованием управляемого удостоверения службы. Да, запрос может получить доступ к хранилищу с помощью учетных данных управляемого удостоверения рабочей области.
Проверка подлинности удостоверения приложения хранилища или субъекта-службы (SPN) Да Да, можно создать учетные данные с идентификатором приложения субъекта-службы, которые будут использоваться для проверки подлинности в хранилище.
Роли сервера No Да, поддерживаются роли sysadmin, public и другие серверные роли.
УЧЕТНЫЕ ДАННЫЕ УРОВНЯ СЕРВЕРА No Да, учетные данные уровня сервера используются OPENROWSET функцией, которая не использует явный источник данных.
Разрешения — на уровне сервера No Да, например, CONNECT ANY DATABASE и SELECT ALL USER SECURABLES позволяют пользователю считывать данные из любых баз данных.
роли базы данных Да Да, можно использовать роли db_owner, db_datareader и db_ddladmin.
DATABASE SCOPED CREDENTIAL Да, используется во внешних источниках данных. Да, учетные данные уровня базы данных можно использовать во внешних источниках данных для определения метода проверки подлинности хранилища.
Разрешения — на уровне базы данных Да Да, можно предоставлять, отклонять или отзывать разрешения для объектов базы данных.
Разрешения — на уровне схемы Да, включая применение операций GRANT, DENY и REVOKE к разрешениям пользователей и (или) имен входа для схемы. Да, вы можете указать разрешения на уровне схемы, включая применение операций GRANT, DENY и REVOKE к разрешениям пользователей и (или) имен входа для схемы.
Разрешения — на уровне объектов Да, включая применение операций GRANT, DENY и REVOKE к разрешениям пользователей. Да, вы можете применять операции GRANT, DENY и REVOKE к разрешениям пользователей и (или) имен входа для поддерживаемых системных объектов.
Разрешения — защита на уровне столбцов Да Безопасность на уровне столбцов поддерживается в бессерверных пулах SQL для представлений, а не для внешних таблиц. В случае внешних таблиц можно создать логическое представление поверх внешней таблицы и применить безопасность на уровне столбцов.
Безопасность на уровне строк Да Нет, встроенная поддержка безопасности на уровне строк отсутствует. Используйте пользовательские представления в качестве обходного решения.
Маскирование данных Да Нет, встроенное маскирование данных не поддерживается в бессерверных пулах SQL. В качестве обходного пути используйте представления SQL-оболочки, которые явно маскируют некоторые столбцы.
Встроенные или системные функции безопасности и идентификации Некоторые функции и операторы безопасности Transact-SQL: CURRENT_USER, HAS_DBACCESS, IS_MEMBER, IS_ROLEMEMBER, SESSION_USER, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS, OPEN/CLOSE MASTER KEY Поддерживаются некоторые функции и операторы безопасности Transact-SQL: CURRENT_USER, HAS_DBACCESS, HAS_PERMS_BY_NAME, IS_MEMBER, IS_ROLEMEMBER, IS_SRVROLEMEMBER, SESSION_USER, SESSION_CONTEXT, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS и REVERT. Функции безопасности нельзя использовать для запроса по внешним данным (сначала сохраните результат в переменной, чтобы использовать ее в запросе).
Прозрачное шифрование данных (TDE) Да Нет, прозрачное шифрование данных не поддерживается.
Обнаружение и классификация данных Да Нет, обнаружение и классификация данных не поддерживается.
Оценка уязвимостей Да Нет, оценка уязвимостей недоступна.
Расширенная защита от угроз Да Нет, расширенная защита от угроз не поддерживается.
Аудит Да Да, аудит поддерживается в бессерверных пулах SQL.
Правила брандмауэра Да Да, правила брандмауэра можно установить на конечной точке бессерверного SQL.
Частная конечная точка Да Да, частную конечную точку можно установить в бессерверном пуле SQL.

Выделенный и бессерверный пулы SQL используют для запрашивания данных стандартный язык Transact-SQL. Подробные сведения о различиях см. в справочнике по языку Transact-SQL.

Функции платформы

Функция Выделенные Бессерверные приложения
Масштабирование Да Бессерверный пул SQL автоматически масштабируется в зависимости от рабочей нагрузки.
Приостановка и возобновление Да Бессерверный пул SQL автоматически деактивируется, если он не используется и активируется при необходимости. Действие пользователя не требуется.
Резервные копии баз данных Да № Данные хранятся во внешних системах (ADLS, Cosmos DB), поэтому убедитесь, что вы выполняете резервное копирование данных в источнике. Убедитесь, что в системе управления версиями используются метаданные SQL (таблица, представление, определения процедур и разрешения пользователя). Определения таблиц в базе данных Lake хранятся в метаданных Spark, поэтому убедитесь, что определения таблиц Spark также хранятся в системе управления версиями.
Восстановление базы данных Да № Данные хранятся во внешних системах (ADLS, Cosmos DB), поэтому для переноса данных необходимо восстановить исходные системы. Убедитесь, что метаданные SQL (таблица, представление, определения процедур и разрешения пользователя) находится в системе управления версиями, чтобы можно было повторно создать объекты SQL. Определения таблиц в базе данных Lake хранятся в метаданных Spark, поэтому убедитесь, что определения таблиц Spark также хранятся в системе управления версиями.

Инструменты

Вы можете использовать разные средства, чтобы подключиться к Synapse SQL для запроса по данным.

Средство Выделенные Бессерверные приложения
Synapse Studio Да, скрипты SQL. Да, скрипты SQL можно использовать в Synapse Studio. Используйте SSMS или ADS вместо Synapse Studio, если в результате возвращается большой объем данных.
Power BI Да Да, вы можете использовать Power BI для создания отчетов на бессерверном пуле SQL. Для создания отчетов рекомендуется использовать режим импорта.
Служба Azure Analysis Services Да Да, вы можете загружать данные в Azure Analysis Service с помощью бессерверного пула SQL.
Azure Data Studio (ADS) Да Да, можно использовать Azure Data Studio (версия 1.18.0 или выше) для запросов к бессерверному пулу SQL. Поддерживаются скрипты SQL и записные книжки SQL.
SQL Server Management Studio (SSMS) Да Да, можно использовать SQL Server Management Studio (версия 18.5 или выше) для запросов к бессерверному пулу SQL. SSMS показывает только объекты, доступные в бессерверных пулах SQL.

Примечание.

С помощью SSMS можно подключиться и отправить запрос к бессерверному пулу SQL. Эти средства частично поддерживаются, начиная с версии 18.5, и используется только для подключения и выполнения запросов.

Большинство приложений используют стандартный язык Transact-SQL, который может выполнять запросы по выделенным и бессерверным моделям потребления в Synapse SQL.

Доступ к данным

Анализируемые данные могут храниться в разных типах хранилищ. Все доступные варианты хранилищ перечислены в следующей таблице.

Тип хранилища Выделенные Бессерверные приложения
Внутреннее хранилище Да Нет, данные помещаются в аналитическое хранилище Azure Data Lake или Azure Cosmos DB.
Azure Data Lake версии 2 Да Да, можно использовать внешние таблицы и функцию OPENROWSET для чтения данных из ADLS. Узнайте, как настроить управление доступом.
Хранилище BLOB-объектов Azure Да Да, можно использовать внешние таблицы и функцию OPENROWSET для чтения данных из хранилища BLOB-объектов Azure. Узнайте, как настроить управление доступом.
Azure SQL или SQL Server (удаленный) No Нет, бессерверный пул SQL не может ссылаться на базу данных SQL Azure. Вы можете ссылаться на бессерверные пулы SQL из Azure SQL, используя эластичные запросы или связанные серверы.
Dataverse Нет, данные Azure Cosmos DB можно загрузить в выделенный пул с помощью Azure Synapse Link в бессерверном пуле SQL (с помощью ADLS) или Spark. Да, таблицы Dataverse можно считывать с помощью Synapse Link для Dataverse с помощью Azure Data Lake.
Транзакционное хранилище Azure Cosmos DB No Нет, вы не можете получить доступ к контейнерам Azure Cosmos DB для обновления данных или чтения данных из хранилища транзакций Azure Cosmos DB. Используйте пулы Spark для обновления хранилища транзакций Azure Cosmos DB .
Аналитическое хранилище Azure Cosmos DB Нет, данные Azure Cosmos DB можно загрузить в выделенный пул с помощью Azure Synapse Link в бессерверном пуле SQL (с помощью ADLS), ADF, Spark или другого средства загрузки. Да, вы можете запросить аналитическое хранилище Azure Cosmos DB с помощью Azure Synapse Link.
Таблицы Apache Spark (в рабочей области) No Да, бессерверный пул может считывать таблицы PARQUET и CSV с помощью синхронизации метаданных.
Таблицы Apache Spark (удаленный репозиторий) No Нет, бессерверный пул может получить доступ только к таблицам PARQUET и CSV, созданным в пулах Apache Spark в той же рабочей области Synapse. Однако можно вручную создать внешнюю таблицу, ссылающуюся на расположение внешней таблицы Spark.
Таблицы Databricks (удаленный репозиторий) No Нет, бессерверный пул может получить доступ только к таблицам PARQUET и CSV, созданным в пулах Apache Spark в той же рабочей области Synapse. Однако можно вручную создать внешнюю таблицу, ссылающуюся на расположение таблицы Databricks.

Форматы данных

Анализируемые данные могут храниться в разных форматах. Все доступные для анализа варианты форматов перечислены в следующей таблице.

Формат данных Выделенные Бессерверные приложения
С разделителями Да Да, можно запрашивать файлы с разделителями.
CSV Да (многосимвольные разделители не поддерживаются). Да, можно запрашивать CSV-файлы. Для повышения производительности используйте PARSER_VERSION 2.0, который обеспечивает более быстрый анализ. При добавлении строк в CSV-файлы убедитесь, что вы запрашиваете файлы как добавляемые.
Parquet Да Да, можно запрашивать файлы Parquet, включая файлы с вложенными типами.
Hive ORC Да Нет, бессерверные пулы SQL не могут читать формат Hive ORC.
Hive RC Да Нет, бессерверные пулы SQL не могут читать формат Hive RC.
JSON Да Да, вы можете запрашивать JSON-файлы, используя текстовый формат с разделителями и функции T-SQL JSON.
Avro No Нет, бессерверные пулы SQL не могут читать формат Avro.
Delta Lake No Да, можно запрашивать файлы Delta Lake, включая файлы с вложенными типами.
Модель общих данных (CDM) No Нет, бессерверный пул SQL не может считывать данные, хранящиеся с использованием Common Data Model.

Следующие шаги

Рекомендации по работе с выделенным и бессерверным пулами SQL см. в следующих статьях: