Hi,
my graph looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<Graph name="test" description="" revision="1.0">
<Global>
<Property fileURL="properties.prm"/>
<Metadata fileURL="in.fmt" id="InMetadata"/>
<Metadata fileURL="out.fmt" id="OutMetadata"/>
<Connection id="CONN_1" dbConfig="mysql.cfg" type="JDBC" />
<Metadata fileURL="Lookup_Product_Types.fmt" id="LookupProductTypesMetadata"/>
<LookupTable id="lookup_product_types" dbConnection="CONN_1" metadata="LookupProductTypesMetadata" name="my lookup product types" type="dbLookup">
<attr name="sqlQuery"><![CDATA[select * from lookup_product_types where code=?]]></attr>
</LookupTable>
</Global>
<Phase number="0">
<Node id="INPUT" type="DELIMITED_DATA_READER" fileURL="input.dat" skipFirstLine="true"/>
<Node id="COPY" type="REFORMAT" transformClass="myTransform" />
<Node id="OUTPUT" type="DELIMITED_DATA_WRITER" append="false" fileURL="out.txt"/>
<Edge id="INEDGE" fromNode="INPUT:0" toNode="COPY:0" metadata="InMetadata"/>
<Edge id="OUTEDGE" fromNode="COPY:0" toNode="OUTPUT:0" metadata="OutMetadata"/>
</Phase>
</Graph>
the init() in myTranform class looks like this:
public boolean init(Properties props, DataRecordMetadata[] sourceRecordsMetadata, DataRecordMetadata[] targetRecordsMetadata) throws ComponentNotReadyException {
LookupTable lookup = getLookupTable("lookup_product_types");
if (!lookup.isInitialized()) {
lookup.init();
}
System.out.println("lookup name : " + lookup.getName());
System.out.println("lookup metadata : " + lookup.getMetadata());
....
}
the output is:
lookup name : null
lookup meta data : null
how can I pass lookup_product_types to myTransform class so that I can perform DB lookup?
any help is greatly appreciated :-)
Thanks,
albert
my graph looks like this:
<?xml version="1.0" encoding="UTF-8"?>
<Graph name="test" description="" revision="1.0">
<Global>
<Property fileURL="properties.prm"/>
<Metadata fileURL="in.fmt" id="InMetadata"/>
<Metadata fileURL="out.fmt" id="OutMetadata"/>
<Connection id="CONN_1" dbConfig="mysql.cfg" type="JDBC" />
<Metadata fileURL="Lookup_Product_Types.fmt" id="LookupProductTypesMetadata"/>
<LookupTable id="lookup_product_types" dbConnection="CONN_1" metadata="LookupProductTypesMetadata" name="my lookup product types" type="dbLookup">
<attr name="sqlQuery"><![CDATA[select * from lookup_product_types where code=?]]></attr>
</LookupTable>
</Global>
<Phase number="0">
<Node id="INPUT" type="DELIMITED_DATA_READER" fileURL="input.dat" skipFirstLine="true"/>
<Node id="COPY" type="REFORMAT" transformClass="myTransform" />
<Node id="OUTPUT" type="DELIMITED_DATA_WRITER" append="false" fileURL="out.txt"/>
<Edge id="INEDGE" fromNode="INPUT:0" toNode="COPY:0" metadata="InMetadata"/>
<Edge id="OUTEDGE" fromNode="COPY:0" toNode="OUTPUT:0" metadata="OutMetadata"/>
</Phase>
</Graph>
the init() in myTranform class looks like this:
public boolean init(Properties props, DataRecordMetadata[] sourceRecordsMetadata, DataRecordMetadata[] targetRecordsMetadata) throws ComponentNotReadyException {
LookupTable lookup = getLookupTable("lookup_product_types");
if (!lookup.isInitialized()) {
lookup.init();
}
System.out.println("lookup name : " + lookup.getName());
System.out.println("lookup metadata : " + lookup.getMetadata());
....
}
the output is:
lookup name : null
lookup meta data : null
how can I pass lookup_product_types to myTransform class so that I can perform DB lookup?
any help is greatly appreciated :-)
Thanks,
albert
-
Hi, your graph and transformation class are correct and should work properly. Only there is small bug in DBLookupTable that it doesn't take into account the table name. If you write System.out.println("lookup id : " + lookup.getId()); in your transformation you get the correct ID. -
Hi Agata,
How about lookup meta data? i am still getting "null"... i need the lookup meta data in my init() to setup the lookup key:
public boolean init(Properties props, DataRecordMetadata[] sourceRecordsMetadata, DataRecordMetadata[] targetRecordsMetadata) throws ComponentNotReadyException {
LookupTable lookup = getLookupTable("lookup_product_types");
if (!lookup.isInitialized()) {
lookup.init();
}
System.out.println("lookup name : " + lookup.getName());
System.out.println("lookup metadata : " + lookup.getMetadata());
String[] lookupKeyStr = {"lookup_product_type_code"};
RecordKey key = new RecordKey(lookupKeyStr, lookupMetadata);
key.init();
lookup.setLookupKey(key);
...
}
Thanks,
al -
Hi,
it seems that there is one more bug in DBLookupTable and metadata in lookup table definition are discarded; they are created during first get method. But you need to set record key for the metadata, which you join with lookup table (as in graphDBLookup.grf:
)// create key
String[] lookupKeyStr={"EmployeeID"};
RecordKey key=new RecordKey(lookupKeyStr,sourceMetadata[0]);
key.init();
mylookup.setLookupKey(key);
By the way for joining data with database could be better DBJoin or LookupJoin component.
Please sign in to leave a comment.
Comments 3