我是Pentaho的新手,我正在運行一個轉換,其中我首先查詢數據庫以獲取id列表,然後使用列表的where子句中的列表查詢另一個數據庫的sql語句。即Pentaho在sql中插入一個列表,其中子句
其中ORDER_ID在({list}裏)
如何指定變量(ID列表),然後將它們penthao添加到查詢語句中的表輸入?
謝謝,
我是Pentaho的新手,我正在運行一個轉換,其中我首先查詢數據庫以獲取id列表,然後使用列表的where子句中的列表查詢另一個數據庫的sql語句。即Pentaho在sql中插入一個列表,其中子句
其中ORDER_ID在({list}裏)
如何指定變量(ID列表),然後將它們penthao添加到查詢語句中的表輸入?
謝謝,
有一些方法可以做到這一點,但他們不是很有效。除非您的查詢非常大,否則我認爲您最好使用而不是'where order_id in {list}'過濾器並使用流查找步驟獲取所需的字段。
使用動態SQL加盟:
您可以使用表輸入的組合 - >集團通過 - >修改Java腳本的價值 - >動態SQL加盟。
表輸入將根據需要選擇ID列表。
在集團通過您可以彙總ID列表到一個逗號分隔的字符串(
Name: "list" (the name of output field with list of IDs)
Subject: name of the field with IDs from your Table Input,
Type: "Concatenate strings separated by ,"
)
在修改Java腳本值您可以定義XML文本,包括您的SQL查詢(如果您不介意將查詢保留在一行中,則可以使用String來代替{list})。
var sqlQuery = <>
SELECT
*
FROM table_name
WHERE
order_id IN ({list})
</>
如果像這樣使用,然後{list}
將自動與list
變量(或列的值)的值取代。但是您需要在查詢中跳過<和>個字符。 或者,您可以把您的查詢在CDATA:
var sqlQuery = <>
<![CDATA[
SELECT
*
FROM table_name
WHERE
order_id IN ({list})
]]>
</>
你不需要逃避<>字符,但你需要自己算賬替代list
:sqlQuery = sqlQuery.toString().replace("{list}", list, "g")
最後,你必須指定你的sqlQuery變量在JS步驟的「Fields」表中,這樣它就會作爲一個新字段添加到每一行中。
然後在動態SQL加入您需要指定SQL field name
中的sqlQuery字段。在Template SQL
中,您必須放置與您生成的查詢具有相同數據類型的任何查詢,例如像這樣:
SELECT * FROM table_name WHERE 1=0