Funcionalidades de Transact-SQL suportadas no Azure Synapse SQL

O Azure Synapse SQL é um serviço analítico de big data que permite consultar e analisar seus dados usando a linguagem T-SQL. Você pode usar o dialeto padrão compatível com ANSI da linguagem SQL usada no SQL Server e no Banco de Dados SQL do Azure para análise de dados.

A linguagem Transact-SQL é usada no pool SQL sem servidor e o modelo dedicado pode fazer referência a objetos diferentes e tem algumas diferenças no conjunto de recursos suportados. Nesta página, você pode encontrar diferenças de linguagem Transact-SQL de alto nível entre modelos de consumo do Synapse SQL.

Objetos da base de dados

Os modelos de consumo no Synapse SQL permitem que você use diferentes objetos de banco de dados. A comparação dos tipos de objeto suportados é mostrada na tabela a seguir:

Object Dedicada Sem servidor
Tabelas Sim Não, as tabelas no banco de dados não são suportadas. O pool SQL sem servidor pode consultar apenas tabelas externas que fazem referência a dados armazenados no armazenamento do Azure Data Lake ou no Dataverse.
Vistas Sim. As exibições podem usar elementos de linguagem de consulta que estão disponíveis no modelo dedicado. Sim, você pode criar modos de exibição sobre tabelas externas, as consultas com a função OPENROWSET e outros modos de exibição. As exibições podem usar elementos de linguagem de consulta que estão disponíveis no modelo sem servidor.
Esquemas Sim Sim, esquemas são suportados. Use esquemas para isolar locatários diferentes e colocar suas tabelas por esquemas.
Tabelas temporárias Sim As tabelas temporárias podem ser usadas apenas para armazenar algumas informações das exibições do sistema, literais ou outras tabelas temporárias. UPDATE/DELETE na tabela temp também é suportado. Você pode unir tabelas temporárias com as exibições do sistema. Não é possível selecionar dados de uma tabela externa para inseri-los em uma tabela temporária ou unir uma tabela temporária a uma tabela externa - essas operações falharão porque dados externos e tabelas temporárias não podem ser misturados na mesma consulta.
Procedimentos definidos pelo utilizador Sim Sim, os procedimentos armazenados podem ser colocados em qualquer banco de dados de usuário (não master banco de dados). Os procedimentos podem apenas ler dados externos e usar elementos de linguagem de consulta que estão disponíveis no pool sem servidor.
Funções definidas pelo utilizador Sim Sim, apenas funções com valor de tabela embutido são suportadas. Não há suporte para funções escalares definidas pelo usuário.
Acionadores Não Não, pools SQL sem servidor não permitem alterar dados, portanto, os gatilhos não podem reagir a alterações de dados.
Tabelas externas Sim. Consulte os formatos de dados suportados. Sim, as tabelas externas estão disponíveis e podem ser usadas para ler dados do armazenamento do Azure Data Lake ou do Dataverse. Consulte os formatos de dados suportados.
Cache de consultas Sim, várias formas (cache baseado em SSD, na memória, cache de conjunto de resultados). Além disso, a Vista Materializada é suportada. Não, apenas as estatísticas do arquivo são armazenadas em cache.
Cache do conjunto de resultados Sim Não, os resultados da consulta não são armazenados em cache. Somente as estatísticas do arquivo são armazenadas em cache.
Visões materializadas Sim Não, as exibições Materializadas não são suportadas nos pools SQL sem servidor.
Variáveis da tabela Não, use tabelas temporárias Não, as variáveis de tabela não são suportadas.
Distribuição da tabela Sim Não, as distribuições de tabela não são suportadas.
Índices de tabela Sim Não, os índices não são suportados.
Criação de partições de tabela Sim. As tabelas externas não suportam particionamento. Você pode particionar arquivos usando a estrutura de pastas de partição Hive e criar tabelas particionadas no Spark. O particionamento do Spark será sincronizado com o pool sem servidor. Se você não estiver usando o Spark, poderá particionar seus arquivos na estrutura de pastas e criar exibições particionadas na estrutura de partições de pastas, mas as tabelas externas não poderão ser criadas em pastas particionadas.
Estatísticas Sim Sim, as estatísticas são criadas em ficheiros externos.
Gerenciamento de carga de trabalho, classes de recursos e controle de simultaneidade Sim, consulte Gerenciamento de carga de trabalho, classes de recursos e controle de simultaneidade. Não, não é possível gerenciar os recursos atribuídos às consultas. O pool SQL sem servidor gerencia automaticamente os recursos.
Controlo de custos Sim, usando ações de aumento e redução de escala. Sim, você pode limitar o uso diário, semanal ou mensal do pool sem servidor usando o portal do Azure ou o procedimento T-SQL.

Linguagem da consulta

As linguagens de consulta usadas no Synapse SQL podem ter diferentes recursos suportados, dependendo do modelo de consumo. A tabela a seguir descreve as diferenças de linguagem de consulta mais importantes nos dialetos Transact-SQL:

Declaração Dedicada Sem servidor
Declaração SELECT Sim. SELECTé suportada, mas algumas cláusulas de consulta Transact-SQL, como PARA XML/FOR JSON, MATCH, OFFSET/FETCH não são suportadas. Sim, a instrução é suportada, mas algumas cláusulas de consulta Transact-SQL, como FOR XML, MATCH, PREDICT,SELECTGROUPNG SETS e as dicas de consulta não são suportadas.
INSERIR instrução Sim Não Carregue novos dados para o Data Lake usando o Spark ou outras ferramentas. Use o Azure Cosmos DB com o armazenamento analítico para cargas de trabalho altamente transacionais. Pode utilizar o CETAS para criar uma tabela externa e inserir dados.
Declaração UPDATE Sim Não, atualize os dados do Parquet/CSV usando o Spark e as alterações estarão automaticamente disponíveis no pool sem servidor. Use o Azure Cosmos DB com o armazenamento analítico para cargas de trabalho altamente transacionais.
Instrução DELETE Sim Não, exclua os dados Parquet/CSV usando o Spark e as alterações estarão automaticamente disponíveis no pool sem servidor. Use o Azure Cosmos DB com o armazenamento analítico para cargas de trabalho altamente transacionais.
Declaração MERGE Sim (pré-visualização) Não, mescle dados Parquet/CSV usando o Spark e as alterações estarão automaticamente disponíveis no pool sem servidor.
Declaração CTAS Sim Não, a instrução CREATE TABLE AS SELECT não é suportada no pool SQL sem servidor.
Declaração CETAS Sim, você pode executar a carga inicial em uma tabela externa usando o CETAS. Sim, você pode executar a carga inicial em uma tabela externa usando o CETAS. O CETAS suporta os formatos de saída Parquet e CSV.
Transações Sim Sim, as transações são aplicáveis apenas nos objetos de metadados.
Etiquetas Sim Não, não há suporte para rótulos em pools SQL sem servidor.
Carga de dados Sim. O utilitário preferido é a instrução COPY , mas o sistema suporta carga BULK (BCP) e CETAS para carregamento de dados. Não, não é possível carregar dados no pool SQL sem servidor porque os dados são armazenados em armazenamento externo. Inicialmente, você pode carregar dados em uma tabela externa usando a instrução CETAS.
Exportação de dados Sim. Utilizando o CETAS. Sim. Você pode exportar dados do armazenamento externo (Azure Data Lake, Dataverse, Azure Cosmos DB) para o data lake do Azure usando o CETAS.
Tipos Sim, todos os tipos Transact-SQL, exceto cursor, hierarchyid, ntext, text e image, rowversion, Spatial Types, sql_variant e xml Sim, todos os tipos Transact-SQL são suportados, exceto cursor, hierarchyid, ntext, text e image, rowversion, Spatial Types, sql_variant, xml e Table type. Veja como mapear tipos de coluna do Parquet para tipos SQL aqui.
Consultas entre bancos de dados Não Sim, as consultas entre bancos de dados e as referências de nome de 3 partes são suportadas, incluindo a instrução USE . As consultas podem fazer referência aos bancos de dados SQL sem servidor ou aos bancos de dados Lake no mesmo espaço de trabalho. Não há suporte para consultas entre espaços de trabalho.
Funções integradas/do sistema (análise) Sim, todas as funções analíticas, de conversão, de data e hora, lógicas e matemáticas do Transact-SQL, exceto CHOOSE e PARSE Sim, todas as funções Transact-SQL Analytic, Conversion, Date and Time, Logical e Mathematical são suportadas.
Funções integradas/do sistema (string) Sim. Todas as funções Transact-SQL String, JSON e Collation, exceto STRING_ESCAPE e TRANSLATE Sim. Todas as funções Transact-SQL String, JSON e Collation são suportadas.
Funções integradas/do sistema (criptográficas) Algum HASHBYTES é a única função criptográfica suportada em pools SQL sem servidor.
Funções de valor de tabela incorporadas/do sistema Sim, funções do conjunto de linhas Transact-SQL, exceto OPENXML, OPENDATASOURCE, OPENQUERY e OPENROWSET Sim, todas as funções do conjunto de linhas Transact-SQL são suportadas, exceto OPENXML, OPENDATASOURCE e OPENQUERY.
Agregados incorporados/do sistema Agregações internas do Transact-SQL, exceto CHECKSUM_AGG e GROUPING_ID Sim, todas as agregações internas do Transact-SQL são suportadas.
Operadores Sim, todos os operadores Transact-SQL, exceto ! e !>< Sim, todos os operadores Transact-SQL são suportados.
Controlo do fluxo Sim. Todas as instruções Transact-SQL Control-of-flow, exceto CONTINUE, GOTO, RETURN, USE e WAITFOR Sim. Todas as instruções Transact-SQL Control-of-flow são suportadas. A consulta SELECT na WHILE (...) condição não é suportada.
Instruções DDL (CREATE, ALTER, DROP) Sim. Todas as instruções DDL Transact-SQL aplicáveis aos tipos de objeto suportados Sim, todas as instruções DDL Transact-SQL aplicáveis aos tipos de objeto suportados são suportadas.

Segurança

Os pools SQL do Synapse permitem que você use recursos de segurança internos para proteger seus dados e controlar o acesso. A tabela a seguir compara diferenças de alto nível entre os modelos de consumo Synapse SQL.

Funcionalidade Dedicada Sem servidor
Inícios de sessão N/D (apenas usuários contidos são suportados em bancos de dados) Sim, há suporte para logins do Microsoft Entra ID e SQL no nível do servidor.
Utilizadores N/D (apenas usuários contidos são suportados em bancos de dados) Sim, os usuários do banco de dados são suportados.
Utilizadores contidos Sim. Nota: apenas um usuário do Microsoft Entra pode ser administrador irrestrito Não, os usuários contidos não são suportados.
Autenticação de nome de usuário/senha SQL Sim Sim, os usuários podem acessar o pool SQL sem servidor usando seus nomes de usuário e senhas.
Autenticação do Microsoft Entra Sim, usuários do Microsoft Entra Sim, os logins e usuários do Microsoft Entra podem acessar pools SQL sem servidor usando suas identidades do Microsoft Entra.
Autenticação de passagem do Storage Microsoft Entra Sim Sim, a autenticação de passagem do Microsoft Entra é aplicável aos logins do Microsoft Entra. A identidade do usuário do Microsoft Entra é passada para o armazenamento se uma credencial não for especificada. A autenticação de passagem do Microsoft Entra não está disponível para os usuários do SQL.
Autenticação de token de assinatura de acesso compartilhado (SAS) de armazenamento Não Sim, usando DATABASE SCOPED CREDENTIAL com token de assinatura de acesso compartilhado em FONTE DE DADOS EXTERNA ou CREDENCIAL em nível de instância com assinatura de acesso compartilhado.
Autenticação da chave de acesso ao armazenamento Sim, usando DATABASE SCOPED CREDENTIAL em FONTE DE DADOS EXTERNA Não, use o token SAS em vez da chave de acesso de armazenamento.
Autenticação de identidade gerenciada de armazenamento Sim, usando a Credencial de Identidade de Serviço Gerenciado Sim, a consulta pode acessar o armazenamento usando a credencial de Identidade Gerenciada do espaço de trabalho.
Autenticação de identidade do aplicativo de armazenamento/SPN (entidade de serviço) Sim Sim, você pode criar uma credencial com um ID de aplicativo principal de serviço que será usado para autenticar no armazenamento.
Funções de servidor Não Sim, sysadmin, public e outras funções de servidor são suportadas.
CREDENCIAL DE NÍVEL DE SERVIDOR Não Sim, as credenciais de nível de OPENROWSET servidor são usadas pela função que não usa fonte de dados explícita.
Permissões - Nível do servidor Não Sim, por exemplo, CONNECT ANY DATABASE e SELECT ALL USER SECURABLES permitir que um usuário leia dados de qualquer banco de dados.
Funções do banco de dados Sim Sim, você pode usar db_ownere db_datareaderdb_ddladmin funções.
CREDENCIAL COM ESCOPO DE BANCO DE DADOS Sim, utilizado em fontes de dados externas. Sim, as credenciais com escopo de banco de dados podem ser usadas em fontes de dados externas para definir o método de autenticação de armazenamento.
Permissões - Nível de banco de dados Sim Sim, você pode conceder, negar ou revogar permissões nos objetos de banco de dados.
Permissões - Nível do esquema Sim, incluindo a capacidade de CONCEDER, NEGAR e REVOGAR permissões para usuários/logins no esquema Sim, você pode especificar permissões no nível do esquema, incluindo a capacidade de CONCEDER, NEGAR e REVOGAR permissões para usuários/logons no esquema.
Permissões - Nível do objeto Sim, incluindo a capacidade de CONCEDER, NEGAR e REVOGAR permissões aos usuários Sim, você pode conceder, NEGAR e REVOGAR permissões para usuários/logons nos objetos do sistema suportados.
Permissões - Segurança em nível de coluna Sim A segurança em nível de coluna é suportada em pools SQL sem servidor para exibições e não para tabelas externas. No caso de tabelas externas, pode-se criar uma visualização lógica em cima da tabela externa e aplicar segurança em nível de coluna.
Segurança ao nível da linha Sim Não, não há suporte interno para a segurança em nível de linha. Use modos de exibição personalizados como uma solução alternativa.
Máscara de dados Sim Não, o mascaramento de dados interno não é suportado nos pools SQL sem servidor. Use exibições SQL de wrapper que mascaram explicitamente algumas colunas como uma solução alternativa.
Funções de segurança e identidade incorporadas/do sistema Algumas funções e operadores de segurança Transact-SQL: CURRENT_USER, , , , IS_ROLEMEMBERSESSION_USERIS_MEMBER, , , USERHAS_DBACCESSSUSER_NAMESUSER_SNAMESYSTEM_USERUSER_NAMEEXECUTE ASOPEN/CLOSE MASTER KEY Há suporte para algumas funções e operadores de segurança Transact-SQL: CURRENT_USER, , , , HAS_PERMS_BY_NAMEIS_MEMBERIS_ROLEMEMBER, SESSION_CONTEXTSESSION_USERSUSER_NAMESUSER_SNAMEIS_SRVROLEMEMBERHAS_DBACCESSUSERUSER_NAMESYSTEM_USEREXECUTE ASe .REVERT As funções de segurança não podem ser usadas para consultar dados externos (armazenar o resultado na variável que pode ser usada na consulta).
Encriptação de Dados Transparente (TDE) Sim Não, a Encriptação de Dados Transparente não é suportada.
Deteção e Classificação de Dados Sim Não, a Descoberta de Dados e a Classificação não são suportadas.
Avaliação de Vulnerabilidades Sim Não, a Avaliação de Vulnerabilidade não está disponível.
Advanced Threat Protection Sim Não, a Proteção Avançada contra Ameaças não é suportada.
Auditoria Sim Sim, a auditoria é suportada em pools SQL sem servidor.
Regras da firewall Sim Sim, as regras de firewall podem ser definidas no ponto de extremidade SQL sem servidor.
Ponto final privado Sim Sim, o ponto de extremidade privado pode ser definido no pool SQL sem servidor.

O pool SQL dedicado e o pool SQL sem servidor usam a linguagem Transact-SQL padrão para consultar dados. Para obter diferenças detalhadas, consulte a referência da linguagem Transact-SQL.

Funcionalidades de plataforma

Funcionalidade Dedicada Sem servidor
Dimensionamento Sim O pool SQL sem servidor é dimensionado automaticamente dependendo da carga de trabalho.
Pausar/retomar Sim O pool SQL sem servidor é desativado automaticamente quando não é usado e ativado quando necessário. A ação do usuário não é necessária.
Cópias de segurança de bases de dados Sim Não Os dados são armazenados em sistemas externos (ADLS, Cosmos DB), portanto, certifique-se de que você está fazendo backups dos dados na origem. Certifique-se de usar metadados SQL de armazenamento (tabela, exibição, definições de procedimento e permissões de usuário) no controle de origem. As definições de tabela no banco de dados Lake são armazenadas nos metadados do Spark, portanto, certifique-se de que você também esteja mantendo as definições de tabela do Spark no controle do código-fonte.
Restauro de base de dados Sim Não Os dados são armazenados em sistemas externos (ADLS, Cosmos DB), então você precisa recuperar sistemas de origem para trazer seus dados. Verifique se os metadados SQL (tabela, exibição, definições de procedimento e permissões de usuário) estão no controle do código-fonte para que você possa recriar os objetos SQL. As definições de tabela no banco de dados Lake são armazenadas nos metadados do Spark, portanto, certifique-se de que você também esteja mantendo as definições de tabela do Spark no controle do código-fonte.

Ferramentas

Você pode usar várias ferramentas para se conectar ao Synapse SQL para consultar dados.

Ferramenta Dedicada Sem servidor
Estúdio Synapse Sim, scripts SQL Sim, scripts SQL podem ser usados no Synapse Studio. Use SSMS ou ADS em vez do Synapse Studio se você estiver retornando uma grande quantidade de dados como resultado.
Power BI Sim Sim, você pode usar o Power BI para criar relatórios no pool SQL sem servidor. O modo de importação é recomendado para relatórios.
Azure Analysis Service Sim Sim, você pode carregar dados no Azure Analysis Service usando o pool SQL sem servidor.
Azure Data Studio (ADS) Sim Sim, você pode usar o Azure Data Studio (versão 1.18.0 ou superior) para consultar um pool SQL sem servidor. Há suporte para scripts SQL e blocos de anotações SQL.
SQL Server Management Studio (SSMS) Sim Sim, você pode usar o SQL Server Management Studio (versão 18.5 ou superior) para consultar um pool SQL sem servidor. O SSMS mostra apenas os objetos que estão disponíveis nos pools SQL sem servidor.

Nota

Você pode usar o SSMS para se conectar ao pool SQL sem servidor e à consulta. É parcialmente suportado a partir da versão 18.5, você pode usá-lo para conectar e consultar somente.

A maioria dos aplicativos usa a linguagem Transact-SQL padrão pode consultar modelos de consumo dedicados e sem servidor do Synapse SQL.

Acesso a dados

Os dados analisados podem ser armazenados em vários tipos de armazenamento. A tabela a seguir lista todas as opções de armazenamento disponíveis:

Tipo de armazenamento Dedicada Sem servidor
Armazenamento interno Sim Não, os dados são colocados no Azure Data Lake ou no armazenamento analítico do Azure Cosmos DB.
Azure Data Lake v2 Sim Sim, você pode usar tabelas externas e a OPENROWSET função para ler dados do ADLS. Saiba aqui como configurar o controlo de acesso.
Armazenamento de Blobs do Azure Sim Sim, você pode usar tabelas externas e a OPENROWSET função para ler dados do Armazenamento de Blobs do Azure. Saiba aqui como configurar o controlo de acesso.
Azure SQL/SQL Server (remoto) Não Não, o pool SQL sem servidor não pode fazer referência ao banco de dados SQL do Azure. Você pode fazer referência a pools SQL sem servidor do SQL do Azure usando consultas elásticas ou servidores vinculados.
Dataverse Não, você pode carregar dados do Azure Cosmos DB em um pool dedicado usando o Azure Synapse Link no pool SQL sem servidor (via ADLS) ou no Spark. Sim, você pode ler tabelas do Dataverse usando o link do Azure Synapse para Dataverse com o Azure Data Lake.
Armazenamento transacional do Azure Cosmos DB Não Não, você não pode acessar contêineres do Azure Cosmos DB para atualizar dados ou ler dados do armazenamento transacional do Azure Cosmos DB. Use pools do Spark para atualizar o armazenamento transacional do Azure Cosmos DB .
Armazenamento analítico do Azure Cosmos DB Não, você pode carregar dados do Azure Cosmos DB em um pool dedicado usando o Azure Synapse Link no pool SQL sem servidor (via ADLS), ADF, Spark ou alguma outra ferramenta de carregamento. Sim, você pode consultar o armazenamento analítico do Azure Cosmos DB usando o Azure Synapse Link.
Tabelas do Apache Spark (no espaço de trabalho) Não Sim, o pool sem servidor pode ler tabelas PARQUET e CSV usando a sincronização de metadados.
Mesas Apache Spark (remoto) Não Não, o pool sem servidor pode acessar apenas as tabelas PARQUET e CSV criadas nos pools do Apache Spark no mesmo espaço de trabalho Synapse. No entanto, você pode criar manualmente uma tabela externa que faça referência ao local externo da tabela do Spark.
Tabelas Databricks (remoto) Não Não, o pool sem servidor pode acessar apenas as tabelas PARQUET e CSV criadas nos pools do Apache Spark no mesmo espaço de trabalho Synapse. No entanto, você pode criar manualmente uma tabela externa que faça referência ao local da tabela Databricks.

Formatos de dados

Os dados analisados podem ser armazenados em vários formatos de armazenamento. A tabela a seguir lista todos os formatos de dados disponíveis que podem ser analisados:

Formato dos dados Dedicada Sem servidor
Delimitado Sim Sim, você pode consultar arquivos delimitados.
CSV Sim (delimitadores de vários caracteres não suportados) Sim, você pode consultar arquivos CSV. Para um melhor desempenho, use PARSER_VERSION 2.0 que fornece uma análise mais rápida. Se você estiver anexando linhas aos seus arquivos CSV, certifique-se de consultar os arquivos como anexáveis.
Parquet Sim Sim, você pode consultar arquivos do Parquet, incluindo os arquivos com tipos aninhados.
Colmeia ORC Sim Não, os pools SQL sem servidor não podem ler o formato ORC do Hive.
Colmeia RC Sim Não, pools SQL sem servidor não podem ler o formato Hive RC.
JSON Sim Sim, você pode consultar arquivos JSON usando o formato de texto delimitado e as funções JSON T-SQL.
Avro Não Não, pools SQL sem servidor não podem ler o formato Avro.
Delta Lake Não Sim, você pode consultar arquivos delta lake, incluindo os arquivos com tipos aninhados.
Modelo de Dados Comum (MDL) Não Não, o pool SQL sem servidor não pode ler dados armazenados usando o Common Data Model.

Próximos passos

Informações adicionais sobre práticas recomendadas para pool SQL dedicado e pool SQL sem servidor podem ser encontradas nos seguintes artigos: