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, SELECT a instrução é suportada, mas algumas cláusulas de consulta Transact-SQL, como FOR XML, MATCH, PREDICT, GROUPNG SETS e as dicas de consulta não são suportadas. |
INSERIR instrução | Sim | N.º 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.
Caraterística | 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_owner e db_datareader db_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 , HAS_DBACCESS , IS_MEMBER , IS_ROLEMEMBER , SESSION_USER , SUSER_NAME , , USER SYSTEM_USER USER_NAME EXECUTE AS SUSER_SNAME OPEN/CLOSE MASTER KEY |
Há suporte para algumas funções e operadores de segurança Transact-SQL: CURRENT_USER , HAS_DBACCESS , HAS_PERMS_BY_NAME , IS_MEMBER , IS_ROLEMEMBER , SESSION_CONTEXT SUSER_NAME SUSER_SNAME SESSION_USER IS_SRVROLEMEMBER USER USER_NAME SYSTEM_USER EXECUTE AS e .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
Caraterística | 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.º 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.º 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: