30日間の無料評価版をお試しいただけます。

 

前述の項目で紹介したメソッドの他に、AbstractETLRowStepAbstractETLCachedStepにより部分的に実装されたYellowfinのステップAPIは、いくつかのヘルパーメソッドを提供します。大部分は便宜メソッドですが、上書きされることになるその他のメソッドもあります。APIはまた、処理の様々な段階にフックを提供します。例えば、ロウ(行)ステップは、ステップが終了する前に追加処理を行うため、preEndRows()を上書きすることができます。

javadocにはメソッドの完全な一覧がありますが、こちらでは重要な項目のみを紹介します。以下のようなカテゴリーに分割します。

 

 

インプット/アウトプットメソッド

これらのメソッドは、インプット/アウトプットステップとフローを処理します。これは、ステップ実行中の結果のみを返します。これはつまり、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)

フローUUIDに基づき、接続されたインプット/アウトプットステップを取得するメソッドです。

 

 

 

フィールドメソッド

ステップのフィールドを処理するメソッドです。これは、デフォルトと、アウトプットメタデータフィールドを含みます。フィールドの追加/削除のような操作メソッドを利用することができます。

メソッド説明

public List<ETLStepMetadataFieldBean> getMetadataFields(String outFlowUuid)

指定されたアウトプットflowUUIDのアウトプットメタデータフィールドを返すメソッドです。outFlowUUIDがnullの場合、デフォルトメタデータフィールドを返しません。
public List<ETLStepMetadataFieldBean> getDefaultMetadataFields()すべてのデフォルトメタデータフィールドを返すメソッドです。APIには、fieldUUIDをキーとして、フィールドUUIDとそのフィールドだけをマップとして取得する他の便宜メソッドがあります。
protected boolean isGeneratedField(ETLStepMetadataFieldBean field)これは、非常に有効なメソッドです。これは、パラメーターが生成されたデフォルトメタデータフィールドの場合にtrueを返します。

public ETLStepMetadataFieldBean addNewGeneratedField(ETLStepMetadataFieldBean field, String optionKey)

これは、新規フィールドのlinkTypeを含む新規デフォルトメタデータフィールドを作成します。また、指定されたオプションキーとともにステップをオプションを作成し、その値をフィールドのUUIDとして設定します。このメソッドはfieldUUIDを生成するため、パラメーター変数に設定されているものを上書きます。メソッドは、新しく構築され、リンクされたフィールドを返します。LinkTypeやlinkFieldUUIDの設定のような高度なオプションには、addGeneratedField()が使用される場合もあります。既存のデフォルトメタデータフィールドを置き換える、その他の便宜メソッドもあります。javadocで、replaceDefaultField()、restoreReplacedField()、isReplacementField()を参照してください。
public void removeDefaultMetadataField(String fieldUUID)既存のデフォルトメタデータフィールドを削除するために使用するメソッドです。しかし、これは不可逆的にステップを破損する恐れがあるため、インプットステップからのデフォルトフィールド削除に使用するには危険です。

 

protected void excludeDefaultField(String fieldUUID)

こちらのフローを使用して、フローからデフォルトメタデータフィールドを削除します。

これは、デフォルトメタデータフィールドが、ステップのアウトプットメタデータフィールドに含まれるのを防ぎます。このフィールド内のデータを、次のステップで使用することはできません。しかし、データは内部処置に使用することができ、他のフィールドに出力することができる場合もあります。例えば、テキストから数値へのデータ型変換ステップは、元のテキストフィールドを削除し、変換された数値フィールドと置き換えます。

protected void includeDefaultField(String fieldUUID,Integer position)こちらのメソッドを使用して、フローにデフォルトメタデータフィールドを含めます。これは、指定された位置(0から始まる)のフィールドを復元します。

 

public Map<String, String> getDefaultToInputFieldMap()

public Map<String, String> getInputToDefaultFieldMap()

デフォルトメタデータフィールド(デフォルトからインプット)のソースと、インプットメタデータフィールド(インプットからデフォルト)のターゲットを取得するために使用するメソッドです。

 

 

構成メソッド

ステップオプションを処理するメソッドであり、特にこれらの追加や取得を行います。オプションを削除する唯一の方法は、それをgetValidatedStepOptions()で有効化することであり、それはこちらのステップで実装しなくてはいけません。

メソッド説明
public String getStepOption(String optionKey)

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)

ファイルやCLOBを参照するステップオプションを取得するために使用するメソッドです。これらのオブジェクトは、Yellowfinリポジトリデータベースのテーブルから取得されます。

 

public void addStepOption(String optionKey, String optionValue)ステップの構成に新規ステップオプションを追加するメソッドです。オプションキーと値は、Yellowfinリポジトリデータベースに保存されます。

public void parseData(Map<String, Object> data)

フロントエンドからインプットを有効化し、変換するために使用するメソッドです。ステップの設定ユーザーインターフェイスは、パラメーターオブジェクトを構成するParameterPanelCollectionにより表されます。これらは、テキストボックスやドロップダウンのような、基礎的な構築ブロックです。field-matchやfile-inputのような、より複雑なパラメーターclassもあります。パラメーターからのインプットデータは、ステップオプションとして保存する前に解析しなくてはいけません。例えば、field-matchパラメーターは、一致するフィールドと、除外されたフィールドの一覧を別々に返します。これらを別々のステップオプションとして保存するために、parseData()はデータ内の対応する入力を編集し、元に戻さなくてはいけません。以下に例を示します。

@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 ETLStepResult getFreshDataPacket(String outFlowUuid)

データのロウ(行)は、データパケットを使用してステップ間で送信することができます。これは、後から設定が必要な空のパケットを返すメソッドです。これは主に、キャッシュステップで使用されます。フレームワークは、ロウ(行)ステップ処理中に、内部にデータパケットを作成します。

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)

処理されたデータパケットをアウトプットステップに送信するために使用するメソッドです。データパケットは、どのアウトプットに行けばよいのかを把握しているため、これを指定する必要がありません。メソッドは、ETLExceptionInterruptedEcceptionをthrowします。これらは、フレームワークに使用されるため、こちらのメソッドを使用するすべてのコードは、これらの例外をそのままthorwしなくてはいけません。さもなければ、フレームワークへの重要なメッセージは失われます。

 

 

 

エラー制御メソッド

APIは、いくつかのエラー制御メソッドを提供します。処理エラーは、ETLExceptionのインスタンスにラップされなくてはいけません。

ロウ(行)ステップでのエラー制御は単純です。processWireDeta()は、ETLExceptionをthrowし、設定されたエラー閾値にカウントされます。キャッシュステップのエラー制御は、もう少々複雑です。prcessEndRows()からthrowされる任意の例外は、データトランスフォーメーションプロセス失敗の原因になります。エラー閾値を使用するためには、キャッシュステップは処理エラーをcatchし、ステップ内のエラーコレクションに追加しなくてはいけません。

エラー制御のメソッドは、以下の通りです。

メソッド説明
public void throwUnhandledETLException(Throwable e)エラー制御ができない時にETLExceptionをthrowするメソッドです。このメソッドとともに渡されるthrowableは、既に存在しない限りETLException内でラップされます。また、存在する場合は、そのままthrowされます。

 

public ETLException getETLException(String message)

特定のメッセージを含むETLExceptionのインスタンスを取得する便宜メソッドです。メッセージはテキストString、またはApplicationResourceキーになり、その場合は、ApplicationResources.properties内に存在していなくてはいけません。

 

protected void addError(ETLException e)

ステップ実行中のエラーを記録するメソッドです。エラー追加後、ステップがエラー閾値を超過しているかどうか確認します。ETLStepErrorThresholdExceededExceptionがある場合は、これをthrowします。これは、キャッシュステップ実装中に有効になることが多いメソッドです。フレームワークはロウ(行)ステップのエラーを制御し、ロウ(行)ステップでは、単純にETLExceptionをthrowしなくてはいけません。

 

 

 

その他有効なメソッド

その他、有効なメソッドをいくつか紹介します。

メソッド説明

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()

このステップに出力されるロウ(行)の最大数を返すメソッドです。これは、比較的少数のロウ(行)を処理するため、特にプレビューモードに有効です。フレームワークは、ステップからのロウ(行)出力数を制限するために、ロウ(行)制限を使用しますが、ステップをプレビュー用に効率化するために使用することができます。データベースからのインプットや、外部APIの呼び出しのような比較的遅い操作は、ソースで小さめのデータセットに制限された場合、処理が早くなり、メモリ消費を抑えられる場合があります。例えば、SELECT文は制限を設定することができます。