...
- インプット/アウトプットメソッド:ステップのインプットやアウトプットフローを制御します。
- フィールドメソッド:ステップのデフォルト、またはアウトプットメタデータフィールドを処理します。
- 構成メソッド:ステップのオプションを構成するメソッドです。
- データ処理メソッド:ステップの実行中にデータ操作に使用するメソッドです。
- エラー制御メソッド:エラーを制御するために使用します。
- その他のメソッド:ステップ実装に関連する興味深いメソッドをいくつか紹介します。
インプット/アウトプットメソッド
これらのメソッドは、インプット/アウトプットステップとフローを処理します。これは、ステップ実行中の結果のみを返します。これはつまり、sestupGeneratedFields()、またはgetValidatedStepOptions()に呼び出されても、何も返さないことを意味します。validate()やprocessEndRows()のようなメソッドは、ステップ実行中に呼び出され、安全に使用することができます。
...
public Set<String> getInputFlowUuids()
public Set<String> getOutputFlowUuids()
...
すべてのインプット/アウトプットフローUUIDを取得するメソッドです。多くのステップは複数のインプットやアウトプットを持たないため、getFirstInputFlow()や、getFirstOutputFlow()の方が有効な場合もあります。
...
public ETLStep getInputStep(String inFlowUuid)
public ETLStep getOutputStep(String outFlowUuid)
...
フィールドメソッド
ステップのフィールドを処理するメソッドです。これは、デフォルトと、アウトプットメタデータフィールドを含みます。フィールドの追加/削除のような操作メソッドを利用することができます。
...
public List<ETLStepMetadataFieldBean> getMetadataFields(String outFlowUuid)
...
public ETLStepMetadataFieldBean addNewGeneratedField(ETLStepMetadataFieldBean field, String optionKey)
...
protected void excludeDefaultField(String fieldUUID)
...
こちらのフローを使用して、フローからデフォルトメタデータフィールドを削除します。
これは、デフォルトメタデータフィールドが、ステップのアウトプットメタデータフィールドに含まれるのを防ぎます。このフィールド内のデータを、次のステップで使用することはできません。しかし、データは内部処置に使用することができ、他のフィールドに出力することができる場合もあります。例えば、テキストから数値へのデータ型変換ステップは、元のテキストフィールドを削除し、変換された数値フィールドと置き換えます。
...
public Map<String, String> getDefaultToInputFieldMap()
public Map<String, String> getInputToDefaultFieldMap()
...
構成メソッド
ステップオプションを処理するメソッドであり、特にこれらの追加や取得を行います。オプションを削除する唯一の方法は、それをgetValidatedStepOptions()で有効化することであり、それはこちらのステップで実装しなくてはいけません。
...
YellowfinリポジトリデータベースにStringとして保存されたステップオプションを返すメソッドです。APIは、オプションを特定のデータ型に変換する便宜メソッドを提供します。例えば、getStepOptionValueJSONObject()はオプションをcom.google.gson.JsonObjectに変換し、getStepIntegerValue()は、Integerへ変換します。
...
public byte[] getFile(String optionKey)
public String getFileName(String optionKey)
public String getText(String optionKey)
...
public void parseData(Map<String, Object> data)
フロントエンドからインプットを有効化し、変換するために使用するメソッドです。ステップの設定ユーザーインターフェイスは、パラメーターオブジェクトを構成するParameterPanelCollectionにより表されます。これらは、テキストボックスやドロップダウンのような、基礎的な構築ブロックです。field-matchやfile-inputのような、より複雑なパラメーターclassもあります。パラメーターからのインプットデータは、ステップオプションとして保存する前に解析しなくてはいけません。例えば、field-matchパラメーターは、一致するフィールドと、除外されたフィールドの一覧を別々に返します。これらを別々のステップオプションとして保存するために、parseData()はデータ内の対応する入力を編集し、元に戻さなくてはいけません。以下に例を示します。
...
title | 例 |
---|
Code Block | ||||
---|---|---|---|---|
| ||||
@Override
public void parseData(Map<String, Object> dataMap) {
for(String key: dataMap.keySet()) {
if ("MATCH_FIELDS".equals(key) && dataMap.get(key) != null) {
// Fields are matched using "from" and "to" elements in the data string.
// Convert [{from=uuid1, to=uuid2}, {from=uuid3, to=uuid4}] to
// LEFT_FIELD0=uuid1, RIGHT_FIELD0=uuid2,
// LEFT_FIELD1=uuid3, RIGHT_FIELD1=uuid4
List<?> allJoins = (List<?>) dataMap.get(key);
int i = 0;
for (Object joinObj : allJoins) {
if (joinObj instanceof Map) {
@SuppressWarnings("unchecked")
Map<String, String> join = (Map<String, String>)joinObj;
dataMap.put("LEFT_FIELD"+i, join.get("from"));
dataMap.put("RIGHT_FIELD"+i, join.get("to"));
i++;
}
}
}
}
// This shouldn't be saved as a StepOption
dataMap.remove("MATCH_FIELDS");
} |
解析後、ステップオプションに保存しない入力は、マップから削除しなくてはいけません。
データ処理メソッド
ステップ実行中のデータ操作に使用するメソッドです。
...
データのロウ(行)は、データパケットを使用してステップ間で送信することができます。これは、後から設定が必要な空のパケットを返すメソッドです。これは主に、キャッシュステップで使用されます。フレームワークは、ロウ(行)ステップ処理中に、内部にデータパケットを作成します。
...
public Wire<Object, String> getWireForField(String fieldUuid)
...
フィールドUUIDに対応するwireを取得するメソッドです。これは、フレームワークによりすべてリンクされているため、インプット、デフォルト、またはアウトプットメタデータフィールドになります。
wire取得後、以下のメソッドを使用することができます。
- getValue()は、wire上の値を取得します。
- removeValue()は、値を取得し、これをwireから削除します。
- send(Object value)は、wireにパラメーターオブジェクトを配置します。
...
protected void beginInternalTransmission(Object[] data, List<String> fields)
...
フィールドで指定されたメタデータフィールドに対応するデータのロウ(行)の送信を開始するメソッドです。フィールドは通常インプットメタデータフィールドであり、データと一致するよう適切に調整されています。しかし、データを生成するステップ(例:データベースインプットステップ)は、インプットメタデータフィールドを持ちません。デフォルトメタデータフィールドはその後、適切に調整され、こちらのメソッドに渡されなくてはいけません。
インプット、デフォルト、アウトプットメタデータフィールドの順序はすべて異なる可能性があるため、伝送が不可欠です。Wireはこれらのリンクをサポートし、伝送はこれらの事前に計算されたマッピングを使用して、インプットからデフォルト、アウトプットと正確なフィールドへデータを送信します。
...
protected ETLStepResult endInternalTransmission(ETLStepResult packet)
...
ステップが、beginInternalTransmission()から送信されたデータ処理を終了した後に呼び出されるメソッドです。データは内部wireから削除され、getFreshDataPacket()を使用して取得されたアウトプットデータパケット内の配列に配置されます。
データは、オーバーロードされたメソッド(endInternalTransmission(ETLStepResult, boolean))を使用して伝送の最後にwire上に保持されます。これは、処理されたデータを他のアウトプットで利用可能にしなくてはいけない、複数のアウトプットステップに有効です。
...
protected void emitData(ETLStepResult dataPacket)
...
エラー制御メソッド
APIは、いくつかのエラー制御メソッドを提供します。処理エラーは、ETLExceptionのインスタンスにラップされなくてはいけません。
ロウ(行)ステップでのエラー制御は単純です。processWireDeta()は、ETLExceptionをthrowし、設定されたエラー閾値にカウントされます。キャッシュステップのエラー制御は、もう少々複雑です。prcessEndRows()からthrowされる任意の例外は、データトランスフォーメーションプロセス失敗の原因になります。エラー閾値を使用するためには、キャッシュステップは処理エラーをcatchし、ステップ内のエラーコレクションに追加しなくてはいけません。
エラー制御のメソッドは、以下の通りです。
...
public ETLException getETLException(String message)
...
protected void addError(ETLException e)
...
その他有効なメソッド
その他、有効なメソッドをいくつか紹介します。
...
public Map<String, String> onCopy(Map<String, String> uuidMap)
...
ステップのコピー中に呼び出されるメソッドです。これは、ステップの外部依存関係をコピーする方法として使用することを目的としています。
パラメーターは、stepUUID、fieldUUID、flowUUID、metadataUUID、groupUUIDなどを含む、ステップ内のすべてのUUIDのoldUUIDからnewUUIDへのマッピングを持ち、これらはコピーされます。
ステップは、更新しなくてはいけないステップオプション(optionKey、optionValue)のマップを返す選択をすることができます。これは、コピーされたエンティティに関連する複雑なオプションを持つステップに使用されます。null値とともに返される任意のオプションキーは削除されます。
このメソッドが呼び出される場合、ステップに設定されたエンティティは新しくコピーされた新しいものではなく、古いエンティティになります。
...
public void onDelete()
...
public long getRowLimit()
...