Características de Transact-SQL compatibles en Azure Synapse SQL

Azure Synapse SQL es un servicio de análisis de macrodatos que permite consultar y analizar los datos mediante el lenguaje T-SQL. Puede usar el dialecto estándar compatible con ANSI del lenguaje SQL que se usa en SQL Server y Azure SQL Database para el análisis de datos.

El lenguaje Transact-SQL que se usa en el modelo de grupo de SQL sin servidor y dedicado puede hacer referencia a diferentes objetos y presenta algunas diferencias en cuando al conjunto de características admitidas. En esta página, puede encontrar diferencias de alto nivel en el lenguaje Transact-SQL entre los modelos de consumo de Synapse SQL.

Objetos de base de datos

Los modelos de consumo de Synapse SQL permiten usar diferentes objetos de base de datos. En la siguiente tabla se muestra una comparación de los distintos tipos de objetos admitidos:

Object Dedicado Sin servidor
Tablas No, no se admiten las tablas en la base de datos. El grupo de SQL sin servidor solo puede consultar tablas externas que hacen referencia a datos almacenados en Azure Data Lake Storage o Dataverse.
Vistas . Las vistas pueden utilizar elementos del lenguaje de consulta que están disponibles en el modelo dedicado. Sí,puede crear vistas sobre tablas externas, las consultas con la función OPENROWSET y otras vistas. Las vistas pueden utilizar elementos del lenguaje de consulta que están disponibles en el modelo sin servidor.
Esquemas Sí,se admiten esquemas. Use esquemas para aislar distintos inquilinos y colocar sus tablas por esquema.
Tablas temporales Las tablas temporales se pueden usar solo para almacenar alguna información de las vistas del sistema, literales u otras tablas temporales. También se admite UPDATE/DELETE en la tabla temporal. Puede unir tablas temporales con las vistas del sistema. No puede seleccionar datos de una tabla externa para insertarlos en una tabla temporal, ni unir una tabla temporal con una tabla externa; estas operaciones producirán un error, porque los datos externos y las tablas temporales no se pueden mezclar en la misma consulta.
Procedimientos definidos por el usuario Sí, los procedimientos almacenados se pueden colocar en cualquier base de datos de usuario (no en la base de datos master). Los procedimientos solo pueden leer datos externos y utilizar los elementos del lenguaje de consulta que están disponibles en el grupo sin servidor.
User defined functions (Funciones definidas por el usuario) Sí, solo se admiten funciones con valores de tabla insertada. No se admiten las funciones escalar definidas por el usuario.
Desencadenadores No No, los grupos de SQL sin servidor no permiten cambiar los datos, por lo que los desencadenadores no pueden reaccionar en los cambios de datos.
Tablas externas . Consulte los formatos de datos compatibles. Sí, las tablas externas están disponibles y se pueden usar para leer los datos de Azure Data Lake Storage o Dataverse. Consulte los formatos de datos compatibles.
Almacenamiento en caché de consultas Sí, varios formularios (almacenamiento en caché basado en SSD, en memoria, almacenamiento en caché de un conjunto de resultados). Además, se admite la vista materializada. No, solo se almacenan en caché las estadísticas de archivo.
Reglas de almacenamiento en caché No, los resultados de la consulta no se almacenan en caché. Solo se almacenan en caché las estadísticas de archivo.
Vistas materializadas No, las vistas materializadas no se admiten en los grupos de SQL sin servidor.
Variables de tabla No, se usan tablas temporales No, no se admiten las variables de tabla.
Distribución de tablas No, no se admiten las distribuciones de tabla.
Índices de tablas No, no se admiten los índices.
Partición de tabla . Las tablas externas no admiten la creación de particiones. Puede crear particiones de archivos mediante la estructura de carpetas de partición de Hive y crear tablas con particiones en Spark. La creación de particiones de Spark se sincronizará con el grupo sin servidor. Si no usa Spark, puede crear particiones de los archivos en la estructura de carpetas y crear vistas con particiones en la estructura de particiones de carpetas, pero no se pueden crear tablas externas en carpetas con particiones.
Estadísticas Sí, las estadísticas se crean en archivos externos.
Administración de cargas de trabajo con clases de recursos en Azure Synapse Analytics Sí, consulte administración de cargas de trabajo, clases de recursos y control de simultaneidad. No, no puede administrar los recursos asignados a las consultas. El grupo de SQL sin servidor administra automáticamente los recursos.
Control de costos Sí, usando las acciones de escalado vertical y reducción vertical. Sí, puede limitar el uso diario, semanal o mensual del grupo sin servidor mediante el procedimiento Azure Portal o T-SQL.

Lenguaje de consulta

Los lenguajes de consulta que se usan en Synapse SQL pueden tener diferentes características admitidas según el modelo de consumo. En la tabla siguiente se describen las diferencias más importantes del lenguaje de consulta en los dialectos de Transact-SQL:

. Dedicado Sin servidor
Instrucción SELECT Sí. SELECTLa instrucción se admite, pero no se admiten algunas cláusulas de consulta de Transact-SQL, por ejemplo, FOR XML/FOR JSON, MATCH u OFFSET/FETCH. Sí, se admite la instrucción SELECT, pero no se admiten algunas cláusulas de consulta de Transact-SQL, por ejemplo, FOR XML, MATCH, PREDICT o GROUPNG SETS ni las sugerencias de consulta.
Instrucción INSERT No. Cargue nuevos datos en el lago de datos utilizando Spark u otras herramientas. Use Azure Cosmos DB con el almacenamiento analítico para cargas de trabajo altamente transaccionales. Puede utilizar CETAS para crear una tabla externa e insertar datos.
Instrucción UPDATE No, actualice los datos de Parquet/CSV mediante Spark, y los cambios estarán disponibles automáticamente en el grupo sin servidor. Use Azure Cosmos DB con el almacenamiento analítico para cargas de trabajo altamente transaccionales.
Instrucción DELETE No, elimine los datos de Parquet/CSV mediante Spark, y los cambios estarán disponibles automáticamente en el grupo sin servidor. Use Azure Cosmos DB con el almacenamiento analítico para cargas de trabajo altamente transaccionales.
Instrucción MERGE Sí (versión preliminar) No, combine los datos de Parquet/CSV mediante Spark, y los cambios estarán disponibles automáticamente en el grupo sin servidor.
Instrucción CTAS No, no se admite la instrucción CREATE TABLE AS SELECT en el grupo de SQL sin servidor.
Instrucción CETAS Sí, puede realizar la carga inicial en una tabla externa mediante CETAS. Sí, puede realizar la carga inicial en una tabla externa mediante CETAS. CETAS admite los formatos de salida de Parquet y CSV.
Transacciones Sí, las transacciones solo se aplican a los objetos de metadatos.
Etiquetas No, no se admiten las etiquetas en grupos de SQL sin servidor.
Carga de datos Sí. La utilidad preferida es la instrucción COPY, pero el sistema admite tanto la carga masiva (BCP) como el uso de CETAS para la carga de datos. No, no puede cargar datos en el grupo de SQL sin servidor, porque los datos se almacenan en almacenamiento externo. Inicialmente puede cargar datos en una tabla externa mediante la instrucción CETAS.
Exportación de datos Sí. Usar CETAS. Sí. Puede exportar datos desde un almacenamiento externo (Azure Data Lake, Dataverse, Azure Cosmos DB) a Azure Data Lake mediante CETAS.
Tipos Sí, todos los tipos de Transact-SQL excepto cursor, hierarchyid, ntext, text, e image, rowversion, tipos espaciales, sql_variant y xml Sí, se admiten todos los tipos de Transact-SQL excepto cursor, hierarchyid, ntext, text, e image, rowversion, Spatial Types, sql_variant, xml y Table type. Vea cómo asignar tipos de columna Parquet a tipos SQL aquí.
Consultas entre bases de datos No Sí, se admiten consultas entre base de datos y referencias de nombre de tres partes, incluida la instrucción USE. Las consultas pueden hacer referencia a las bases de datos SQL sin servidor o a las bases de datos de Lake en el mismo área de trabajo. No se admiten consultas entre áreas de trabajo.
Funciones del sistema/integradas (análisis) Sí, todas las funciones analíticas, de conversión, de fecha y hora, lógicas y matemáticas de Transact-SQL, excepto CHOOSE, IIF y PARSE Sí, se admiten todas las funciones analíticas, de conversión, de fecha y hora, lógicas y matemáticas de Transact-SQL.
Funciones del sistema/integradas (cadena) Sí. Todas las funciones de cadena, JSON e intercalación de Transact-SQL, excepto STRING_ESCAPE y TRANSLATE Sí. Se admiten todas las funciones de cadena, JSON y de intercalación de Transact-SQL.
Funciones del sistema/integradas (criptográficas) Algunos HASHBYTES es la única función criptográfica admitida en grupos de SQL sin servidor.
Funciones tabla-valor del sistema/integradas Sí, las funciones de conjunto de filas de Transact-SQL, excepto OPENXML, OPENDATASOURCE, OPENQUERY y OPENROWSET Sí, se admiten todas las funciones de conjunto de filas de Transact-SQL, excepto OPENXML, OPENDATASOURCE y OPENQUERY.
Agregados del sistema/integrados Agregados integrados de Transact-SQL, excepto CHECKSUM_AGG y GROUPING_ID Sí, se admiten todos los agregados integrados de Transact-SQL.
Operadores Sí, todos los operadores de Transact-SQL excepto !> y !< Sí, se admiten todos los operadores de Transact-SQL.
Control de flujo Sí. Todas las instrucciones del lenguaje de control de flujo de Transact-SQL, excepto CONTINUE, GOTO, RETURN, USE y WAITFOR Sí. Se admiten todos las instrucciones de controles de flujo de Transact-SQL. No se admite la consulta SELECT WHILE (...) en condición.
Instrucciones de DDL (CREATE, ALTER, DROP) Sí. Todas las instrucciones de DDL de Transact-SQL aplicables a los tipos de objeto admitidos Sí, se admiten todas las instrucciones de DDL de Transact-SQL aplicables a los tipos de objeto admitidos.

Seguridad

Los grupos de Synapse SQL permiten usar características de seguridad integradas para proteger los datos y controlar el acceso. En la siguiente tabla se comparan las diferencias de alto nivel que hay entre los modelos de consumo de Synapse SQL.

Característica Dedicado Sin servidor
Inicios de sesión N/D (en las bases de datos solo se admiten los usuarios contenidos) Sí, se admiten los inicios de sesión de Microsoft Entra ID y SQL a nivel de servidor.
Usuarios N/D (en las bases de datos solo se admiten los usuarios contenidos) Sí, se admiten usuarios de base de datos.
Usuarios contenidos Sí. Nota: No puede haber más de un usuario de Microsoft Entra que sea administrador sin restricciones No, no se admiten los usuarios contenidos.
Autenticación de nombre de usuario y contraseña de SQL Sí, los usuarios pueden acceder a grupos de SQL sin servidor mediante sus nombres de usuario y contraseñas.
Autenticación de Microsoft Entra Sí, usuarios de Microsoft Entra. Sí, los inicios de sesión y usuarios de Microsoft Entra pueden acceder a grupos de SQL sin servidor mediante sus identidades de Microsoft Entra.
Autenticación de paso a través de Microsoft Entra de Storage Sí, la autenticación de paso a través de Microsoft Entra es aplicable a los inicios de sesión de Microsoft Entra. La identidad del usuario de Microsoft Entra se pasa al almacenamiento si no se especifica una credencial. La autenticación de paso a través de Microsoft Entra no está disponible para los usuarios de SQL.
Autenticación con tokens de firma de acceso compartido (SAS) de almacenamiento No Sí, mediante DATABASE SCOPED CREDENTIAL con token de firma de acceso compartido en EXTERNAL DATA SOURCE o CREDENTIAL de nivel de instancia con firma de acceso compartido.
Autenticación mediante clave de acceso de almacenamiento Si, mediante DATABASE SCOPED CREDENTIAL en EXTERNAL DATA SOURCE No, utilice el token de SAS en lugar de la clave de acceso de almacenamiento.
Autenticación mediante identidad administrada de almacenamiento Sí, mediante la credencial de la identidad de servicio administrado Sí, la consulta puede tener acceso al almacenamiento mediante la credencial de identidad administrada del área de trabajo.
Identidad de aplicación de almacenamiento/autenticación de entidad de servicio (SPN) Sí, puede crear una credencial con un identificador de aplicación de entidad de servicio que se usará para autenticarse en el almacenamiento.
Roles del servidor No Sí, se admiten sysadmin, públicos y otros roles de servidor.
CREDENCIAL DE NIVEL DE SERVIDOR No Sí, las credenciales de nivel de servidor las usa la función OPENROWSET que no usa el origen de datos explícito.
Permisos: nivel de servidor No Sí, por ejemplo, CONNECT ANY DATABASE y SELECT ALL USER SECURABLES permiten que un usuario lea datos de cualquier base de datos.
Roles de base de datos Sí, puede usar los roles db_owner, db_datareader y db_ddladmin.
DATABASE SCOPED CREDENTIAL Sí, se usa en orígenes de datos externos. Sí, las credenciales con ámbito de base de datos se pueden usar en orígenes de datos externos para definir el método de autenticación de almacenamiento.
Permisos: nivel de base de datos Sí, puede conceder, denegar o revocar permisos en los objetos de la base de datos.
Permisos: nivel de esquema Sí, lo que incluye la capacidad para conceder, denegar y revocar permisos a los usuarios o inicios de sesión en el esquema mediante GRANT, DENY y REVOKE Sí, puede especificar permisos de nivel de esquema, incluida la capacidad de conceder, denegar y revocar permisos a los usuarios o inicios de sesión en el esquema mediante GRANT, DENY y REVOKE.
Permisos: nivel de objeto Sí, lo que incluye la capacidad para conceder, denegar y revocar permisos a los usuarios mediante GRANT, DENY y REVOKE Sí, puede conceder, denegar y revocar permisos a los usuarios o inicios de sesión en los objetos del sistema que se admiten mediante GRANT, DENY y REVOKE.
Permisos: seguridad de nivel de columna Los grupos de SQL sin servidor admiten la seguridad de nivel de columna para las vistas y no para las tablas externas. En el caso de las tablas externas, se puede crear una vista lógica sobre la tabla externa y que aplicar seguridad de nivel de columna.
Seguridad de nivel de fila No, no hay compatibilidad integrada con la seguridad de nivel de fila. Use vistas personalizadas como solución alternativa.
Enmascaramiento de datos No, el enmascaramiento de datos integrado no se admite en los grupos de SQL sin servidor. Use vistas de SQL de contenedor que enmascaran explícitamente algunas columnas como solución alternativa.
Funciones de identidad y seguridad del sistema/integradas Algunos operadores y funciones de seguridad de 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 Se admiten algunos operadores y funciones de seguridad de 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 y REVERT. Las funciones de seguridad no se pueden usar para consultar datos externos (almacenamiento del resultado en una variable que se puede usar en la consulta).
Cifrado de datos transparente (TDE) No, no se admite el cifrado de datos transparente.
Clasificación y detección de datos: No, no se admite la clasificación y detección de datos.
Evaluación de vulnerabilidad No, no está disponible la evaluación de vulnerabilidades.
Advanced Threat Protection No, no se admite Advanced Threat Protection.
Auditoría Sí, la auditoría se admite en grupos de SQL sin servidor.
Reglas de firewall Sí, las reglas de firewall se pueden establecer en el punto de conexión SQL sin servidor.
Punto de conexión privado Sí, el punto de conexión privado se puede establecer en el grupo de SQL sin servidor.

Tanto el grupo de SQL dedicado como el grupo de SQL sin servidor usan el lenguaje Transact-SQL estándar para realizar consultas en los datos. Para ver las diferencias al detalle, consulte la referencia del lenguaje Transact-SQL.

Características de la plataforma

Característica Dedicado Sin servidor
Ampliación El grupo de SQL sin servidor se escala automáticamente en función de la carga de trabajo.
Pausar o reanudar El grupo de SQL sin servidor se desactiva automáticamente cuando no se usa y se activa cuando es necesario. No es necesario que el usuario realice ninguna acción.
Copias de seguridad de bases de datos No. Los datos se almacenan en sistemas externos (ADLS o Cosmos DB), por lo que debe asegurarse de realizar copias de seguridad de los datos en el origen. Asegúrese de usar el almacén de metadatos de SQL (tabla, vista, definiciones de procedimientos y permisos de usuario) en el control de código fuente. Las definiciones de tabla de la base de datos de Lake se almacenan en metadatos de Spark, por lo que debe asegurarse de que también mantiene las definiciones de tabla de Spark en el control de código fuente.
Restauración de base de datos No. Los datos se almacenan en sistemas externos (ADLS o Cosmos DB), por lo que debe recuperar los sistemas de origen para traer los datos. Asegúrese de que los metadatos de SQL (tabla, vista, definiciones de procedimientos y permisos de usuario) están en el control de código fuente para poder volver a crear los objetos SQL. Las definiciones de tabla de la base de datos de Lake se almacenan en metadatos de Spark, por lo que debe asegurarse de que también mantiene las definiciones de tabla de Spark en el control de código fuente.

Herramientas

Puede usar varias herramientas para conectarse a Synapse SQL para consultar datos.

Herramienta Dedicado Sin servidor
Synapse Studio Sí, scripts de SQL Sí, los scripts SQL se pueden usar en Synapse Studio. Utilice SSMS ADS en lugar de Synapse Studio si va a devolver una gran cantidad de datos como resultado.
Power BI Sí, puede usar Power BI crear informes en un grupo de SQL sin servidor. Se recomienda el modo de importación para los informes.
Azure Analysis Service Sí, puede cargar datos en Azure Analysis Service mediante el grupo de SQL sin servidor.
Azure Data Studio (ADS) Sí, puede usar Azure Data Studio (versión 1.18.0 o posterior) para consultar un grupo de SQL sin servidor. Se admiten scripts de SQL y cuadernos de SQL.
SQL Server Management Studio (SSMS) Sí, puede usar SQL Server Management Studio (versión 18.5 o posterior) para consultar un grupo de SQL sin servidor. SSMS solo muestra los objetos que están disponibles en los grupos de SQL sin servidor.

Nota

Puede usar SSMS para conectarse al grupo de SQL sin servidor y realizar consultas. Es parcialmente compatible a partir de la versión 18.5, que solo se puede usar para establecer conexión y realizar consultas.

La mayoría de las aplicaciones que usan el lenguaje Transact-SQL estándar pueden consultar modelos de consumo dedicados y sin servidor de Synapse SQL.

Acceso a datos

Los datos que se analizan se pueden guardar en varios tipos de almacenamiento. En la siguiente tabla se enumeran todas las opciones de almacenamiento disponibles:

Tipo de almacenamiento Dedicado Sin servidor
Almacenamiento interno No, los datos se colocan en Azure Data Lake o en el almacenamiento analítico de Azure Cosmos DB.
Azure Data Lake v2 Sí, puede usar tablas externas y la función OPENROWSET para leer datos de ADLS. Obtenga información aquí sobre cómo configurar el control de acceso.
Azure Blob Storage Sí, puede usar tablas externas y la función OPENROWSET para leer datos de Azure Blob Storage. Obtenga información aquí sobre cómo configurar el control de acceso.
Azure SQL/SQL Server (remoto) No No, el grupo de SQL sin servidor no puede hacer referencia a la base de datos de Azure SQL. Puede hacer referencia a grupos de SQL sin servidor desde Azure SQL mediante consultas elásticas o servidores vinculados.
Dataverse No, puede cargar datos de Azure Cosmos DB en un grupo dedicado mediante Azure Synapse Link en un grupo de SQL sin servidor (a través de ADLS) o Spark. Sí, puede leer tablas de Dataverse mediante Azure Synapse Link para Dataverse con Azure Data Lake.
Almacenamiento transaccional de Azure Cosmos DB No No, no puede acceder a los contenedores de Azure Cosmos DB para actualizar los datos ni leer datos del almacenamiento transaccional de Azure Cosmos DB. Use grupos de Spark para actualizar el almacenamiento transaccional de Azure Cosmos DB.
Almacenamiento analítico de Azure Cosmos DB No, puede cargar datos de Azure Cosmos DB en un grupo dedicado mediante Azure Synapse Link en un grupo de SQL sin servidor (a través de ADLS), ADF, Spark u otra herramienta de carga. Sí, puede consultar el almacenamiento analítico de Azure Cosmos DB mediante Azure Synapse Link.
Tablas de Apache Spark (en el área de trabajo) No Sí, el grupo sin servidores puede leer tablas de PARQUET y CSV mediante el uso de la sincronización de metadatos.
Tablas de Apache Spark (remoto) No No, el grupo sin servidor solo puede acceder a las tablas PARQUET y CSV que se crean en los grupos de Spark de Apache en el mismo área de trabajo de Synapse. Sin embargo, puede crear manualmente una tabla externa que haga referencia a la ubicación externa de la tabla de Spark.
Tablas de Databricks (remoto) No No, el grupo sin servidor solo puede acceder a las tablas PARQUET y CSV que se crean en los grupos de Spark de Apache en el mismo área de trabajo de Synapse. Sin embargo, puede crear manualmente una tabla externa que haga referencia a la ubicación de la tabla de Databricks.

Formatos de datos

Los datos que se analizan se pueden guardar en varios formatos de almacenamiento. En la tabla siguiente se enumeran todos los formatos de datos disponibles que se pueden analizar:

Formato de datos Dedicado Sin servidor
Delimitado Sí, puede consultar archivos delimitados.
CSV Sí (no se admiten delimitadores con varios caracteres) Sí, puede consultar archivos CSV. Para mejorar el rendimiento, use PARSER_VERSION 2.0 que proporciona un análisis más rápido. Si va a anexar filas a los archivos CSV, asegúrese de consultar los archivos como anexables.
Parquet Sí, puede consultar archivos Parquet, incluidos los archivos con tipos anidados.
Hive ORC No, los grupos de SQL sin servidor no pueden leer el formato ORC de Hive.
Hive RC No, los grupos de SQL sin servidor no pueden leer el formato RC de Hive.
JSON Sí, puede consultar archivos JSON mediante el formato de texto delimitado y las funciones JSON de T-SQL.
Avro No No, los grupos de SQL sin servidor no pueden leer el formato Avro.
Delta Lake No Sí, puede consultar archivos Delta Lake, incluidos los archivos con tipos anidados.
Common Data Model (CDM) No No, el grupo de SQL sin servidor no puede leer los datos almacenados mediante Common Data Model.

Pasos siguientes

En los siguientes artículos encontrará más información sobre los procedimientos recomendados para el grupo de SQL dedicado y el grupo de SQL sin servidor: