2014-09-22 82 views
0

我是Talend的新人,現在我正在寫我的第一個Talend工作。Talend - 從Java應用程序中的tHashImport組件讀取值 - HowTo?

我做了以下內容:使用tHashInput

  • 商店

    • 查詢一個MySQL數據庫表(SELECT * FROM docs WHERE DocName = 'XYZ')它會返回一些記錄使用tHashOutput
    • 在內存中,這些記錄使用tHashInput
    • 從內存中取這些記錄
    • 並使用tLogRow組件記錄記錄

    我正在從Java應用這個了Talend的工作是這樣的:

    FetchDocuments mySQLConnectorJob = new FetchDocuments(); 
    mySQLConnectorJob.runJob(new String[]{}); 
    

    ,並在結束時,我想在Java應用程序中的一些方法,以某種方式獲取這些記錄,例如:

    mySQLConnectorJob.getResultSet(); 
    

    我知道我們可以使用tFileOutputDelimited組件將這些記錄存儲在CSV文件中,然後解析Java應用程序中的該文件以獲取記錄,但是如果可能的話,我想避免使用該文件。

    我的問題:

    1. 你也許知道我可以在Java應用程序中提取記錄並完成這項任務?
    2. 如果我在Talend工作上的設計不好,你能否提供一些建議如何改變它以完成任務?

    感謝, 內納德

  • 回答

    0
    1. 你可以存儲在使用tJavaFlex或tJava mySQLConnectorJob的實例對象的記錄。然後從實例對象中獲取這些值。
    +0

    嗨@Chandra Prakash,謝謝你的建議。我已經查看了作業的代碼,並且這個查詢記錄集存儲在'tMysqlInput_1Process'方法範圍內的'rs_tMysqlInput_1'變量中,所以我不知道/看到如何將它放入其他某個方法使用tJava或tJavaFlex的對象(但我也在這個方向思考)。**如果你知道我們如何做到這一點,請給我一些小例子,告訴我如何做到這一點?** – nteo 2014-09-23 07:21:25

    0

    我找到了將值從tHashInput組件值存儲到globalMap對象並在Java應用程序中獲取這些值的方法。 所以在tHashInput組件後我把tJavaRow組件。在tJavaRow組件中,我創建了一個新的HashMap,並在該映射中放入了db表記錄。之後,我將HashMap實例放入globalMap的同一個tJavaRow組件中。

    //Instantiate metadata Map 
    
    java.util.Map<java.lang.String, java.lang.Object> docMetadata = 
        new java.util.HashMap<java.lang.String, java.lang.Object>(); 
    
    //Fetch document metadata and put it in the Map 
    
    docMetadata.put("documentID", metadata1.DocumentID); 
    docMetadata.put("documentName", metadata1.DocumentName); 
    docMetadata.put("creator", metadata1.Creator); 
    
    //Put metadata in global Map 
    
    globalMap.put("docMetadata", docMetadata); 
    

    metadata1是連接名稱從tHashInput組件tJava組件。當我在Java應用程序中開始工作時,我使用Java反射獲取globalMap

    相關問題