コンバーターの選出ロジック

フロー定義が読み込まれたのち、各ステップの内容に応じて、適切なコンバーターが選択されます。 選択ロジックは以下の通りです。

1. ステップの nodeType 属性と一致するコンバーターを検索する

ステップには、 nodeType 属性が必ず含まれます。

{
  "nodeType" : ".v2018_2_3.SuperTransform",
  "name" : "stg_customer",
  "id" : "906b692f-8aba-4592-b073-a91832e452e3",
  "baseType" : "superNode",
  "nextNodes" : [ {
    "namespace" : "Default",
    "nextNodeId" : "e7eb3a16-c537-405b-bc55-06be5246f6e0",
    "nextNamespace" : "Right"
  } ],
}

この nodeType に一致する名称のコンバータークラスを検索し、もし一致するものがあれば、それを採用します。

class VersionMappingRegistory:
    version_converters: dict[str, type[Converter]] = {
        ".v1.LoadSql": LoadSqlConverter,
        ".v2018_2_3.SuperAggregate": SuperAggregateConverter,
        ".v2018_2_3.SuperJoin": SuperJoinConverter,
        ".v2018_2_3.SuperTransform": SuperTransformConverter,
        "unknown": UnknownConverter,
    }

2. 別バージョンのコンバーターを検索する

もし、 nodeType が完全一致するコンバーターが見つからない場合には、別バージョンのコンバーターを検索します。

nodeType の後半が一致するコンバーターがあれば、それを採用します。( .other_version.SuperTransform なら、 .v2018_2_3.SuperTransform 向けのコンバーターが選ばれます。)

3. 見つからなかった場合は未知のステップとして扱う

別バージョンのコンバーターも見つからなかった場合には、未知のステップとして変換を試みます。

内部では、未知のステップの変換用の UnknownConverter が使用されます。