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 master Database). 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: