[Pentaho] - Criando uma Simples transformação para apagar tabelas de um esquema no Oracle

Vou mostrar abaixo uma tarefa bastante simples utilizando o Pentaho Data Integration, para fins de aprendizado de 2 componentes interessantes, o "table input" (que utilizo em praticamente todos os projetos) e o "Execute Sql Script" (usado eventualmente).

O que esta transformação vai fazer será excluir todas as tabelas de determinado esquema de usuário no banco de dados Oracle. Este mesmo script poderia ser utilizado também para exclusão de qualquer objeto, mas fica para um segundo post.

No primeiro componente "table input" configurei da seguinte forma:


  • Nome do Step: Tabelas a Excluir
  • Conexão: SPED (o nome da conexão que criei previamente);
  • SQL: Aqui fiz um select na tabela "user_tables" do dicionário do Oracle, que me retorna o nome de todas as tabelas (exceto temporárias).


No segundo compontente "Execute Sql Script" configurei assim:

  • Nome do Step: Apaga Tabelas
  • Conexão: A mesma informada no step anterior: SPED
  • SQL: Aqui coloquei o comando para apagar a tabela da base: drop table ?;
    • A interrogação se refere a um argumento que vou passar por parâmetro, informado no item "Parameters";
  • Execute for each row: Esta opção deve ser marcada para que o componente execute em um loop para cada campo retornado pelo select do componente anterior "table_input". Ou seja, vai disparar o comando "drop table" para cada ocorrência de "table_name".
  • Parameters: Aqui seleciono o campo retornado pelo componente anterior "table_name". O valor dele será substituído pela interrogação informada no bloco SQL. 
Feito isso basta agora executar a transformação. Após sua execução todas as tabelas físicas do esquema "SPED" terão sido excluídas. Possibilitando assim uma nova carga de dados.

Dúvidas ou sugestões comentem...

Comentários

ISilveira disse…
Haag, me deixe seu e-mail, e se quiser pode passart o meu pra seu amigo administrador@mellosl.com.br trabalho com projetos especificos. Grande abraço.

Silveira
Alessandro, tentei fazer como vc indicou mas deu o seguinte erro:
Couldn't execute SQL: insert into controle_carga (nome_tabela, qtd_registro) values (?, 0)
..
ERRO: erro de sintaxe em ou próximo a ","
Onde passo uma string no "parameters".
Pelo visto ele não está reconhecendo a "?" como parâmetro...
O que pode estar acontecendo?
Alexsandro Haag disse…
Você marcou a opção "Execute for each row" ?
Não tinha marcado não.
Mas marquei. Parou de dar erro, mas não fez o insert na tabela como eu queria...
Executo do próprio Pentaho, forneço o valor do parâmetro na tela "Execute Transformation" e clico em "Launch".
Nada acontece. O que devo fazer agora?
Obrigado!
Alexsandro Haag disse…
Deve ter feito, mas pode ser que tenha faltado o "commit", pois diferente da instrução que usei no exemplo a sua é uma instrução DML.

Você poderia fazer assim:
insert into controle_carga (nome_tabela, qtd_registro) values (?, 0);
commit;

Claro que fazer o "commit" para cada insert não é a opção mais otimizada. Melhor seria fazer somente no final. Mas daí neste caso talvez fosse mais interessante você utilizar outro componente, como o "table output" por exemplo.

Mas tente o commit primeiro.

Postagens mais visitadas deste blog

[Openfire] - Ajuste de horário no cliente Spark

Verificar uso de disco em partição ASM do Oracle 11g no Linux

[Kettle] - Ajuste de Memória de Utilização