はじめに
DataFlowにインデックスを作成してデータを制限すると、DataFlowを最適化できます。最適化すると、DataFlowをより効率的に実行できるようになり、「タイムアウト」エラーを排除できるようになります。インデックスを使用して最適化する
インデックスは、特定の列値を持つ行をすばやく見つけるために使用されます。インデックスがないと、MySQLは最初の行から始め、順番に読み込んで関連するデータを探します。インデックスを使用した最適化の使用事例についての詳細は、 MySQLでのインデックスの使用方法 に関する説明を参照してください。 一般的に、MySQLでのデータの結合とWHEREステートメントの使用において、インデックスの使用が必要となります。結合を実行する場合や、WHERE句を使用する場合は、結合またはフィルターを適用する列にインデックスを作成する必要があります。 次は、2つの表を結合するSELECTステートメントの例です。ON ステートメントの2つの列にインデックスを作成する必要があります。それには2つの方法があります。
- 結合を実行する変換の前に新しいSQLタイプ変換を追加する。
- 簡単な インデックス作成 を使用する。SQLを使用しなくても、表変換から1つ以上の列にすばやくインデックスを作成できます。
- 新しい変換を追加します。
- 変換タイプに[表]を選択します。
-
次に、 [インデックス作成中] タブを選択します。

- [インデックスのタイプ] を選択します。
- インデックスを適用する列を選択します。
- [終了] をクリックします。
その他の最適化
MySQLでのインデックス作成では、DataFlowを必要な範囲で常に最適化できるわけではありません。DataFlowの最適化には、次のような方法も使用できます。- DataFlowに取り込む列にフィルターを適用する。大規模なDataSetでは多数の列があり、不要な列が含まれる場合があります。 [入力DataSet] セクションのDatSetをクリックすると、DataFlowに取り込まれる列を制限できます。
-
データにフィルターを適用する。最も一般的な方法は、データフィルターを使用する方法です。例:
“ SELECT
date,value,seriesFROM input_dataset_1 WHERE YEAR(date) = YEAR(CURRENT_DATE()) “ -
GROUP BY機能を利用する。データにフィルターを適用するときに、元のデータで別の列に分割されているため、行が重複することがあります。値列を集計してから残りの列にGROUP BYを適用すると、行数をまとめることができます。最も一般的な集計はSUMです。次に例を示します。 “ SELECTDate,Series, SUM(value) AS ‘value’ FROM input_dataset_1 GROUP BYDate,Series“ -
複数の
JOINの変換がある場合は、それらを複数の変換に分割できます。例: “ SELECT a.column,a.column4, b.column2,b.column5,c.column6, c.column3FROM input_dataset_1 LEFT JOIN input_dataset_2 b ON a.column4= b.column2LEFT JOIN input_dataset_3 c ON b.column5= c.column3“ -
変換を2つの変換に分割することもできます。例:
Transform 1
“ SELECT a.
column,a.column4, b.column2,b.column5FROM input_dataset_1 LEFT JOIN input_dataset_2 b ON a.column4= b.column2“ Transform 2 “ SELECT a.column,a.column4, a.column2,a.column5,c.column6, c.column3FROM transform_data_1 a LEFT JOIN input_dataset_3 c ON a.column5= c.column3“