すべてのプロダクト
Search
ドキュメントセンター

DataWorks:Aviator 関数を利用したフィルターのベストプラクティス

最終更新日:Mar 31, 2025

DataService Studio では、関数を作成し、単一の関数または同じタイプの複数の関数を API に関連付け、関数を API のフィルターとして使用できます。このトピックでは、Aviator 関数の構文に基づいて特定のロジックを持つ Aviator 関数を作成する方法の例を示します。

シナリオ

  • 関数を API のプリフィルターとして使用する場合、API の呼び出し時に、関数は API のリクエストパラメーターを前処理します。

  • 関数を API のポストフィルターとして使用する場合、API の呼び出し時に、関数は API のレスポンスを処理して再構築します。

関連情報

  • 関数の作成、テスト、送信、公開、削除、移動、および複製方法の詳細については、「関数の管理」、「関数のテスト、公開、および使用」をご参照ください。

  • API のプリフィルターまたはポストフィルターとして関数を使用する方法の詳細については、「Aviator 関数の作成」をご参照ください。

  • Aviator 関数の構文の詳細については、「関数の構文」をご参照ください。

関数の入力パラメーター

説明

Aviator 関数のコードのデフォルト変数の名前は、$0 です。これは、Aviator 関数の入力全体を示します。

  • シナリオ 1: Aviator 関数を API のプリフィルターとして使用します。

    API のリクエストパラメーターとリクエストパラメーターの値は、Aviator 関数の入力全体として使用されます。入力は単層 JSON 形式です。例:

    ## user_id はリクエストパラメーターです。
    ## user_id = (0,1,2) は、API の呼び出し時にリクエストパラメーターに複数の値が渡されることを示します。
    {
      "user_id": [0,1,2]
    }
  • シナリオ 2: Aviator 関数を API のポストフィルターとして使用します。

    API のレスポンスは、Aviator 関数の入力全体として使用されます。入力は多層 JSON 形式です。例:

    ## 返されるデータには、user_id、city、tags の 3 つの列が含まれています。
    ## API の呼び出し後、条件を満たす 3 つのデータエントリが返されます。行のコードを確認してください。
    {
      "data": {
        "totalNum": 3,
        "pageSize": 10,
        "rows": [
          {
            "user_id": 2,
            "city": "BJ",
            "tags": "B,D,dongcs,ccccc"
          },
          {
            "user_id": 3,
            "city": "SH",
            "tags": "A,C,D,F"
          },
          {
            "user_id": 1,
            "city": "HZ",
            "tags": "A,B,C"
          }
        ],
        "pageNum": 1
      },
      "errCode": 0,
      "requestId": "0bb211c516357674333185698eb07b",
      "errMsg": "success",
      "apiLog": null
    }

Aviator 関数の使用

シナリオ 1: Aviator 関数を API のプリフィルターとして使用します。例:

  • 例 1: クライアントから渡されたリクエストパラメーターの値を変更するために Aviator 関数が呼び出されます。

    • Aviator 関数:

      ## リクエストパラメーター user_id に対してクライアントから渡された元の値は 1 です。
      ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 2 になります。
      if $0.user_id == 1
      {
          $0.user_id = $0.user_id + 1;
      }
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
          "user_id": 1
      }
      
      ## 出力:
      {
        "user_id": 2
      }
  • 例 2: クライアントから値が渡されていないリクエストパラメーターに値を割り当てるために Aviator 関数が呼び出されます。リクエストパラメーターがオプションで、リクエストパラメーターの値が使用できない場合、リクエストパラメーターに値を割り当てることができます。

    • Aviator 関数:

      ## user_id= は、クライアントでリクエストパラメーター user_id が指定されていないことを示します。
      ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 1 になります。
      $0.user_id = 1;
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
          "user_id": ""
      }
      
      ## 出力:
      {
        "user_id": 1
      }
  • 例 3: リクエストパラメーター user_id に対してクライアントから渡された配列のすべての値をトラバースし、値を変更するために Aviator 関数が呼び出されます。

    • Aviator 関数:

      ## リクエストパラメーター user_id に対してクライアントから渡された元の値は 0、1、2 です。
      ## プリフィルターとして Aviator 関数を使用してリクエストパラメーター user_id を前処理した後、クエリするリクエストパラメーターの値は 1、2、3 になります。
      user_id = $0.user_id;
      for index in user_id
      {
          user_id[index] = index + 1;
      }
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
        "user_id": [0,1,2]
      }
      
      ## 出力:
      {
        "user_id": [
          1,
          2,
          3
        ]
      }

シナリオ 2: Aviator 関数を API のポストフィルターとして使用します。例:

  • 例 1: API によって返される JSON データの特定のデータエントリを変更するために Aviator 関数が呼び出されます。

    • Aviator 関数:

      ## JSON データの rows という名前の最も内側の配列を取得してトラバースし、city が BJ であるデータエントリを見つけます。次に、データエントリの "tags":"" を "tags":"DataService Studio" に変更します。
      rows = $0.data.rows;
      for row in rows
      {
          if(row.city == "BJ")
          {
              row.tags = "DataService Studio";
          }
      }
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## 出力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success"
      }
  • 例 2: API によって返される JSON データの各データエントリに定数列を追加するために Aviator 関数が呼び出されます。

    • Aviator 関数:

      ## JSON データの rows という名前の最も内側の配列を取得してトラバースし、各データエントリに定数列 is_target= "Y" を追加します。
      rows = $0.data.rows;
      for row in rows
      {
          row.is_target= "Y";
      }
      
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## 出力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "is_target": "Y",
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "is_target": "Y",
              "user_id": 1,
              "city": "HZ",
              "tags": "A,B,C"
            },
            {
              "is_target": "Y",
              "user_id": 3,
              "city": "SH",
              "tags": "A,C,D,F"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211e016357705412263266e571e",
        "errMsg": "success"
      }
  • 例 3: API によって返される JSON データには多数のフィールドが含まれており、フィールドの戻り値を 1 つずつ決定したくありません。特別な値を持つフィールドの値を変更するために Aviator 関数が呼び出されます。

    • Aviator 関数:

      ## JSON データの rows という名前の最も内側の配列を取得します。rows 配列のネストされたデータをトラバースして、各データエントリのマップを取得します。次に、値が null のマップの値を test に変更します。
      ## Aviator 構文では、nil は null 定数を指定します。これは、他の構文の null と同等です。
      rows = $0.data.rows;
      for row in rows
      {
          for index in row
          {
              if(index.value == nil)
              {
                  index.value = "test"
              }
          }
      }
      return $0;
    • Aviator 関数の入力と出力:

      ## 入力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": null,
              "city": "SH",
              "tags": "A,C,D,F"
            },
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": null,
              "city": null,
              "tags": "A,B,C"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211f016372870359913841e52d8",
        "errMsg": "success",
        "apiLog": null
      }
      
      ## 出力:
      {
        "data": {
          "totalNum": 3,
          "pageSize": 10,
          "rows": [
            {
              "user_id": "test",
              "city": "SH",
              "tags": "A,C,D,F"
            },
            {
              "user_id": 2,
              "city": "BJ",
              "tags": "DataService Studio"
            },
            {
              "user_id": "test",
              "city": "test",
              "tags": "A,B,C"
            }
          ],
          "pageNum": 1
        },
        "errCode": 0,
        "requestId": "0bb211f016372870359913841e52d8",
        "errMsg": "success"
      }

フィルターの使用効果

説明

公開済みの関数のみを API のフィルターとして使用できます。

API の入力と出力:

## API 入力:
{
  "user_id": ""
}

## API 出力:
{
  "data": {
    "totalNum": 1,
    "pageSize": 10,
    "rows": [
      {
        "is_target": "Y",
        "user_id": 2,
        "city": "BJ",
        "tags": "DataService Studio"
      }
    ],
    "pageNum": 1
  },
  "errCode": 0,
  "requestId": "0be30a8716357721257118118e2b0f",
  "errMsg": "success"
}