SnowConvert AI - Servidor SQL - Azure Synapse - Elementos gerais de linguagem¶
Nesta seção você encontra informações sobre instruções gerais do Transect-SQL.
COLLATE¶
Applies to
SQL Server
Azure Synapse Analytics
A transformação de Collate depende de seu valor, pois pode ser compatível ou não.
Atualmente, estes são os idiomas suportados na transformação; se forem encontrados em Collate, serão transformados em seu equivalente no Snowflake.
SQL Server |
Snowflake |
|---|---|
Latin1_General |
EN |
Modern_Spanish |
ES |
Francês |
FR |
Se o idioma não for um dos mencionados acima, Collate será comentado.
The collate in SQL Server comes with additional specifications, such as CI, CS, AI, and AS. If there are additional specifications that are unsupported, they will be commented in the result.
Fonte¶
Esperado¶
Vejamos um exemplo de Collate em Create Table
Fonte¶
Esperado¶
Como você pode ver, a transformação de Collate dentro de Select ou Table é a mesma.
COMPUTED COLUMN¶
Não foi possível transformar a expressão computada.
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
A expressão de uma coluna computada não pôde ser transformada.
Exemplo de código¶
Código de entrada:¶
Código de saída:¶
Recomendações¶
Adicione alterações manuais à expressão não transformada.
Se precisar de mais suporte, envie um e-mail para snowconvert-support@snowflake.com
EWIs relacionados¶
SSC-FDM-TS0014: Coluna computada transformada.
OUTER APPLY¶
Tradutor de equivalência de instrução de aplicação externa.
Applies to
SQL Server
Azure Synapse Analytics
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Descrição¶
Quando OUTER APPLY é especificado, uma linha é produzida para cada linha do conjunto de linhas à esquerda, mesmo quando a expressão do conjunto de linhas à direita retorna um conjunto de linhas vazio para essa linha. (Definição de OUTER APPLY)
Sintaxe¶
Equivalência no Snowflake¶
Apesar da instrução sem suporte OUTER APPLY no Snowflake, há uma instrução equivalente, que é LATERAL. Portanto, a conversão da instrução é realizada para obter a mesma funcionalidade por meio do uso de soluções alternativas.
No entanto, a instrução LATERAL no Snowflake tem duas variações de sintaxe. Na verdade, a variação INNER JOIN LATERAL é usada nessa conversão específica.
A gramática de INNER JOIN LATERAL do Snowflake é a seguinte:
Nota
_<inline\view> não pode ser um nome de tabela.
E a única instrução LATERAL é mostrada abaixo:
Amostra de origem¶
O exemplo a seguir mostra uma conversão geral entre OUTER APPLY e INNER JOIN LATERAL:
SQL Server¶
Saída¶
p.ProjectName |
e.ProjectName |
FirstName |
|---|---|---|
Projeto A |
Projeto A |
John |
Projeto A |
Projeto A |
Jane |
Projeto A |
Projeto B |
Michael |
Projeto B |
Projeto A |
John |
Projeto B |
Projeto A |
Jane |
Projeto B |
Projeto B |
Michael |
Projeto C |
Projeto A |
John |
Projeto C |
Projeto A |
Jane |
Projeto C |
Projeto B |
Michael |
Snowflake¶
Saída¶
PROJECTNAME |
PROJECTNAME_2 |
FIRSTNAME |
|---|---|---|
Projeto A |
Projeto A |
John |
Projeto A |
Projeto A |
Jane |
Projeto A |
Projeto B |
Michael |
Projeto B |
Projeto A |
John |
Projeto B |
Projeto A |
Jane |
Projeto B |
Projeto B |
Michael |
Projeto C |
Projeto A |
John |
Projeto C |
Projeto A |
Jane |
Projeto C |
Projeto B |
Michael |
Problemas conhecidos¶
Como a conversão é uma equivalência da entrada, há algumas limitações.
As instruções TOP e WHERE podem ser revisadas para otimizar o comportamento.
Pode ser necessário um nome de correlação no final da instrução. No Snowflake, a consulta não representa um problema se o nome da correlação não estiver na consulta, mas a funcionalidade pode mudar e não faz parte do padrão aceito no SQL Server.
SQL Server¶
Saída da tradução¶
Instruções específicas que não são compatíveis podem comentar todo o código do bloco (exemplo retirado de: Exemplo de JSON).
SQL Server¶
Saída da tradução¶
EWIs relacionados¶
Sem EWIs relacionados.
USE¶
Equivalente do Snowflake para a instrução Transact-SQL USE.
Applies to
SQL Server
A instrução USE tem seu próprio equivalente no Snowflake. A instrução será convertida para a instrução USE DATABASE no Snowflake.
Exemplos de conversão¶
Fonte¶
Saída¶
Nome do banco de dados¶
O nome do banco de dados especificado na instrução USE poderá ser alterado se estiver entre colchetes ([ ]). O primeiro colchete e o último serão substituídos por aspas. Exemplo:
Fonte¶
Saída¶
Banco de dados definido pelo usuário¶
Se um usuário especificar na ferramenta de conversão um nome de banco de dados personalizado a ser aplicado a todos os objetos usando o parâmetro -d e quiser que as instruções USE sejam transformadas, o nome do banco de dados deverá ser aplicado apenas à instrução USE e não aos objetos. Isso substituirá o banco de dados especificado na instrução Use. Exemplo:
Fonte¶
Saída¶
Problemas conhecidos¶
Não foram encontrados problemas.
EWIs relacionados¶
Sem EWIs relacionados.
EXECUTE¶
Applies to
SQL Server
Azure Synapse Analytics
A conversão para as instruções Exec ou Execute não é compatível com o Snowflake, mas será convertida para a instrução CALL.
Nota
Algumas partes do código de saída foram omitidas por motivos de clareza.
Entrada¶
Saída¶
Para mais informações sobre a execução, acesse: Executar dentro dos procedimentos
PRINT¶
Applies to
SQL Server
Azure Synapse Analytics
A instrução Print não tem suporte direto no Snowflake, mas será traduzida para o seu equivalente mais próximo, a função interna SYSTEM$LOG_INFO.
Entrada¶
Saída (dentro do SnowScript)¶
Saída (fora do SnowScript)¶
Quando a instrução Print é usada fora de um procedimento armazenado, é necessário que ela seja chamada de um SnowConvert AI UDP.
Antes de começar a registrar mensagens, é necessário configurar uma tabela de eventos. Para mais informações, consulte: registro de mensagens no Snowflake Scripting
Procedimentos armazenados do sistema¶
SP_EXECUTESQL¶
Especificação de tradução para o procedimento do sistema SP_EXECUTESQL.
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
O procedimento armazenado do sistema SP_EXECUTESQL é usado para executar uma instrução ou um lote do Transact-SQL que pode ser reutilizado várias vezes ou que é criado dinamicamente. A instrução ou o lote pode conter parâmetros incorporados.
Essa funcionalidade pode ser emulada no Snowflake pela instrução EXECUTE IMMEDIATE e com uma função definida pelo usuário (UDF) para parâmetros incorporados.#x20;
Para mais informações sobre a função definida pelo usuário (UDF) usada para esta tradução, veja TRANSFORM_SP_EXECUTE_SQL_STRING_UDF(STRING, STRING, ARRAY, ARRAY).
Sintaxe¶
Transact¶
Amostra de padrões da origem¶
Todos os padrões transformarão SP_EXECUTESQL na instrução EXECUTE IMMEDIATE do Snowflake e somente modificarão a cadeia de caracteres SQL a ser executada ao usar parâmetros incorporados.
Aviso
SSC-EWI-0030 (Uso de SQL dinâmico) será adicionado a todos os padrões. Embora a conversão para SP_EXECUTESQL seja equivalente ao Snowflake, nesse contexto, esse EWI indica que a cadeia de caracteres SQL pode exigir correções manuais para que a conversão seja executada como pretendido.
Dados de configuração¶
Transact¶
Snowflake¶
Sem parâmetros incorporados¶
Quando nenhum parâmetro incorporado estiver sendo usado, SP_EXECUTESQL é transformado em uma instrução EXECUTE IMMEDIATE e usa a cadeia de caracteres SQL sem modificações.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Com parâmetros incorporados para vinculação de dados¶
Para parâmetros incorporados para vinculação de dados, o SP_EXECUTESQL é transformado em uma instrução EXECUTE IMMEDIATE e a cadeia de caracteres SQL é modificada pelo TRANSFORM_SP_EXECUTE_SQL_STRING_UDF.#x20;
O resultado de EXECUTE IMMEDIATE é atribuído à variável ProcedureResultSet e, posteriormente, retornado como TABLE(ProcedureResultSet).
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Com parâmetros incorporados OUTPUT¶
Para parâmetros OUTPUT incorporados, SP_EXECUTESQL é transformado em uma instrução EXECUTE IMMEDIATE e a cadeia de caracteres SQL é modificada por meio de TRANSFORM_SP_EXECUTE_SQL_STRING_UDF.
Além disso, SELECT $1, ..., $n INTO :outputParam1, ..., :outputParamN FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) é adicionado ao resultado de cada coluna para o parâmetro OUTPUT correspondente.
Aviso
SSC-FDM-TS0028 é adicionado à instrução SELECT INTO. É essencial que os parâmetros da cláusula INTO apareçam na mesma ordem em que foram atribuídos na cadeia de caracteres SQL original.
Caso contrário, serão necessárias alterações manuais para atender a esse requisito.
Transact¶
Resultados¶
<anônimo> |
|---|
32 |
Snowflake¶
Resultados¶
:MAXAGE::NUMBER(38,0) |
|---|
32 |
Com os parâmetros incorporados OUTPUT e a vinculação de dados¶
A conversão é a mesma que para apenas parâmetros OUTPUT.
Transact¶
Resultados¶
<anônimo> |
<anônimo> |
|---|---|
24 |
4 |
Snowflake¶
Resultados¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Os parâmetros não estão em ordem de definição¶
Esse padrão segue as mesmas regras dos padrões anteriores. TRANSFORM_SP_EXECUTE_SQL_STRING_UDF substitui os valores dos parâmetros na ordem correta.
Transact¶
Resultados¶
<anônimo> |
<anônimo> |
|---|---|
24 |
4 |
<anônimo> |
<anônimo> |
|---|---|
24 |
4 |
Snowflake¶
Resultados¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Executar valores diretos¶
This translation also handles the cases where the values are directly assigned instead of using variables.
Transact¶
Resultados¶
<anônimo> |
<anônimo> |
|---|---|
24 |
4 |
Snowflake¶
Resultados¶
:MAXAGE::NUMBER(38,0) |
:MAXID::NUMBER(38,0) |
|---|---|
24 |
4 |
Cadeia de caracteres SQL construída dinamicamente¶
Esse padrão segue as mesmas regras dos padrões anteriores. No entanto, a atribuição do resultado da instrução EXECUTE IMMEDIATE pode não ser adicionada se a cadeia de caracteres SQL não for uma consulta simples e única com ou sem parâmetros incorporados.
Além disso, a cadeia de caracteres SQL precisa começar com o valor literal 'SELECT' para SnowConvert AI para identificar corretamente que uma instrução SELECT será executada.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Snowflake¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Retorno de vários conjuntos de resultados¶
Os procedimentos do Snowflake Scripting permitem que apenas um conjunto de resultados seja retornado por procedimento.
Para replicar o comportamento do Transact-SQL, quando dois ou mais conjuntos de resultados devem ser retornados, eles são armazenados em tabelas temporárias. O procedimento Snowflake Scripting retornará uma matriz contendo os nomes das tabelas temporárias. Para obter mais informações, consulte SSC-FDM-0020.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Doe |
2 |
21 |
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Resultados¶
WITH_MULTIPLE_RETURNS |
|---|
[ «RESULTSET_88C35D7A_1E5B_455D_97A4_247806E583A5», «RESULTSET_B2345B61_A015_43CB_BA11_6D3E013EF262» ] |
Problemas conhecidos¶
1. Invalid code is detected¶
SP_EXECUTESQL pode executar mais de uma instrução SQL dentro da cadeia de caracteres SQL. O Snowflake também oferece suporte à execução de várias instruções SQL, mas elas precisam estar em um bloco BEGIN … END. Além disso, ao executar várias instruções de um bloco BEGIN … END, o EXECUTE IMMEDIATE não retornará um conjunto de resultados. O SnowConvert AI ainda não oferece suporte para a tradução nesses casos. Para mais informações, veja SSC-EWI-0030.
Assim, quando esse caso for detectado, no código convertido, EXECUTE IMMEDIATE não será atribuído a ProcedureResultSet.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Resultados¶
2. Valid or Invalid code is not detected¶
Se a cadeia de caracteres SQL for construída dinamicamente através de concatenações, pode ser que a SnowConvert AI não detecte qual instrução será executada. Assim, no código traduzido, EXECUTE IMMEDIATE não será atribuído ao ProcedureResultSet.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
INSERT FIRST |
1200 |
230 |
Snowflake¶
Resultados¶
3. Invalid code is mistaken as valid¶
Se a cadeia de caracteres SQL começar com uma instrução SELECT e for seguida por mais instruções, a SnowConvert AI detectará isso como um código válido e tentará atribuir o resultado do EXECUTE IMMEDIATE para o ProcedureResultSet. Isso gera um erro de compilação. Para mais informações, veja SSC-EWI-0030.
Transact¶
Resultados¶
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Nome |
ID |
AGE |
|---|---|---|
John Smith |
1 |
24 |
John Doe |
2 |
21 |
Mary Keller |
3 |
32 |
Mundane Man |
4 |
18 |
Snowflake¶
Resultados¶
EWIs relacionados¶
SSC-EWI-0030: A instrução abaixo tem usos de SQL dinâmico
SSC-FDM-TS0028: Os parâmetros de saída devem ter a mesma ordem em que aparecem no código executado.
SSC-FDM-0020: Vários conjuntos de resultados são retornados em tabelas temporárias.
SP_RENAME¶
Stored Procedure to Rename certain objects in SQL Server
Applies to
SQL Server
Azure Synapse Analytics
O procedimento de armazenamento do sistema SP_RENAME pode ser emulado no Snowflake em determinados cenários. Em geral, o equivalente é EXECUTE IMMEDIATE, usando uma instrução dinâmica com ALTER TABLE e os parâmetros originais.
Exemplos de conversão para tabelas¶
Fonte¶
Saída¶
Fonte¶
Saída¶
Exemplos de conversão para colunas¶
Fonte¶
Saída¶
Fonte¶
Saída¶
EWIs relacionados¶
SSC-EWI-TS0075: A conversão para o procedimento interno não é suportada no momento.
WAITFOR DELAY¶
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
In SQL Server, WAITFOR DELAY pauses execution for a specified duration. SnowConvert AI transforms WAITFOR DELAY statements to Snowflake’s CALL SYSTEM$WAIT() function, which provides equivalent delay functionality.
The time string is parsed and converted to seconds (or milliseconds for sub-second precision). Variables and parameters are passed through directly with an EWI warning, since SYSTEM$WAIT expects a numeric value rather than a time string.
Nota
WAITFOR TIME (which pauses until a specific time of day) has no Snowflake equivalent and remains flagged with SSC-EWI-0073.
Exemplos de conversão¶
WAITFOR DELAY with literal time¶
Código de entrada:¶
Generated Code:¶
WAITFOR DELAY with sub-second precision¶
Código de entrada:¶
Generated Code:¶
WAITFOR DELAY with variable¶
Código de entrada:¶
Generated Code:¶
WAITFOR DELAY at script level¶
Código de entrada:¶
Generated Code:¶
Known Limitations¶
WAITFOR TIME(pause until a specific time of day) has no Snowflake equivalent and is flagged with SSC-EWI-0073.When a variable is used, SSC-EWI-TS0094 is emitted because
SYSTEM$WAITexpects a numeric value but the variable may contain a time string in'HH:MM:SS'format.
EWIs relacionados¶
SSC-EWI-TS0094: WAITFOR DELAY variable may contain a time string incompatible with SYSTEM$WAIT.
SSC-EWI-0073: Pending functional equivalence review (emitted for WAITFOR TIME).
CREATE STATISTICS¶
Applies to
SQL Server
Azure Synapse Analytics
Descrição¶
SnowConvert AI comments out CREATE STATISTICS statements because Snowflake automatically collects optimizer statistics and does not require this statement.
Translation Example¶
Código de entrada:¶
Generated Code:¶
Additional Example¶
Código de entrada:¶
Generated Code:¶
Known Limitations¶
Any operational process that explicitly creates or refreshes statistics in SQL Server should be reviewed, because Snowflake manages optimizer statistics automatically.