抽出変換ロード (ETL) 定義の概要

  • リリースバージョン: Xanadu
  • 更新日 2024年08月01日
  • 所要時間:8分
  • ETL 定義は、ソーステーブルからデータを抽出し、必要に応じてデータを変換して、データを 1 つ以上のターゲットテーブルにロードします。ETL 定義は、ネストされたデータ構造もサポートしています。

    データのマッピング方法を指定する ETL 定義

    データのインポートはデータソースから始まります。データソースは、抽出するデータのタイプとその場所を指定します。データは抽出された後、ステージングテーブル、またはインポートセットテーブルにロードされます。次に、ETL 定義は、ServiceNow 内の 1 つ以上のターゲットテーブルにデータをマッピングする方法を指定します。外部キーと一意のキーの制約を維持しながら、データを ServiceNow テーブルにマッピングする ETL 定義を作成できます。ETL 定義を使用したインポートプロセスの概要。

    ETL エンティティは入力データとターゲットテーブルを表します。

    ETL 定義はエンティティに基づいています。作成するすべての ETL 定義には、エンティティが関連付けられている必要があります。エンティティは入力データとターゲットテーブルを表します。
    • 入力データは、ステージングテーブルにロードされたデータです。
    • ターゲットテーブルは、データを格納する ServiceNow テーブルです。
    マッピングと操作もエンティティに基づいているため、定義を作成するときは早い段階でエンティティを作成しておくと便利です。

    次の画像は、コンピューターの ETL 定義の例を示しています。この定義には 3 つのエンティティが関連付けられています。インポートセットエンティティは、Excel ファイルからステージングテーブルにロードされる入力データを表します。インポートセットエンティティのテーブルは、[なし] に設定されます。コンピューターとディスクはターゲットエンティティです。これらは、コンピューター [sn_etl_demo_computer] とディスク [sn_etl_demo_disk] という 2 つの ServiceNow テーブルを表します。ステージングテーブルのデータが 2 つのターゲットテーブルにロードされます。コンピューター、ディスク、およびインポートセットの 3 つの ETL エンティティを示す、コンピューターの ETL 定義。

    入力エンティティ

    入力エンティティは、ステージングテーブルにロードされた抽出データを表します。入力エンティティには、インポートセットテーブルの列または (単一列モードの場合には) JSON キーを表す ETL エンティティフィールドがあります。エンティティフィールドを作成するには、[ETL エンティティ] フィールドタブで [新規] を選択します。

    次の画像は、コンピューター ETL 定義のインポートセットエンティティを示しています。インポートセットエンティティは、Excel ファイルからコンピューター [sn_elt_demo_computers_stage] ステージングテーブルにロードされた入力データを表します。インポートセットエンティティには、ステージングテーブルの各列のエンティティフィールドがあります。インポートセットエンティティには、ステージングテーブルの各列のエンティティフィールドがあります。

    ターゲットエンティティ

    ターゲットエンティティは、ServiceNow 内のターゲットテーブルを表します。次の画像は、コンピューター ETL 定義のディスクターゲットエンティティを示しています。ディスクは sn_etl_demo_disk ターゲットテーブルを表します。これには、操作を適用するためのテーブル列と一時値を表すエンティティフィールドがあります。コンピューターおよびディスクターゲットエンティティには、操作のテーブル列と一時値を表すエンティティフィールドがあります。

    各エンティティフィールドには、名前、参照またはパスフィールド、結合フィールド、および強制アクションがあります。

    参照フィールド

    あるテーブルの行に別のテーブルの行の sys_id を列の値として格納することによって、1 番目のテーブルの行が 2 番目のテーブルの行を参照している特別なフィールドです。参照は sys_id として格納されますが、データがインポートされると、値としてインポートされます。したがって、参照フィールドの場合は、参照されるテーブルの一意のフィールドの値を、インポートされたデータにマッピングすることになります。最終的に、システムは値を使用して関連レコードを検索し、sys_id を取得して、適切な列に格納します。

    たとえば、前述のディスクエンティティの sn_etl_demo_disk テーブルには、参照フィールド [コンピューター] を使用する、コンピューターへの参照があります。ただし、インポートされたデータには、コンピューターを一意に識別するために使用できるコンピューター ID のみが含まれています。したがって、ディスクエンティティでは、参照されるフィールドパス (computer.id) は、コンピューターテーブルの列も指定します。

    一意のキーに複数のフィールドがある場合は、複数のフィールドを追加してすべてのフィールド値を指定する必要があります。たとえば、次の画像では、sn_etl_demo_worker テーブルに sn_etl_demo_address テーブルへの参照があります。sn_etl_demo_address テーブルには、一意のキーとして 3 つの列 (番号、番地、および郵便番号) があります。したがって、ワーカーエンティティには一意のキー列用の 3 つのフィールドがあります。参照フィールドは、結合フィールドとしても使用できます。ワーカーエンティティには一意のキー列用の 3 つのフィールドがあります。

    結合フィールド

    ターゲットエンティティの一意のキーを指定します。システムは、結合フィールドを使用して、既存のレコードを更新するか、新しいレコードを挿入するかを決定します。結合フィールドが true で、システムが同じ結合フィールド値を持つ既存のレコードを見つけると、既存のレコードが更新されます。前に示した sn_etl_demo_disk テーブルでは、ディスクエンティティのシリアル番号列はすべてのディスクエントリに対して一意であるため、結合フィールドとして指定されます。

    強制アクション
    参照フィールドで、一意のキー値を持つ行が参照先テーブルに存在しない場合の処理を指定します。強制アクションには次のオプションがあります。
    • 参照先テーブルに新しい行を [作成] し、それをターゲット行に割り当てます。
    • 参照フィールドの値を [無視] します。参照列は空のまま保存されます。
    • 参照フィールドの値を [却下] します。ターゲットテーブルへの挿入も更新も行いません。

    データを変更する強力な変換エンジン (RTE) エンティティ操作

    エンティティ操作では、入力データをターゲットテーブルに保存する前に変更します。次の画像は、連結操作の例を示しています。コンピューターの ETL 定義では、インポートされたデータにタイプとバージョンの両方が含まれています。ただし、ターゲットテーブルには、タイプとバージョンを組み合わせた値が必要です。そのため、コンピューターエンティティは連結操作を使用してタイプとバージョンを連結します。エンティティ操作はエンティティフィールドでのみ実行できるため、この例では、インポートセットの値をコピーするために 2 つの一時フィールドが作成されます。コンピューターエンティティの RTE エンティティ連結操作。

    フィールドマッピングを指定する RTE エンティティマッピング

    エンティティフィールドと操作を使用して入力エンティティとターゲットエンティティを作成した後、各ターゲットエンティティの RTE エンティティマッピングを作成します。RTE エンティティマッピングは、入力エンティティのフィールドをターゲットエンティティのフィールドにマッピングする方法を指定します。コンピューターの ETL 定義には、2 つの RTE エンティティマッピングがあります。一方は、次の画像に示すように、入力データをコンピューターエンティティフィールドにマッピングします。もう一方は、入力データをディスクエンティティフィールドにマッピングします。インポートセットからコンピューターエンティティにデータをマッピングする方法を指定する RTE エンティティマッピング。

    ETL 定義内のネストしたデータ

    JSON データインポートでは、JSON アレイを含むレコードのインポート、または同じテーブルの複数の行をインポートするレコードのインポートが必要となる場合があります。ETL 定義は、パスにわずかな変更を加えた、次のようなペイロードをサポートします。次の JSON データにはメール情報のアレイがあります。次の 2 つの画像に示すように、入力エンティティまたはターゲットエンティティのパスを変更することで、このデータをインポートできます。
    {
          "id": "123",
          "name": "Jhon",
          "emails": [
            {
              "address": "jhon@servicenow.com",
              "type": "work"
            },
            {
              "address": "jhon@gmail.com",
              "type": "personal"
            }
          ]
        }
    
    ネストしたデータを含む入力エンティティ

    ネストしたデータの入力エンティティも入力 JSON データを表します。ネストしたデータを持たないインポートと同様に、値を表すエンティティフィールドがあります。唯一の違いは、アレイを含むパスがアスタリスク (*) で指定されていることです。次の画像は、アドレスとタイプへのパスが email[*].address と email[*].type として指定されていることを示しています。アスタリスクを使用してアレイ内の値を指定することを示す、ネストした入力データの ETL エンティティ。

    ネストしたデータを持つターゲットエンティティ

    ネストしたデータを持つターゲットエンティティも、パスがアスタリスク (*) で終わる点を除いて、通常のインポートのターゲットエンティティと似ています。アスタリスクは、エンティティをアレイとして処理するようにシステムに指示します。メールエンティティでは、ターゲットパスは email[*] として指定されます。結合フィールド、参照フィールド、および強制アクションは、通常のインポートと同様に機能します。アスタリスクを使用してアレイを指定することを示す、ネストした入力データの ETL エンティティ。

    ネストしたデータを使用した RTE エンティティマッピング

    ネストしたデータの RTE エンティティマッピングは、通常のマッピングに似ています。階層の任意のフィールドをエンティティに割り当てることができます。