ExecuteSQLRecord 2025.5.31.15

Pacote

org.apache.nifi | nifi-standard-nar

Descrição

Executa a consulta SELECT SQL fornecida. O resultado de consulta será convertido para o formato especificado por um Record Writer. O streaming é usado para oferecer suporte a conjuntos de resultados arbitrariamente grandes. Esse processador pode ser programado para ser executado em um cronômetro ou expressão cron, usando os métodos de programação 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 sql.args.N.type seja um número que indique 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.

Tags

database, jdbc, query, record, select, sql

Requisito de entrada

ALLOWED

Oferece suporte a propriedades dinâmicas confidenciais

true

Propriedades

Propriedade

Descrição

Serviço de pool de conexões de banco de dados

O Controller Service usado para obter conexão ao banco de dados

Tempo máximo de espera

A quantidade máxima de tempo permitida para uma consulta SQL select em execução; zero significa que não há limite. O tempo máximo inferior a 1 segundo será igual a 0.

Consulta SQL

A consulta SQL a ser executada. A consulta pode ser vazia, um valor constante ou criada a partir de atributos usando a linguagem de expressão. Se essa propriedade for especificada, ela será usada independentemente do conteúdo dos FlowFiles de entrada. Se essa propriedade estiver vazia, espera-se que o conteúdo do FlowFile de entrada contenha uma consulta SQL select válida, a ser emitida pelo processador para o banco de dados. Observe que a linguagem de expressão não é avaliada para o conteúdo do FlowFile.

dbf-default-precision

Quando um valor DECIMAL/NUMBER é escrito como um tipo lógico Avro “decimal”, é necessária uma “precisão” específica que indique o número de dígitos disponíveis. Em geral, a precisão é definida pela definição do tipo de dados da coluna ou pelo padrão dos mecanismos do banco de dados. Entretanto, a precisão indefinida (0) pode ser retornada por alguns mecanismos de banco de dados. A “precisão decimal padrão” é usada ao escrever esses números de precisão indefinida.

dbf-default-scale

Quando um valor DECIMAL/NUMBER é escrito como um tipo lógico Avro “decimal”, é necessária uma “escala” específica que indique o número de dígitos decimais disponíveis. Em geral, a escala é determinada pela definição do tipo de dados da coluna ou pelo padrão dos mecanismos do banco de dados. No entanto, quando a precisão indefinida (0) é retornada, a escala também pode ser incerta com alguns mecanismos de banco de dados. A “escala decimal padrão” é usada ao escrever esses números indefinidos. Se um valor tiver mais casas decimais do que a escala especificada, o valor será arredondado para cima, por exemplo, 1,53 se torna 2 com escala 0 e 1,5 com escala 1.

dbf-user-logical-types

Se você deve usar os tipos lógicos Avro para as colunas DECIMAL/NUMBER, DATE, TIME e TIMESTAMP. Se estiver desativado, será escrito como cadeia de caracteres. 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 do Unix (1970-01-01), TIME como “time-millis” lógico: escrito como int denotando milissegundos desde a época do Unix e TIMESTAMP como “timestamp-millis” lógico: escrito como um long denotando milissegundos desde a época do Unix. Se um leitor dos registros Avro gravados também reconhecer esses tipos lógicos, esses valores poderão ser desserializados com mais contexto, dependendo da implementação do leitor.

esql-auto-commit

Ativa ou desativa a funcionalidade de confirmação automática da conexão DB. O valor padrão é “verdadeiro”. O valor padrão pode ser usado com a maioria dos drivers JDBC e essa funcionalidade não tem nenhum impacto na maioria dos casos, pois esse processador é usado para ler dados. No entanto, para alguns drivers JDBC, como o driver PostgreSQL, é necessário desativar a funcionalidade de confirmação automática para limitar o número de linhas de resultados obtidas por vez. Quando a confirmação automática está ativada, o driver postgreSQL carrega todo o conjunto de resultados na memória de uma só vez. Isso pode levar a uma grande quantidade de uso de memória ao executar consultas que buscam grandes conjuntos de dados. Mais detalhes sobre esse comportamento no driver PostgreSQL podem ser encontrados em https://jdbc.postgresql.org//documentation/head/query.html.

esql-fetch-size

O número de linhas de resultados a serem obtidas do conjunto de resultados por vez. Essa é uma dica para o driver do banco de dados e pode não ser respeitada e/ou exata. Se o valor especificado for zero, a dica será ignorada.

esql-max-rows

O número máximo de linhas de resultados que serão incluídas em um único FlowFile. Isso permitirá que você divida conjuntos de resultados muito grandes em vários FlowFiles. Se o valor especificado for zero, todas as linhas serão retornadas em um único FlowFile.

esql-output-batch-size

O número de saídas FlowFiles a serem enfileiradas antes de encerrar a sessão do processo. Quando definida como zero, a sessão será confirmada quando todas as linhas do conjunto de resultados tiverem sido processadas e a saída FlowFiles estiver pronta para ser transferida para a relação downstream. Para conjuntos de resultados grandes, isso pode causar um grande pico de FlowFiles a ser transferido no final da execução do processador. Se essa propriedade for definida, quando o número especificado de FlowFiles estiver pronto para transferência, a sessão será confirmada, liberando assim os FlowFiles para a relação downstream. NOTE: o atributo fragment.count não será definido nos FlowFiles quando essa propriedade for definida.

esqlrecord-normalize

Se você deve alterar os caracteres nos nomes das colunas. Por exemplo, os dois pontos e pontos finais serão alterados para sublinhados.

esqlrecord-record-writer

Especifica o Controller Service a ser usado para gravar resultados em um FlowFile. O Record Writer pode usar a herança de esquema para emular o comportamento do esquema inferido, ou seja, um esquema explícito não precisa ser definido no gravador e será fornecido pela mesma lógica usada para inferir o esquema a partir dos tipos de coluna.

sql-post-query

Uma lista delimitada por ponto e vírgula de consultas executadas após a execução da consulta SQL principal. Por exemplo, definir as propriedades da sessão após a consulta principal. É possível incluir pontos e vírgulas nas próprias instruções, escapando-os com uma barra invertida (”;”). Os resultados/saídas dessas consultas serão suprimidos se não houver erros.

sql-pre-query

Uma lista delimitada por ponto e vírgula de consultas executadas antes da execução da consulta SQL principal. Por exemplo, definir as propriedades da sessão antes da consulta principal. É possível incluir pontos e vírgulas nas próprias instruções, escapando-os com uma barra invertida (”;”). Os resultados/saídas dessas consultas serão suprimidos se não houver erros.

Relações

Nome

Descrição

failure

A execução da consulta SQL falhou. O FlowFile de entrada será penalizado e encaminhado para essa relação

success

Criou com sucesso o FlowFile a partir do conjunto de resultados de consulta SQL.

Grava atributos

Nome

Descrição

executesql.row.count

Contém o número de linhas retornadas na consulta de seleção

executesql.query.duration

Duração combinada do tempo de execução da consulta e do tempo de busca em milissegundos

executesql.query.executiontime

Duração do tempo de execução da consulta em milissegundos

executesql.query.fetchtime

Duração do tempo de busca do conjunto de resultados em milissegundos

executesql.resultset.index

Supondo que vários conjuntos de resultados sejam retornados, o índice baseado em zero desse conjunto de resultados.

executesql.error.message

Se o processamento de um FlowFile de entrada causar uma exceção, o FlowFile será encaminhado para falha e esse atributo será definido como a mensagem de exceção.

fragment.identifier

Se a opção “Máximo de linhas por FlowFile” for definida, todos os FlowFiles do mesmo conjunto de resultados de consulta terão o mesmo valor para o atributo fragment.identifier. Isso pode ser usado para correlacionar os resultados.

fragment.count

Se a opção “Máximo de linhas por FlowFile” for definida, esse será o número total de FlowFiles produzido por um único ResultSet. Isso pode ser usado em conjunto com o atributo fragment.identifier para saber quantos FlowFiles pertencem ao mesmo ResultSet de entrada. Se o tamanho do lote de saída estiver definido, esse atributo não será preenchido.

fragment.index

Se “Máximo de linhas por FlowFile” estiver definido, então esta propriedade indica a posição do FlowFile na lista de FlowFiles de saída em que todos foram derivados do mesmo FlowFile do conjunto de resultados. Isso pode ser usado em conjunto com o atributo fragment.identifier para saber quais FlowFiles se originaram do mesmo conjunto de resultados de consulta e em que ordem os FlowFiles foram produzidos

input.flowfile.uuid

Se o processador tiver uma conexão de entrada, os FlowFiles de saída terão esse atributo definido como o valor do UUID do FlowFile de entrada. Se não houver conexão de entrada, o atributo não será adicionado.

mime.type

Define o atributo mime.type como o tipo MIME especificado pelo Record Writer.

record.count

O número de registros emitidos pelo Record Writer.