0

I have setup a data transfer job to get the data from Oracle Database and put the data in Google Bigquery.

Job flow: ExecuteSQL -> AvroToJson -> PutBigQueryBatch

I have transfered all tables which does not have BLOB object in it. When I run this job for the table with BLOB object, it throws the following error at ExecuteSQL processor:

ExecuteSQL failed to process session due to oracle.sql.BLOB.free()V; 
Processor Administratively Yielded for 1 sec: java.lang.AbstractMethodError: oracle.sql.BLOB.free()V

This answer suggests to use ExecuteSQL processor to get BLOB data from Oracle, but I am using ExecuteSQL and it is showing this error. What am I doing wrong in using the ExecuteSQL?

Configuration:

  1. Source DB: Oracle 11g Release 2
  2. Source JDBC driver: source
  3. Destination: Bigquery
  4. Active services for the job: DBCPConnectionPool, GCPCredentialsControllerService

DBCPConnectionPool configuration:

  1. Database Connection URL: jdbc:oracle:thin:@IP:host:sid
  2. Database Driver Class Name: oracle.jdbc.driver.OracleDriver
  3. Database Driver Location(s): C:\Users\91918\Desktop\OJDBC-Full\ojdbc5.jar,C:\Users\91918\Desktop\OJDBC-Full\ojdbc6.jar,C:\Users\91918\Desktop\OJDBC-Full\ons.jar,C:\Users\91918\Desktop\OJDBC-Full\orai18n.jar,C:\Users\91918\Desktop\OJDBC-Full\simplefan.jar,C:\Users\91918\Desktop\OJDBC-Full\ucp.jar,C:\Users\91918\Desktop\OJDBC-Full\xdb6.jar
  4. Database User: username
  5. Password: password
  6. Validation query: SELECT 1 FROM DUAL

ExecuteSQL configuration:

  1. Database Connection Pooling Service: DBCPConnectionPool
  2. SQL select query: select * from schema.table
  3. Max Wait Time: 0.1 sec
  4. Normalize Table/Column Names: False
  5. Use Avro Logical Types: False
  6. Compression format: none
  7. Default decimal precision: 10

Oracle schema:

WAFERMAPID                CHAR(16)      
CDOTYPEID                 NUMBER(10)    
CHANGECOUNT               NUMBER(10)    
MAPCONVERTID              CHAR(16)      
ISFROZEN                  NUMBER(10)    
NAME                      VARCHAR2(120) 
WAFERMAP                  BLOB         

My intention with the data:

Read the binary of BLOB object as string, put that in the Bigquery.

Information regarding BLOB: The BLOB object is a GZ file. Example: file.txt.gz. The file inside the GZ contains a text file with text in XML. Reading the text inside the file and put that in Bigquery would be the end result.

1 Answer 1

2

I think it's because you have ojdbc5.jar in your "Database Driver Location(s)" property, so if the driver class exists in there it's probably the one getting loaded, in which case the free() method doesn't exist (check this NB bug for more details). Remove that and it should use the ojdbc6.jar to load the class and hopefully that error will go away.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.