Utilizar procedimentos armazenados para conjuntos de SQL dedicados no Azure Synapse Analytics
Este artigo fornece sugestões para desenvolver soluções de conjuntos de SQL dedicadas através da implementação de procedimentos armazenados.
O que esperar
O conjunto de SQL dedicado suporta muitas das funcionalidades T-SQL utilizadas no SQL Server. Mais importante ainda, existem funcionalidades específicas de aumento horizontal que pode utilizar para maximizar o desempenho da sua solução.
Além disso, para o ajudar a manter a escala e o desempenho do conjunto de SQL dedicado, existem funcionalidades e funcionalidades adicionais que têm diferenças comportamentais.
Introdução aos procedimentos armazenados
Os procedimentos armazenados são uma excelente forma de encapsular o código SQL, que é armazenado perto dos dados do conjunto de SQL dedicados. Os procedimentos armazenados também ajudam os programadores a modularizar as suas soluções ao encapsularem o código em unidades geríveis, facilitando assim uma maior reutilização de código. Cada procedimento armazenado também pode aceitar parâmetros para torná-los ainda mais flexíveis.
O conjunto de SQL dedicado fornece uma implementação simplificada e simplificada do procedimento armazenado. A maior diferença em comparação com SQL Server é que o procedimento armazenado não é código pré-compilado.
Em geral, para os armazéns de dados, o tempo de compilação é pequeno em comparação com o tempo que demora a executar consultas em grandes volumes de dados. É mais importante garantir que o código do procedimento armazenado está corretamente otimizado para consultas grandes.
Dica
O objetivo é poupar horas, minutos e segundos, não milissegundos. Por isso, é útil pensar nos procedimentos armazenados como contentores para a lógica do SQL.
Quando um conjunto de SQL dedicado executa o procedimento armazenado, as instruções SQL são analisadas, traduzidas e otimizadas no tempo de execução. Durante este processo, cada instrução é convertida em consultas distribuídas. O código SQL que é executado nos dados é diferente da consulta submetida.
Aninhar procedimentos armazenados
Quando os procedimentos armazenados chamam outros procedimentos armazenados ou executam SQL dinâmico, o procedimento armazenado interno ou invocação de código é considerado aninhado.
O conjunto de SQL dedicado suporta um máximo de oito níveis de aninhamento. Em contraste, o nível de ninho no SQL Server é 32.
A chamada de procedimento armazenado de nível superior equivale ao nível 1 do aninhamento.
EXEC prc_nesting
Se o procedimento armazenado também fizer outra chamada EXEC, o nível de ninho aumenta para dois.
CREATE PROCEDURE prc_nesting
AS
EXEC prc_nesting_2 -- This call is nest level 2
GO
EXEC prc_nesting
Se o segundo procedimento executar algum SQL dinâmico, o nível de ninho aumenta para três.
CREATE PROCEDURE prc_nesting_2
AS
EXEC sp_executesql 'SELECT 'another nest level' -- This call is nest level 2
GO
EXEC prc_nesting
Atualmente, o conjunto de SQL dedicado não suporta @@NESTLEVEL. Como tal, tem de controlar o nível do ninho. É pouco provável que exceda o limite de oito níveis de ninho. No entanto, se o fizer, terá de reformular o código para se ajustar aos níveis de aninhamento dentro deste limite.
INSERT.. EXECUTAR
O conjunto de SQL dedicado não lhe permite consumir o conjunto de resultados de um procedimento armazenado com uma instrução INSERT. No entanto, existe uma abordagem alternativa que pode utilizar. Por exemplo, veja o artigo sobre tabelas temporárias.
Limitações
Existem alguns aspetos dos procedimentos armazenados transact-SQL que não são implementados no conjunto de SQL dedicado, que são os seguintes:
- procedimentos armazenados temporários
- procedimentos armazenados numerados
- procedimentos armazenados expandidos
- Procedimentos armazenados clR
- opção de encriptação
- opção de replicação
- parâmetros com valor de tabela
- parâmetros só de leitura
- parâmetros predefinidos
- contextos de execução
- declaração de devolução
Passos seguintes
Para obter mais sugestões de desenvolvimento, veja Descrição geral do desenvolvimento.