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

Compartilhe este post

Share on facebook
Share on linkedin
Share on twitter
Share on email

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

Talend

Talend Studio: Usando variáveis de contexto

Olá, neste job mostraremos como definir variáveis de contexto no Talend Studio. Variáveis de contexto podem armazenar diretórios, configuração de banco de dados, enfim tipos

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

Fale conosco agora mesmo!

Fale com nossos experts

O café é por nossa conta!