Compartilhar via


Recursos do Transact-SQL compatíveis com o Azure Synapse SQL

O Azure Synapse SQL é um serviço analítico de Big Data que permite consultar e analisar dados usando a linguagem T-SQL. Use o dialeto padrão em conformidade com ANSI da linguagem SQL usado no SQL Server e no Banco de Dados SQL do Azure para análise de dados.

A linguagem Transact-SQL é usada no pool de SQL sem servidor e o modelo dedicado pode referenciar objetos distintos e tem algumas diferenças no conjunto de recursos compatíveis. Nesta página, você poderá encontrar diferenças de alto nível da linguagem Transact-SQL entre os modelos de consumo do Synapse SQL.

Objetos de banco de dados

Os modelos de consumo do Synapse SQL permitem que você use objetos de banco de dados diferentes. A comparação dos tipos de objeto compatíveis é mostrada na seguinte tabela:

Objeto Dedicado Sem servidor
Tabelas Sim Não, não há suporte para as tabelas no banco de dados. O pool de SQL sem servidor pode consultar somente tabelas externas que fazem referência a dados armazenados no Azure Data Lake Storage ou no Dataverse.
Exibições Sim. As exibições podem usar elementos da linguagem de consulta que estão disponíveis no modelo dedicado. Sim, você pode criar exibições em tabelas externas, as consultas com a função OPENROWSET e outras exibições. As exibições podem usar elementos de linguagem de consulta que estão disponíveis no modelo sem servidor.
Esquemas Sim Sim, há suporte para esquemas. Use esquemas para isolar diferentes locatários e posicionar as tabelas por esquemas.
Tabelas temporárias Sim As tabelas temporárias podem ser usadas apenas para armazenar algumas informações de exibições, literais ou outras tabelas temporárias do sistema. Também há suporte para atualização e exclusão na tabela temporária. Você pode unir tabelas temporárias com as exibições do sistema. Você não pode selecionar dados de uma tabela externa para inseri-los na tabela temporária ou unir uma tabela temporária com uma tabela externa. Essas operações falham porque os dados externos e as tabelas temporárias não podem ser misturados na mesma consulta.
Procedimentos definidos pelo usuário Sim Sim, os procedimentos armazenados podem ser colocados em qualquer banco de dados de usuário (e não em masterDatabase). Os procedimentos podem apenas ler dados externos e usar os elementos de linguagem de consulta que estão disponíveis no pool sem servidor.
Funções definidas pelo usuário Sim Sim, só há suporte para funções com valor de tabela embutidas. Não há suporte para as funções escalares definidas pelo usuário.
Gatilhos Não Não, os pools de SQL sem servidor não permitem a alteração de dados, portanto, os gatilhos não podem reagir a alterações de dados.
Tabelas externas Sim. Confira os formatos de dados compatíveis. Sim, as tabelas externas estão disponíveis e podem ser usadas para ler dados do Azure Data Lake Storage ou do Dataverse. Consulte os formatos de dados com suportes.
Consultas de cache Sim, vários formatos (cache baseado em SSD, em memória, cache do conjunto de resultados). Além disso, há suporte para exibição materializada. Não, somente as estatísticas de arquivo são armazenadas em cache.
Cache de conjunto de resultados Sim Não, os resultados da consulta não são armazenados em cache. Somente as estatísticas de arquivo são armazenadas em cache.
Exibições materializadas Sim Não, as exibições materializadas não são compatíveis com os pools de SQL sem servidor.
Variáveis de tabela Não, use tabelas temporárias Não, as variáveis de tabela alinhadas não têm suporte.
Distribuição de tabelas Sim Não, não há suporte para essas distribuições de tabela.
Índices da tabela Sim Não, não há suporte para índices.
Partições de tabela Sim. As tabelas externas não suportam particionamento. Você pode particionar arquivos usando a estrutura de pastas da partição do 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 os arquivos na estrutura de pastas e criar exibições particionadas na estrutura de partição de pasta, mas as tabelas externas não poderão ser criadas em pastas particionadas.
Estatísticas Sim Sim, as estatísticas são criadas em arquivos 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, você não pode gerenciar os recursos atribuídos às consultas. O pool de SQL sem servidor gerencia automaticamente os recursos.
Controle de custo Sim, usando ações de escala e redução verticais. Sim, você pode limitar o uso diário, semanal ou mensal do pool sem servidor usando o portal do Azure ou o procedimento do T-SQL.

Idioma de consulta

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

de Dedicado Sem servidor
Instrução SELECT Sim. Há suporte para a instrução SELECT, mas não para algumas cláusulas de consulta, como FOR XML/FOR JSON, MATCH e OFFSET/FETCH. Sim, há suporte para a instrução SELECT, mas não para algumas cláusulas de consulta Transact-SQL, como FOR XML, MATCH, PREDICT, GROUPNG SETS e dicas de consulta.
Instrução INSERT Sim Não. Carregue novos dados no Data Lake usando o Spark ou outras ferramentas. Use o Azure Cosmos DB com o armazenamento analítico para cargas de trabalho altamente transacionais. Você pode usar CETAS para criar uma tabela externa e inserir dados.
Instrução UPDATE Sim Não, atualize os dados Parquet/CSV usando o Spark e as alterações serão disponibilizadas automaticamente 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 serão disponibilizadas automaticamente no pool sem servidor. Use o Azure Cosmos DB com o armazenamento analítico para cargas de trabalho altamente transacionais.
Instrução MERGE Sim (versão prévia) Não, mescle os dados Parquet/CSV usando o Spark e as alterações serão disponibilizadas automaticamente no pool sem servidor.
Instrução CTAS Sim Não há suporte para a instrução CREATE TABLE AS SELECT no pool de SQL sem servidor.
Instrução CETAS Sim, você pode executar o carregamento inicial em uma tabela externa usando o CETAS. Sim, você pode executar o carregamento inicial em uma tabela externa usando o CETAS. O CETAS dá suporte a formatos de saída Parquet e CSV.
Transações Sim Sim, as transações são aplicáveis somente aos objetos de metadados.
Rótulos Sim Não, não há suporte para rótulos nos pools de SQL sem servidor.
Carregamento de dados Sim. O utilitário preferencial é a instrução COPY, mas o sistema dá suporte ao carregamento BULK (BCP) e à instrução CETAS para o carregamento de dados. Não, você não pode carregar dados no pool de SQL sem servidor porque os dados são armazenados no armazenamento externo. Inicialmente, você pode carregar dados em uma tabela externa usando a instrução CETAS.
Exportação de dados Sim. Usando a instrução CETAS. Sim. Você pode exportar dados do armazenamento externo (Azure Data Lake, Dataverse e Azure Cosmos DB) para o Azure Data Lake usando o CETAS.
Types Sim, todos os tipos Transact-SQL, exceto cursor, hierarchyid, ntext, texto e imagem, rowversion, Tipos Espaciais, sql_variant, e xml Sim, há suporte para todos os tipos de Transact-SQL, exceto os tipos cursor, hierarchyid, ntext, texto e imagem, rowversion, tipos espaciais, sql_variant, xml e tabela. Confira como mapear tipos de coluna Parquet para SQL tipos aqui.
Consultas entre bancos de dados Não Sim, há suporte para consultas entre bancos de dados e referências de nome de três partes, 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 workspace. Não há suporte para consultas entre workspaces.
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 por CHOOSE e PARSE Sim, há suporte para todas as funções analíticas, de conversão, de data e hora, lógicas e matemáticas do Transact-SQL.
Funções integradas/do sistema(cadeia de caracteres) Sim. Todas as funções Transact-SQL de cadeia de caracteres, JSON e de ordenação, exceto STRING_ESCAPE e TRANSLATE Sim. Há suporte para todas as funções de cadeia de caracteres, JSON e agrupamento do Transact-SQL.
Funções integradas/do sistema (criptografia) Alguns HASHBYTES é a única função criptográfica com suporte nos pools de SQL sem servidor.
Funções de valor de tabela integradas/do sistema Sim, as funções de conjunto de linhas do Transact-SQL, exceto OPENXML, OPENDATASOURCE, OPENQUERY e OPENROWSET Sim, há suporte para todas as funções de conjunto de linhas Transact-SQL, exceto OPENXML, OPENDATASOURCE e OPENQUERY.
Agregações integradas/do sistema Agregações internas do Transact-SQL, exceto CHECKSUM_AGG e GROUPING_ID Sim, há suporte para todas as agregações Transact-SQL internas.
Operadores Sim, todos os operadores Transact-SQL, exceto !> e !< Sim, há suporte para todos os operadores Transact-SQL.
Controle do fluxo Sim. Todas as instruções Transact-SQL de controle de fluxo, exceto CONTINUE, GOTO, RETURN, USE e WAITFOR Sim. Há suporte para todas as instruções de controle de fluxo Transact-SQL. Não há suporte para a consulta SELECT na condição WHILE (...).
Instruções DDL (CREATE, ALTER e DROP) Sim. Todas as instruções DDL Transact-SQL aplicáveis aos tipos de objeto compatíveis Sim, há suporte para todas as instruções DDL Transact-SQL aplicáveis aos tipos de objeto com suporte.

Segurança

Os pools de 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 as diferenças de alto nível entre os modelos de consumo do Synapse SQL.

Recurso Dedicado Sem servidor
Logons N/D (há suporte apenas a usuários independentes em bancos de dados) Sim, há suporte para logons da ID do Microsoft Entra e SQL no nível do servidor.
Usuários N/D (há suporte apenas a usuários independentes em bancos de dados) Sim, há suporte para usuários de banco de dados.
Usuários independentes Sim. Observação: apenas um usuário do Microsoft Entra pode ser um administrador irrestrito Não. Não há suporte para os usuários independentes.
Autenticação de nome de usuário/senha do SQL Sim Sim, os usuários podem acessar o pool de SQL sem servidor usando nomes de usuário e senhas.
autenticação do Microsoft Entra Sim, usuários do Microsoft Entra Sim, logons e usuários do Microsoft Entra podem acessar pools de SQL sem servidor usando suas identidades do Microsoft Entra.
Autenticação de passagem de Armazenamento do Microsoft Entra Sim Sim, a Autenticação de passagem do Microsoft Entra é aplicável aos logons do Microsoft Entra. A identidade do usuário do Microsoft Entra será 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 SAS (assinatura de acesso compartilhado) do armazenamento No Sim, usando a credencial no escopo do banco de dados com o token de assinatura de acesso compartilhado na fonte de dados externa ou a credencial no nível da instância com assinatura de acesso compartilhado.
Autenticação da chave de acesso de armazenamento Sim, usando DATABASE SCOPED CREDENTIAL em EXTERNAL DATA SOURCE Não, use o token SAS em vez da chave de acesso de armazenamento.
Autenticação da Identidade Gerenciada de armazenamento Sim, usando a credencial da identidade de serviço gerenciado Sim, a consulta pode acessar o armazenamento usando a credencial de identidade gerenciada do workspace.
Autenticação de identidade do aplicativo de armazenamento/SPN (entidade de serviço) Sim Sim, você pode criar uma credencial com uma ID de aplicativo da entidade de serviço que será usada para autenticação no armazenamento.
Funções de servidor No Sim, há suporte para as funções sysadmin, públicas e outras de servidor.
CREDENCIAL NO NÍVEL DO SERVIDOR Não Sim, as credenciais no nível do servidor são usadas pela função OPENROWSET que não usa a fonte de dados explícita.
Permissão – nível do servidor Não Sim, por exemplo, CONNECT ANY DATABASE e permitem SELECT ALL USER SECURABLES que um usuário leia dados de qualquer banco de dados.
Funções de banco de dados Sim Sim, você pode usar as funções db_owner, db_datareader e db_ddladmin.
DATABASE SCOPED CREDENTIAL Sim, usado em fontes de dados externas. Sim, as credenciais no escopo do banco de dados podem ser usadas em fontes externas para definir o método de autenticação de armazenamento.
Permissões – nível do 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 aos usuários/aos logons 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 compatíveis.
Permissões: Segurança no Nível da Coluna Sim Há suporte para segurança em nível de coluna nos pools de SQL sem servidor para exibições e não para as tabelas externas. No caso das tabelas externas, é possível criar uma exibição lógica na parte superior da tabela externa e aplicar a segurança em nível de coluna.
Segurança em nível de linha Sim Não, não há suporte interno para a Segurança em Nível de Linha. Use exibições personalizadas como uma solução alternativa.
Mascaramento de dados Sim Não, não há suporte para o mascaramento de dados interno nos pools de SQL sem servidor. Use as exibições SQL de wrapper que mascaram explicitamente algumas colunas como uma solução alternativa.
Funções integradas de segurança e identidade do sistema Algumas funções e alguns operadores de segurança Transact-SQL: CURRENT_USER, HAS_DBACCESS, IS_MEMBER, IS_ROLEMEMBER, SESSION_USER, SUSER_NAME, SUSER_SNAME, SYSTEM_USER, USER, USER_NAME, EXECUTE AS e OPEN/CLOSE MASTER KEY Há suporte para alguns operadores e funções de segurança 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 e REVERT. As funções de segurança não podem ser usadas para consultar dados externos (armazene o resultado em uma variável que possa ser usada na consulta).
TDE (Transparent Data Encryption) Sim Não, não há suporte para Transparent Data Encryption.
Descoberta e classificação de dados Sim Não há suporte para classificação e descoberta de dados.
Avaliação de Vulnerabilidade Sim Não, a avaliação de vulnerabilidades não está disponível.
Proteção Avançada contra Ameaças Sim Não, não há suporte para a proteção avançada contra ameaças.
Auditoria Sim Sim, há suporte para a auditoria em pools de SQL sem servidor.
Regras de firewall Sim Sim, as regras de firewall podem ser definidas no ponto de extremidade de SQL sem servidor.
Ponto de extremidade privado Sim Sim, o ponto de extremidade privado pode ser definido no pool de SQL sem servidor.

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

Recursos da plataforma

Recurso Dedicado Sem servidor
Scaling Sim O pool de SQL sem servidor escalona automaticamente, dependendo da carga de trabalho.
Pausar/Retomar Sim O pool de SQL sem servidor é desativado automaticamente quando não é usado e é ativado quando necessário. Não é necessária a ação do usuário.
Backups de banco de dados Sim Não. Os dados são armazenados em sistemas externos (ADLS, Cosmos DB), portanto, certifique-se de fazer backups dos dados na fonte de dados. Certifique-se de usar os metadados de armazenamento SQL (tabela, exibição, definições de procedimentos e permissões de usuário) no controle do código-fonte. As definições das tabelas no banco de dados Lake são armazenadas em metadados Spark, portanto, certifique-se de manter as definições da tabela Spark também no controle do código-fonte.
Restauração do banco de dados Sim Não. Os dados são armazenados em sistemas externos (ADLS, Cosmos DB), portanto você precisa recuperar os sistemas de fonte de dados para trazer seus dados. Certifique-se de que seus metadados SQL (tabela, exibição, definições de procedimentos e permissões de usuário) estejam no controle do código-fonte para que você possa recriar os objetos SQL. As definições das tabelas no banco de dados Lake são armazenadas em metadados Spark, portanto, certifique-se de manter as definições da tabela Spark também no controle do código-fonte.

Ferramentas

Use várias ferramentas para se conectar ao Synapse SQL e consultar dados.

Ferramenta Dedicado Sem servidor
Synapse Studio Sim, scripts SQL Sim, os 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 de SQL sem servidor. O modo de importação é recomendado para relatórios.
Azure Analysis Services Sim Sim, você pode carregar dados no Azure Analysis Services usando o pool de SQL sem servidor.
ADS (Azure Data Studio) Sim Sim, você pode usar o Azure Data Studio (versão 1.18.0 ou superior) para consultar um pool de SQL sem servidor. Há suporte para scripts SQL e SQL notebooks.
SQL Server Management Studio (SSMS) Yes Sim, você pode usar o SQL Server Management Studio (versão 18.5 ou superior) para consultar um pool de SQL sem servidor. O SSMS mostra apenas os objetos que estão disponíveis nos pools de SQL sem servidor.

Observação

Você pode usar o SSMS para se conectar ao pool de SQL sem servidor e consultar. Ele tem compatibilidade parcial da versão 18.5 em diante. Você pode usá-lo somente para se conectar e consultar.

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

Acesso a dados

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

Tipo de armazenamento Dedicado 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 OPENROWSET a função para ler dados do ADLS. Saiba como configurar o controle de acesso.
Armazenamento de Blobs do Azure Sim Sim, você pode usar tabelas externas e OPENROWSET a função para ler dados do Armazenamento de Blobs do Azure Saiba como configurar o controle de acesso.
Azure SQL/SQL Server (remoto) Não Não, o pool de SQL sem servidor não pode referenciar o banco de dados SQL Azure. Você pode fazer referência a pools sem servidor SQL do Azure SQL consultas elásticas ou servidores vinculados.
Dataverse Não, você pode carregar dados do Azure Cosmos DB em um pool dedicado usando o Link do Azure Synapse em um pool de SQL sem servidor (por meio do ADLS) ou do Spark. Sim, você pode ler tabelas do Dataverse usando o link do Azure Synapse para o Dataverse com o Azure Data Lake.
Armazenamento transacional do Azure Cosmos DB Não Não, você não pode acessar contêineres de Azure Cosmos DB para atualizar ou ler dados no 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 Link do Azure Synapse em um pool de SQL sem servidor (por meio do ADLS), do ADF, do Spark ou de outra ferramenta de carregamento. Sim, você pode consultar o armazenamento analítico do Azure Cosmos DB usando o Link do Azure Synapse.
Tabelas do Apache Spark (no workspace) Não Sim, o pool sem servidor pode ler tabelas PARQUET e CSV usando a sincronização de metadados.
Tabelas do Apache Spark (remotas) Não Não, o pool sem servidor pode acessar apenas as tabelas PARQUET e CSV que são criadas em pools do Apache Spark no mesmo workspace do Azure Synapse. No entanto, é possível criar manualmente uma tabela externa que referencia o local da tabela externa do Spark.
Tabelas do Databricks (remotas) Não Não, o pool sem servidor pode acessar apenas as tabelas PARQUET e CSV que são criadas em pools do Apache Spark no mesmo workspace do Azure Synapse. No entanto, é possível criar manualmente uma tabela externa que referencia o local da tabela do Databricks.

Formatos de dados

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

Formato de dados Dedicado Sem servidor
Delimitado Sim Sim, você pode consultar arquivos delimitados.
CSV Sim (não há suporte a delimitadores de vários caracteres) Sim, você pode consultar arquivos CSV. Para aprimorar o desempenho, use o PARSER_VERSION 2.0 que fornece análise mais rápida. Se você estiver acrescentando linhas aos arquivos CSV, consulte os arquivos como acrescentáveis.
Parquet Sim Sim, você pode consultar arquivos Parquet, incluindo os arquivos com tipos aninhados.
Hive ORC Sim Não, os pools de SQL sem servidor não podem ler o formato ORC do Hive.
Hive RC Sim Não, pools de SQL sem servidor não podem ler o formato RC do Hive.
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, os pools de SQL sem servidor não podem ler o formato Avro.
Delta Lake No Sim, você pode consultar arquivos Delta Lake, incluindo os arquivos com tipos aninhados.
CDM (Common Data Model) Não Não, o pool de SQL sem servidor não pode ler dados armazenados usando o Common Data Model.

Próximas etapas

Encontre mais informações sobre as melhores práticas do pool de SQL dedicado e do pool de SQL sem servidor nos seguintes artigos: