2017-03-20 7 views
0

私は複数のSQL文を持つSQLファイルを持っており、Kettle/Pentaho PDI 6.1.0を使ってテキストファイルから読み込む必要があります。Pentaho PDI /ケトルはテキストファイルから複数の行を読み込みます

すべての文はセミコロンを使用して分離されている、しかし、それぞれの文は複数行にまたがることがあります。

CREATE TABLE Staging01 AS 
SELECT .... 
WHERE ...; 

UPDATE Staging01 
SET .... 
WHERE ...; 

私は1つの1つの文字列として各SQL文を取って、ファイルを解析する必要があります。

私はテキスト入力ファイルのステップを使用しようとしましたが、常に1行ずつデータを読み取ります。

お手伝いできますか?

ありがとうございます。

+1

は、CSV入力ステップを実行します。 を入力し、使用している区切り文字を指定します。 それは動作します。 –

答えて

0

SQL命令のすべての行をグループ化する列を追加した後に "行非正規化"を使用する必要があります(この新しいフィールドは ";"に遭遇したときに変更されます)。また、 ";"ストリーム内では区切り文字として指定しません。

0

テキストファイル入力はOKです。すべての行を単一のフィールドとして読み込みます。 FIXEDモードと十分大きなフィールドサイズを選択してlineというフィールドを作成します。右側のトリミングを有効にすることを忘れないでください。

サンプル入力がある場合は、空の行を削除します(これはTFIのデフォルト設定です)。ステートメントを構成する行を連結します。グループの最後の行はセミコロンで終わっています。 のは、ユーザー定義のJava式を使用してシーケンス_seqを作成してみましょう line.endsWith(";") ? 1 : 0

フィールド_seqは、我々の目的のためにワンオフであるので、我々はフィールドseqその結果、先に1行を覗き見する分析-Queryを使用します。 If-Field-Value-Is-Nullは、無駄なヌル値を0にして私たちに返します。

ここで、グループを集計して合計の合計を seqとしましょう。

最終的には、Group-Byフィールドとgroupフィールドを使用して、lineをスペース文字で連結することができます。

これは1つのデータフローソリューションです。あなたは確かに単純なFSMをスクリプトすることができますが、どうしてKettleを使うのですか?

関連する問題