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


функции Transact-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 Dedicated Serverless
Tables Yes Нет, таблицы в базе данных не поддерживаются. Бессерверный пул SQL может запрашивать только внешние таблицы , ссылающиеся на данные, хранящиеся в хранилище Azure Data Lake или Dataverse.
Views Yes. Представления могут использовать элементы языка запросов , доступные в выделенной модели. Да, можно создавать представления по внешним таблицам, запросы с помощью функции OPENROWSET и других представлений. Представления могут использовать элементы языка запросов , доступные в бессерверной модели.
Schemas Yes Да, поддерживаются схемы. Используйте схемы для изоляции различных арендаторов и размещения их таблиц по схемам.
Временные таблицы Yes Временные таблицы могут использоваться только для хранения некоторых сведений из системных представлений, литералов или других временных таблиц. Операции UPDATE/DELETE во временной таблице также поддерживаются. Вы можете присоединить временные таблицы к системным представлениям. Невозможно выбрать данные из внешней таблицы, чтобы вставить ее во временную таблицу или присоединить временную таблицу с внешней таблицей. Эти операции завершаются ошибкой, так как внешние данные и временные таблицы не могут быть смешанными в одном запросе.
Определяемые пользователем процедуры Yes Да, хранимые процедуры можно размещать в любых пользовательских базах данных (но не в master базе данных). Процедуры могут просто считывать внешние данные и использовать элементы языка запросов , доступные в бессерверном пуле.
Определяемые пользователем функции Yes Да, поддерживаются только встроенные табличные функции. Скалярные пользовательские функции не поддерживаются.
Triggers No Нет, бессерверные пулы SQL не позволяют изменять данные, поэтому триггеры не могут реагировать на изменения данных.
внешние таблицы Yes. См. поддерживаемые форматы данных. Да, внешние таблицы доступны и могут использоваться для чтения данных из хранилища Azure Data Lake или Dataverse. См. поддерживаемые форматы данных.
Кэширование запросов Да, несколько форм (кэширование на основе SSD, в памяти, кэширование результатов). Кроме того, поддерживаются материализованные представления. Нет, кэшируются только статистические данные файлов.
Кэширование результирующих наборов Yes Нет, результаты запроса не кэшируются. Кэшируются только статистические данные файлов.
материализованные представления Yes Нет, материализованные представления не поддерживаются в бессерверных пулах SQL.
Табличные переменные Нет, используйте временные таблицы Нет, табличные переменные не поддерживаются.
Распределение таблиц Yes Нет, дистрибутивы таблиц не поддерживаются.
Индексы таблиц Yes Нет, индексы не поддерживаются.
Секционирование таблиц Yes. Внешние таблицы не поддерживают секционирование. Файлы можно секционировать с помощью структуры папок Hive-partition и создания секционированных таблиц в Spark. Секционирование Spark будет синхронизировано с бессерверным пулом. Если вы не используете Spark, вы можете секционировать файлы в структуре папок и создавать секционированные представления в структуре секционирования папок, но внешние таблицы нельзя создать в секционированных папках.
Statistics Yes Да, статистика создается во внешних файлах.
Управление рабочей нагрузкой, классы ресурсов и управление параллелизмом Да, см. управление рабочей нагрузкой, классы ресурсов и управление параллелизмом. Нет, вы не можете управлять ресурсами, назначенными запросам. Бессерверный пул SQL автоматически управляет ресурсами.
Управление затратами Да, с использованием действий масштабирования вверх и вниз. Да, вы можете ограничить ежедневное, еженедельное или ежемесячное использование бессерверного пула с помощью портала Azure или процедуры T-SQL.

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

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

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

Security

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

Feature Dedicated Serverless
Logins N/A (в базах данных поддерживаются только встроенные пользователи) Да, поддерживаются идентификаторы Microsoft Entra на уровне сервера и имена входа SQL.
Users N/A (в базах данных поддерживаются только пользователи, ограниченные определенными условиями) Да, поддерживаются пользователи базы данных.
Ограниченные пользователи Yes. Примечание. Только один пользователь Microsoft Entra может быть неограниченным администратором Нет, включенные пользователи не поддерживаются.
Проверка подлинности имени пользователя и пароля SQL Yes Да, пользователи могут получить доступ к бессерверному пулу SQL с помощью своих имен пользователей и паролей.
Проверка подлинности Microsoft Entra Да, пользователи Microsoft Entra Да, логины и пользователи Microsoft Entra могут получить доступ к бессерверным пулам SQL с помощью удостоверений Microsoft Entra.
Сквозная проверка подлинности Microsoft Entra Yes Да, сквозная проверка подлинности Microsoft Entra применима к входам в систему Microsoft Entra. Идентификатор пользователя Microsoft Entra передается в хранилище, если учетные данные не указаны. Сквозная аутентификация Microsoft Entra недоступна для пользователей SQL.
Проверка подлинности маркера подписанного URL-адреса хранилища (SAS) No Да, использование DATABASE SCOPED CREDENTIAL с маркером общей подписи доступа в EXTERNAL DATA SOURCE или учетными данными уровня экземпляра с общей подписью доступа.
Проверка подлинности ключа доступа к хранилищу Да, использование УЧЕТНЫХ ДАННЫХ, ОГРАНИЧЕННЫХ ОБЛАСТЬЮ БАЗЫ ДАННЫХ В ВНЕШНЕМ ИСТОЧНИКЕ ДАННЫХ Нет, используйте маркер SAS вместо ключа доступа к хранилищу.
Аутентификация управляемого удостоверения для хранилища Да, с использованием учетных данных с управляемой идентичностью службы Да, запрос может получить доступ к хранилищу с помощью учетных данных управляемого удостоверения рабочей области.
Аутентификация идентификатора приложения хранилища/основного объекта службы (SPN) Yes Да, можно создать учетные данные с ID приложения сервисного принципала, который будет использоваться для аутентификации в хранилище.
Роли сервера No Да, поддерживаются роли sysadmin, public и другие серверные роли.
УЧЕТНЫЕ ДАННЫЕ УРОВНЯ СЕРВЕРА No Да, учетные данные уровня сервера используются OPENROWSET функцией, которая не использует явный источник данных.
Разрешения — уровень сервера No Да, например, CONNECT ANY DATABASE и SELECT ALL USER SECURABLES разрешить пользователю считывать данные из любых баз данных.
роли базы данных Yes Да, можно использовать db_ownerdb_datareader и db_ddladmin роли.
УЧЕТНЫЕ ДАННЫЕ В ОБЛАСТИ БАЗЫ ДАННЫХ Да, используется во внешних источниках данных. Да, учетные данные в области базы данных можно использовать во внешних источниках данных для определения метода проверки подлинности хранилища.
Разрешения — уровень базы данных Yes Да, вы можете предоставить, запретить или отозвать разрешения на объекты базы данных.
Разрешения — уровень схемы Да, включая возможность предоставления (GRANT), отказа (DENY) и отзыва (REVOKE) разрешений для пользователей и учетных записей на схеме. Да, вы можете указать разрешения на уровне схемы, включая возможность GRANT, DENY и REVOKE разрешений для пользователей или имен входа в схеме.
Разрешения — уровень объекта Да, включая возможность предоставлять, отказывать и отзывать разрешения для пользователей. Да, разрешения GRANT, DENY и REVOKE для пользователей и имен входа можно использовать в поддерживаемых системных объектах.
Разрешения — безопасность на уровне столбца Yes Безопасность на уровне столбцов поддерживается в бессерверных пулах SQL для представлений, а не для внешних таблиц. В случае внешних таблиц можно создать логическое представление поверх внешней таблицы, а затем применить безопасность на уровне столбцов.
Безопасность на уровне строк Yes Нет, встроенная поддержка безопасности на уровне строк отсутствует. Используйте пользовательские представления в качестве обходного решения.
Маскирование данных Yes Нет, встроенная маскировка данных не поддерживается в бессерверных пулах SQL. Используйте представления SQL-оболочки, которые явно маскируют некоторые столбцы в качестве обходного решения.
Встроенные или системные функции безопасности и идентификации Некоторые Transact-SQL функции безопасности и операторы: CURRENT_USER, HAS_DBACCESSIS_MEMBERIS_ROLEMEMBERSESSION_USERSUSER_NAMESUSER_SNAMESYSTEM_USERUSERUSER_NAMEEXECUTE ASOPEN/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) Yes Нет, прозрачное шифрование данных не поддерживается.
Обнаружение данных и классификация Yes Нет, обнаружение и классификация данных не поддерживается.
Оценка уязвимостей Yes Нет, оценка уязвимостей недоступна.
Расширенная защита от угроз Yes Нет, Расширенная защита от угроз не поддерживается.
Auditing Yes Да, аудит поддерживается в бессерверных пулах SQL.
Правила брандмауэра Yes Да, правила брандмауэра можно задать на бессерверной конечной точке SQL.
Частная конечная точка Yes Да, частная конечная точка может быть задана в бессерверном пуле SQL.

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

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

Feature Dedicated Serverless
Scaling Yes Бессерверный пул SQL автоматически масштабируется в зависимости от рабочей нагрузки.
Pause/resume Yes Бессерверный пул SQL автоматически деактивируется, если он не используется и активируется при необходимости. Действие пользователя не требуется.
Резервные копии баз данных Yes No. Данные хранятся во внешних системах (ADLS, Cosmos DB), поэтому убедитесь, что вы выполняете резервное копирование данных в источнике. Убедитесь, что метаданные SQL (таблицы, представления, определения процедур и разрешения пользователей) сохраняются в системе управления версиями. Определения таблиц в базе данных Lake хранятся в метаданных Spark, поэтому убедитесь, что вы также храните определения таблиц Spark в системе контроля версий.
Восстановление базы данных Yes No. Данные хранятся во внешних системах (ADLS, Cosmos DB), поэтому для переноса данных необходимо восстановить исходные системы. Убедитесь, что метаданные SQL (таблица, представление, определения процедур и разрешения пользователя) находится в системе управления версиями, чтобы можно было повторно создать объекты SQL. Определения таблиц в базе данных Lake хранятся в метаданных Spark, поэтому убедитесь, что определения таблиц Spark также хранятся в системе управления версиями.

Tools

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

Tool Dedicated Serverless
Synapse Studio Да, скрипты SQL Да, скрипты SQL можно использовать в Synapse Studio. Используйте SSMS или Visual Studio Code вместо Synapse Studio, если вы возвращаете большой объем данных в результате.
Power BI Yes Да, Power BI можно использовать для создания отчетов по бессерверному пулу SQL. Для создания отчетов рекомендуется использовать режим импорта.
Служба Анализа Azure Yes Да, данные можно загрузить в службе Azure Analysis Service с помощью бессерверного пула SQL.
SQL Server Management Studio (SSMS) Yes Да, вы можете использовать SQL Server Management Studio для запроса бессерверного пула SQL. SSMS отображает только объекты, доступные в бессерверных пулах SQL.
расширение MSSQL для Visual Studio Code Yes Да, Visual Studio Code можно использовать для выполнения запросов к бессерверному пулу SQL. Поддерживаются скрипты SQL и записные книжки SQL. Visual Studio Code отображает только объекты, доступные в бессерверных пулах SQL.

Note

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

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

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

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

Тип хранилища Dedicated Serverless
Внутреннее хранилище Yes Нет, данные помещаются в аналитическое хранилище Azure Data Lake или Azure Cosmos DB.
Azure Data Lake версии 2 Yes Да, можно использовать внешние таблицы и OPENROWSET функцию для чтения данных из ADLS. Узнайте, как настроить управление доступом.
Хранилище BLOB-объектов Azure Yes Да, можно использовать внешние таблицы и OPENROWSET функцию для чтения данных из хранилища BLOB-объектов Azure. Узнайте, как настроить управление доступом.
Azure SQL/SQL Server (удаленный) No Нет, бессерверный пул SQL не может ссылаться на базу данных SQL Azure. Вы можете ссылаться на бессерверные пулы SQL из SQL Azure с помощью эластичных запросов или связанных серверов.
Dataverse Нет, данные Azure Cosmos DB можно загрузить в выделенный пул с помощью Azure Synapse Link в бессерверном пуле SQL (с помощью ADLS) или Spark. Да, вы можете читать таблицы Dataverse, используя функциональность Azure 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.

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

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

Формат данных Dedicated Serverless
Delimited Yes Да, можно запросить файлы с разделителями.
CSV Да (многозначные разделители не поддерживаются) Да, можно запросить CSV-файлы. Для повышения производительности используется PARSER_VERSION 2.0, что обеспечивает более быстрый анализ. Если вы добавляете строки в CSV-файлы, убедитесь, что вы запрашиваете файлы как добавляемые.
Parquet Yes Да, можно запрашивать файлы Parquet, включая файлы с вложенными типами.
Улья ORC Yes Нет, бессерверные пулы SQL не могут читать формат Hive ORC.
Hive RC Yes Нет, бессерверные пулы SQL не могут читать формат RC Hive.
JSON Yes Да, вы можете запросить JSON-файлы с помощью текстового формата с разделителями и функций T-SQL JSON .
Avro No Нет, бессерверные пулы SQL не могут читать формат Avro.
Delta Lake No Да, можно запрашивать файлы Delta Lake, включая файлы с вложенными типами.
Общая модель данных (CDM) No Нет, бессерверный пул SQL не может считывать данные, хранящиеся с помощью общей модели данных.

Дальнейшие шаги

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