Talend: Definição de variáveis via globalMap

Compartilhe este post

Nós já demonstramos como utilizar variáveis de contexto aqui, e como obter melhores resultados utilizando grupos de contexto e contextos de execução aqui. Hoje irei demonstrar o uso de variáveis globais.

Variáveis globais, no Talend, são variáveis armazenadas em um local denominado globalMap. Através do globalMap podemos definir variáveis de basicamente qualquer tipo e em qualquer momento durante a execução de um job. As variáveis globais são definidas seguindo o conceito key/value.

Mas por quê utilizar variáveis globais e não variáveis de contexto? Eis alguns motivos:

– Variáveis globais são dinâmicas, variáveis de contexto devem ser declaradas previamente.

Não é possível declarar variáveis de contexto programaticamente, em tempo de execução. Com as variáveis globais fica fácil definir variáveis em tempo de execução, dando maiores possibilidades ao desenvolvedor.

– Variáveis de contexto são acessíveis “fora” do job.

Quando você define uma variável de contexto, ela tem um comportamento de “parâmetro de execução”, ou seja, quem executa o job pode alterar o conteúdo das variáveis de contexto, podendo assim alterar o comportamento do job.

E quando não declarar/utilizar variáveis via globalMap?

– Quando você precisar de variáveis compartilhadas em todo o repositório.

– Quando o conteúdo pode ou deve ser parametrizado. Por exemplo, alterar o login de acesso a um database, especificar uma data seleção dos dados, etc.

Mão na Massa

Vamos criar um job simples que executa uma query para obter o MAX() de uma coluna e projeta o resultado. Vamos supor que você necessite do maior ID ou a data da última transação armazenada para então executar uma nova query selecionando os dados com o valor obtido anteriormente, por exemplo. Este é um cenário típico em processos de carga incremental.

etl_globalMap

1. No primeiro componente – nomeado “DW” – é executada uma query simples para obter o MAX() de uma coluna;

2. No tSegGlobalVar_1 armazenamos o valor obtido:

etl_globalMap_setGlobalVar

Simples assim, definimos uma variável denominada “MAX_ID” (Key) e atribuímos o valor retornado na query do passo anterior (Value). Observe que row1 é o nome da linha que traz o resultado da query anterior e que ID é o alias da coluna que definimos no schema do componente anterior.

3. No tJava_1 à frente imprimimos o conteúdo da nova variável criada, assim:

System.out.println( (Long) globalMap.get(“MAX_ID”) );

Destaquei em negrito o que realmente importa. Utilizamos o método get() do globalMap para retornar o conteúdo de qualquer variável, passando como argumento o nome da mesma, neste caso “MAX_ID”.

Aqui é importante um detalhe: Como você pode armazenar qualquer tipo de objeto no globalMap, o método get() não tem como “saber” o tipo do retorno da chave (Key) especificada e por isso ele retorna um Object, que é um tipo que “aceita qualquer coisa”. Você precisa especificar o que aquele método está retornando naquele momento e por isso acrescentamos um (Long) antes de mais nada, que é exatamente o mesmo tipo que definimos no schema do primeiro componente onde executamos o select.

4. Por fim selecionamos os dados na query executada no componente “ORACLE” aplicando o mesmo conceito, e então partimos para a carga dos dados. A query fica assim:

“SELECT
*
FROM TABELA_ORIGEM
WHERE ID > ” + (Long)globalMap.get(“MAX_ID”)

Apenas concatenamos a variável à query e voilà!

Um abraço!

Assine nossa newsletter

Fique por dentro das novidades mais recentes sobre o Talend e aprenda com nossos experts

Leia outros posts do nosso blog

Quer acelerar a tomada de decisão com dados de qualidade?

Fale conosco agora mesmo!

Fale com nossos experts

O café é por nossa conta!