1

私は Pentaho を初めて使用するので、私の質問は非常に初心者に聞こえるかもしれません。

CSV ファイル入力ステップとテーブル入力ステップを使用する変換を作成しました。私が従った手順:

  1. 最初に、変換プロパティにパラメーターを作成しました。パラメータbirthdateには、デフォルト値が設定されていません。

  2. テーブル入力ステップの postgresql クエリでこのパラメーターを次の方法で使用しました。

    select * from person where EXTRACT(YEAR FROM birthdate) > ${birthdate};
    
  3. CSVファイル入力ステップを使用してCSVファイルを読み込んでいます。CSV ファイルにある生年月日の値を、変換で作成したパラメーターに割り当てるにはどうすればよいですか?

    (また)

  4. パラメータを使用せずに、テーブル入力ステップで使用される SQL クエリに CSV フィールド値を直接割り当てるプロセスを教えていただけますか?
4

2 に答える 2

-1

TLDR;

以下の 3 番目の提案のように、「データベース結合」ステップを使用することをお勧めします。

参考までに最後の画像をご覧ください

最初のアイデア - 最初に求められたようにテーブル入力を使用する

変換の実行を要求するときにそのパラメーターの値を指定しない限り、そのためのパラメーターは必要ありません。CSV からデータを読み取る必要がある場合は、このアプローチでそれを行うことができます。

  • まず、CSV を読み、行に問題がないことを確認します。
  • その後、値の選択を使用して、パラメーターとして使用する列のみを保持します。
  • テーブル入力では、プレースホルダー (?) を使用してデータを配置する場所を決定し、ソース ステップから受け取る行ごとに実行するように要求します。

テーブル入力によって受信される列の順序 (選択値からの列) は、プレースホルダー (?) に使用される順序と同じであることに注意してください。これは、プレースホルダーを 1 つしか使用しない質問では問題になりませんが、Pentaho を使用する際にはそのことを念頭に置いてください。 最初のアイデア (csv > 値の選択 > テーブル入力)

2 番目のアイデア、データベース ルックアップの使用

これは、データベースに対して行われたクエリをパーソナライズできず、「キャッシュを有効にする」フラグを設定できるため、パフォーマンスが向上する可能性がある別のアプローチであり、where 句で関数を使用する必要がない場合、これは実際にはおすすめされた。 2 番目のアイデア (csv > データベース ルックアップ))

3 番目のアイデア、データベース結合を使用する

where句に関数が必要な場合は、これが私の推奨アプローチです。テーブル入力アプローチによく似ていますが、値の選択ステップをスキップして使用する列を選択し、同じ列を何度も繰り返して、クエリの結果なしで行を返す「外部結合」フラグを有効にすることができます 3 番目のアイデア (csv > データベース結合)

プロのヒント: 変換の実行が遅すぎると感じた場合は、ステップ (ドキュメントはこちら) から複数のコピーを使用してみてください。もちろん、テーブルに適切なインデックスが配置されていることを確認してください。

于 2016-08-08T14:10:18.763 に答える