“DBLink” de Greenplum para Oracle

No post anterior, temos uma configuração de um Database Link onde a partir de uma BD Oracle consultamos dados em Greenplum, e ao contrário, há solução?

Sim, pelo menos já conheço duas. A primeira é através de um driver JDBC.

Para esta utilização serão utilizados os seguintes recursos:

1) Drive JDBC: O drive JDBC deve ser obtido através do site da Oracle, de acordo com a versão da BD Oracle que será alvo e com a versão do JDK.

2) Classe Java para acesso:

– Criar uma diretoria para colocar a classe e jar (jdbc driver), por exemplo:

mkdir -p /usr/local/gp_to_orcl /usr/local/gp_to_orcl/pivotal/au/greenplum/externaltable

– Copiar o InvokeQuery.java (conteúdo abaixo) para /usr/local/gp_to_orcl/pivotal/au/greenplum/externaltable

package pivotal.au.greenplum.externaltable;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class InvokeQuery
{
private String url;
private String username;
private String passwd;
private String columnList;
private String delimeter;
private String driverClassName;
private String query;
private Connection conn = null;

public InvokeQuery()
{
}

private void run (String[] args) throws SQLException
{
driverClassName = args[0];
url = args[1];
username = args[2];
passwd = args[3];
delimeter = args[4];
columnList = args[5];
query = args[6];

Statement stmt = null;
ResultSet rset = null;

String[] columns = splitColumns(columnList);

try
{
conn = getConnection(driverClassName);
stmt = conn.createStatement();
rset = stmt.executeQuery(query);
int size = columns.length;
while (rset.next())
{
int i = 0;
// go through columns and output data
for (String column: columns)
{
i++;
if (i < size)
{
System.out.print(rset.getString(column) + "" + delimeter);
}
else
{
System.out.print(rset.getString(column) + "\n");
}
}
}

}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
if (rset != null)
{
rset.close();
}

if (stmt != null)
{
stmt.close();
}

if (conn != null)
{
conn.close();
}
}
}

private String[] splitColumns (String columArray)
{
return columArray.split(",");
}

private Connection getConnection(String driverClass) throws SQLException, ClassNotFoundException
{
Class.forName(driverClassName);
conn = DriverManager.getConnection(url, username, passwd);
return conn;
}

public static void main(String[] args) throws Exception
{
InvokeQuery invokeQuery = new InvokeQuery();

if (args.length != 7)
{
System.out.println("Less then 7 arguments provided, usage as follows");
System.out.println("\nUsage: \n\n\tjava pivotal.au.greenplum.externaltable.InvokeQuery \n”);
System.exit(-1);
}

invokeQuery.run(args);

}

}

– Copiar o ojdbc6.jar (Driver JDBC Oracle) para /usr/local/gp_to_orcl
– Compilar InvokeQuery.java

cd /usr/local/gp_to_orcl/pivotal/au/greenplum/externaltable
javac InvokeQuery.java

– Criar um JAR File

cd /usr/local/gp_to_orcl/
jar cvfe jdbc_external.jar MyMainClass pivotal/au/greenplum/externaltable/InvokeQuery.class

3) Criar um “executável”:

vi /user/local/gp_to_orcl/run.sh

Conteúdo: Atenção aos parametros (servidor, SID, colunas, statement e etc)

export CLASSPATH=/usr/local/gp_to_orcl/ojdbc6.jar:/usr/local/gp_to_orcl/jdbc_external.jar
java pivotal.au.greenplum.externaltable.InvokeQuery “oracle.jdbc.OracleDriver” “jdbc:oracle:thin:@greenplum.m04m.com:1521/orcl” “scott” “oracle” “|” “empno,ename,deptno” “select empno,ename,deptno from emp

4) Criar uma External Web Table:

CREATE EXTERNAL WEB TABLE oracle_emps
(empno int, ename character varying(20), deptno int)
EXECUTE ‘/usr/local/gp_to_orcl/run.sh‘ on host
FORMAT ‘TEXT’ (DELIMITER ‘|’);

Com estes recursos todos agora já é possível executar o select ao Greenplum a partir do Oracle:

Screenshot

Baseado no post: theblasfrompas.blogspot.pt/2013/09/greenplum-command-based-web-external.html

Um comentário em ““DBLink” de Greenplum para Oracle

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s