ExecuteSQL

 

Olá, seja bem-vindo a mais uma aula do curso Desenvolvimento com Apache Nifi.

Nesta aula vamos falar sobre o processor ExecuteSQL**.**

Este Processor executa a consulta SQL fornecida. O resultado da consulta será convertido para o formato Avro.

O streaming é usado para que conjuntos de resultados arbitrariamente grandes sejam suportados. Esse processor pode ser agendado para ser executado em um temporizador ou expressão cron, usando os métodos de agendamento padrão, ou pode ser acionado por um FlowFile de entrada. Se for acionado por um FlowFile de entrada, os atributos desse FlowFile estarão disponíveis ao avaliar a consulta de seleção e a consulta poderá usar o ? para escapar dos parâmetros.

Nesse caso, os parâmetros a serem usados devem existir como atributos FlowFile com a convenção de nomenclatura sql.args.N.type e sql.args.N.value, em que N é um número inteiro positivo. Espera-se que o sql.args.N.type seja um número indicando o Tipo JDBC. Espera-se que o conteúdo do FlowFile esteja no formato UTF-8. O atributo FlowFile 'executesql.row.count' indica quantas linhas foram selecionadas.

Abaixo temos uma lista com as suas propriedades:

  • Database Connection Pooling Service : O Serviço do Controlador que é usado para obter conexão com o banco de dados
  • SQL select query : A consulta SQL a ser executada. A consulta pode ser vazia, um valor constante ou construída a partir de atributos usando Expression Language. Se esta propriedade for especificada, ela será usada independentemente do conteúdo dos arquivos de fluxo de entrada. Se esta propriedade estiver vazia, espera-se que o conteúdo do arquivo de fluxo de entrada contenha uma consulta de seleção SQL válida, a ser emitida pelo processor para o banco de dados.
  • Max Wait Time : A quantidade máxima de tempo permitida para uma consulta de seleção SQL em execução, zero significa que não há limite. O tempo máximo inferior a 1 segundo será igual a zero.
  • Normalize Table/Column Names : Se caracteres não compatíveis com Avro devem ser alterados em nomes de colunas para caracteres compatíveis com Avro. Por exemplo, dois pontos e pontos serão alterados para sublinhados para criar um registro Avro válido.
  • Use Avro Logical Types : Se os tipos lógicos Avro devem ser usados para colunas DECIMAL/NUMBER, DATE, TIME e TIMESTAMP. Se desabilitado, escrito como string. Se ativado, os tipos lógicos são usados e escritos como seu tipo subjacente, especificamente, DECIMAL/NUMBER como 'decimal' lógico: escrito como bytes com precisão adicional e metadados de escala, DATE como 'date-millis' lógico: escrito como int denotando dias desde a época Unix (1970-01-01), TIME como 'time-millis' lógico: escrito como int denotando milissegundos desde a época Unix, e TIMESTAMP como 'timestamp-millis' lógico: escrito como long denotando milissegundos desde a época Unix. Se um leitor de registros Avro escritos também conhece esses tipos lógicos, esses valores podem ser desserializados com mais contexto, dependendo da implementação do leitor.
  • Default Decimal Precision : "Quando um valor DECIMAL/NUMBER é escrito como um tipo lógico Avro 'decimal', é necessária uma 'precisão' específica que denota o número de dígitos disponíveis. Geralmente, a precisão é definida pela definição do tipo de dados da coluna ou pelos mecanismos de banco de dados padrão. No entanto, precisão indefinida ( 0) pode ser retornado de alguns mecanismos de banco de dados. 'Precisão Decimal Padrão' é usada ao escrever esses números de precisão indefinidos.
  • Default Decimal Scale : "Quando um valor DECIMAL/NUMBER é escrito como um tipo lógico Avro 'decimal', é necessária uma 'escala' específica que denota o número de dígitos decimais disponíveis. Geralmente, a escala é definida pela definição do tipo de dados da coluna ou pelos mecanismos de banco de dados padrão. No entanto, quando indefinido precisão (0) for retornada, a escala também pode ser incerta com alguns mecanismos de banco de dados. 'Escala Decimal Padrão' é usada ao escrever esses números indefinidos. Se um valor tiver mais decimais do que a escala especificada, o valor será arredondado, por exemplo 1,53 torna-se 2 com escala 0 e 1,5 com escala 1.

Os relacionamentos permitidos para direcionar ou terminar um flowfile são:

  • success= FlowFile criado com sucesso a partir do conjunto de resultados da consulta SQL.
  • failure= Falha na execução da consulta SQL. O FlowFile de entrada será penalizado e encaminhado para esta relação