Na segunda parte da série de blogs sobre o anúncio de Scripting SQL, examinaremos a tarefa administrativa que discutimos em a primeira parte - como aplicar uma regra insensível a maiúsculas e minúsculas em todas as colunas STRING de uma tabela. Vamos percorrer esse exemplo passo a passo, explicar os recursos usados e expandi-lo além de uma única tabela para cobrir todo um esquema.
Você também pode acompanhar neste notebook.
O Databricks suporta uma ampla gama de colações sensíveis ao idioma, insensíveis a maiúsculas e minúsculas, e insensíveis a acentos. É fácil usar esse recurso para novas tabelas e colunas. Mas e se você tem um sistema existente que usa upper() ou lower() em predicados em todos os lugares e quer aproveitar as melhorias de desempenho associadas a uma colação nativa insensível a maiúsculas e minúsculas, ao mesmo tempo que simplifica suas consultas? Isso exigirá alguma programação; agora você pode fazer tudo em SQL.
Vamos usar o seguinte esquema de teste:
A ordem é baseada nos pontos de código ASCII, onde todas as letras maiúsculas precedem todas as letras minúsculas. Você pode corrigir isso sem adicionar upper() ou lower()?
Nosso primeiro passo é dizer à tabela para alterar sua ordenação padrão para colunas recém-adicionadas. Você pode alimentar suas variáveis locais com marcadores de parâmetro, que o notebook detectará automaticamente e adicionará widgets. Você também pode usar EXECUTE IMEDIATO para executar um composto dinamicamente ALTERAR TABELA declaração.
Todo script SQL consiste em uma declaração BEGIN .. END (composta). Variáveis locais são definidas primeiro dentro de uma declaração composta, seguida pela lógica.
Isso é tudo apenas um conjunto de declarações lineares. Até agora, você poderia escrever tudo isso com variáveis de sessão SQL sem a declaração composta. Você também não conseguiu muito. Afinal, você queria alterar a ordenação para colunas existentes. Para fazer isso, você precisa:
Em resumo, você precisa fazer um loop na INFORMATION_SCHEMA.COLUMNS tabela.
O SQL Scripting oferece quatro maneiras de fazer loops e maneiras de controlar as iterações do loop.
Agora, aplique o loop FOR ao nosso script de collation. A consulta obtém os nomes das colunas de todas as colunas de string da tabela. O corpo do loop altera a collation de cada coluna por vez:
Vamos verificar se a tabela foi atualizada corretamente:
Até agora, tudo bem. Nosso código está funcionalmente completo, mas você deve informar ao Delta para analisar as colunas que você modificou para se beneficiar da omissão de arquivos. Você não quer fazer isso por coluna. Mas reúna todas elas e faça o trabalho apenas se houve, de fato, uma coluna de string para a qual a colação foi alterada. Decisões, decisões...
O SQL Scripting oferece três maneiras de executar condicionalmente instruções SQL.
Para nosso script de ordenação, um simples SE ENTÃO FIM SE será suficiente. Você também precisa coletar o conjunto de colunas para aplicar ANALYZE e alguma mágica de função de ordem superior para produzir a lista de colunas:
O que você escreveu até agora funciona para tabelas individuais. E se você quiser operar em todas as tabelas em um esquema? O Scripting SQL é totalmente componível. Você pode aninhar declarações compostas, declarações condicionais e loops dentro de outras declarações de script SQL.
Então, o que você fará aqui é duplo:
Esse erro faz sentido. Você tem várias maneiras de proceder:
Uma capacidade chave da programação SQL é a habilidade de interceptar e lidar com exceções. Os manipuladores de condição são definidos na seção de declaração de uma instrução composta, e eles se aplicam a qualquer instrução dentro dessa composição, incluindo instruções aninhadas. Você pode lidar com condições de erro específicas por nome, SQLSTATEs específicos que lidam com várias condições de erro, ou todas as condições de erro. Dentro do corpo do manipulador de condição, você pode usar a instrução GET DIAGNOSTICS para recuperar informações sobre a exceção sendo tratada e executar qualquer script SQL que você considere apropriado, como registrar o erro em um log ou executar uma lógica alternativa à que falhou. Você pode então SINALIZAR uma nova condição de erro, RESINALIZAR a condição original, ou simplesmente sair da instrução composta onde o manipulador está definido e continuar com a instrução seguinte.
No nosso script, você quer pular qualquer instrução para a qual a instrução ALTER TABLE DEFAULT COLLATION não se aplicou e registre o nome do objeto.
Acima, você desenvolveu um script administrativo puramente em SQL. Você também pode escrever scripts ELT e transformá-los em Jobs. A criação de scripts SQL é uma ferramenta verdadeiramente poderosa que você deve explorar.
Se você já é um usuário do Databricks ou está migrando de outro produto, o script SQL é uma capacidade que você deve usar. O script SQL segue o padrão ANSI e é totalmente compatível com OSS Apache Spark™. O script SQL é descrito em detalhes em Script SQL | Documentação do Databricks.
Você também pode usar este notebook para ver por si mesmo.
(This blog post has been translated using AI-powered tools) Original Post