テスト

用途

test: historic_revenue_is_accurate {
  explore_source:  orders {
    column:  total_revenue {
      field:  orders.total_revenue 
    }
    filters: [orders.created_date:  "2017"]
  }
  assert:  revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}
階層
test

または

test

または

test
デフォルト値
なし

許可
データテストの識別子と、テストのアサーションとクエリを定義するサブパラメータ。

定義

Looker には、LookML コードの構文が有効であることを検証する LookML Validator と、コンテンツとモデル間のオブジェクト参照を検証する Content Validator があります。

これらの検証ツールに加えて、test パラメータを使用すると、モデルのロジックを検証できます。データテストごとに、クエリと yesno アサーション ステートメントを作成します。データテストでテストクエリを実行し、テストクエリの各行に対してアサーションが true となることを検証します。アサーション ステートメントがテストクエリのすべての行に対して yes を返したとしたら、データテストは合格です。

プロジェクトの設定で、データテストに合格してからでないと本番環境にデプロイできないように構成されている場合、プロジェクトに変更を commit した後、IDE に [Run Tests] ボタンが表示されます。testLookML デベロッパーは変更を本番環境にデプロイする前に、データテストを実行する必要があります。

プロジェクトで本番環境へのデプロイ前のデータテストが必須となっているかどうかにかかわらず、LookML デベロッパーはいつでも開発モードデータテストを実行して、モデルのロジックを検証できます。

データテストは、モデルファイルビューファイル、または専用のデータテスト ファイルに作成できます。専用のファイルを使用してデータテストを保存する場合は、データテストを実行するモデルファイルまたはビューファイルにデータテスト ファイルを include することを忘れないでください。

データテストの名前と explore_source は、同じプロジェクト内の別のデータテストと同じにすることはできません。プロジェクト内の複数のデータテストで同じ explore_source を使用する場合は、データテストの名前がすべて一意であることを確認してください。

test パラメータには次のサブパラメータがあります。

  • explore_source: データテストで使用するクエリを定義します。
  • assert: データを検証するためにテストクエリのすべての行で実行される Looker 式を定義します。

テストの LookML を定義したら、データテストを実行して、テストが正しく機能していることを確認し、モデルのロジックがテストに合格しているかどうかを確認できます(データテストを実行するには、開発モードにする必要があります)。

プロジェクトのデータテストを開始するには、いくつかの方法があります。

  1. プロジェクト設定で、ファイルを本番環境にデプロイする前にデータテストに合格するように構成されている場合は、変更をプロジェクトに commit した後に [Run Tests] ボタンが表示されます。これにより、テストを定義するファイルに関係なく、プロジェクトのすべてのテストが実行されます。変更を本番環境にデプロイする前に、データテストに合格する必要があります。
  2. [Project Health] パネルで [Run Data Tests] ボタンを選択します。これにより、テストを定義するファイルに関係なく、プロジェクト内のすべてのデータテストが実行されます。
  3. ファイルのメニューから [Run LookML Tests] オプションを選択します。これにより、現在のファイルで定義されているテストのみが実行されます。

データテストを実行すると、[Project Health] パネルに進行状況と結果が表示されます。

各テスト結果の [Explore Query] リンクを選択すると、データテストで定義されているクエリを含む Explore が開きます。

explore_source

データテストの explore_source パラメータは、派生テーブルの explore_source パラメータと同じ構文とロジックを使用します。唯一の違いは、データテストの explore_sourcederived_columnbind_filtersbind_all_filters サブパラメータをサポートしていないことです。

便利なヒント: explore_source LookML を簡単に取得するには、既存の Explore を使用してクエリを作成します。Explore で、Explore の歯車アイコンから [Get LookML] を選択し、[Derived Table] タブを選択して、クエリの LookML を取得します。詳細については、ネイティブ派生テーブルの作成に関するドキュメントをご覧ください。

データテストの explore_source については、次の点に注意してください。

  • データテストの explore_source クエリは標準の Looker クエリです。つまり、テストの explore_source クエリの行数は 5,000 行に制限されます。クエリが 5,000 行を超えないようにして、テスト用の完全な結果セットを取得してください。explore_source にフィルタや並べ替えを組み込んで、クエリの行数を減らしたり、関連する行をクエリの先頭に表示したりできます。

  • extension: required を使用する explore は、データテストexplore_source として使用できません。LookML Validator は、explore_source が見つからないことを示すエラーを生成します。

assert

assert サブパラメータは、explore_source クエリの結果が有効と見なされる基準を定義します。expression サブパラメータは、Looker 式を返す yesno(ブール値)を受け取ります。explore_source クエリが実行されると、アサーションの式がクエリの結果セットのすべての行に対して評価されます。クエリの行に対して no レスポンスがある場合、データテストは失敗します。クエリ自体にエラーがある場合も、テストは失敗します。

テストには複数の assert 宣言を含めることができます。テストに合格するには、explore_source クエリのすべての行に対して各アサーションが true である必要があります。

便利なヒント: 表計算ダイアログを使用して、テストの expression パラメータで使用する Looker 式の構文をテストできます。

データテストで使用する場合、Looker 式のフィールドは完全なスコープにする必要があります。つまり、view_name.field_name 形式で指定します。たとえば、次の式では、フィールドを aircraft_engine_types.aircraft_engine_type_id として宣言しています。

assert: engine_type_id_not_null {
  expression: NOT is_null(${aircraft_engine_types.aircraft_engine_type_id}) ;;
}

主キーが一意であることを確認する

次のデータテストでは、orders Explore からクエリを作成し、結果セットで注文 ID が一意であることをテストする expression を定義します。explore_source クエリは、データベース内の各 ID に関連付けられた行数をカウントします。ID が一意の場合、データベースには ID の行が 1 つだけ存在します。さらに、カウントで並べ替え、結果セットを 1 行に制限するため、クエリ レスポンスはカウントが最も多い ID になります。ID のカウントが 1 より大きい場合、その ID に複数の行が存在するため、ID は一意ではありません。この場合、このデータテストは失敗します。

test: order_id_is_unique {
  explore_source: orders {
    column: id {}
    column: count {}
    sorts: [orders.count: desc]
    limit: 1
  }
  assert: order_id_is_unique {
    expression: ${orders.count} = 1 ;;
  }

既知の値を検証する

次のデータテストでは、2017 年の収益額が常に $626,000 であることを確認します。このデータセットでは、これは変更されることのない既知の値です。

test: historic_revenue_is_accurate {
  explore_source: orders {
    column: total_revenue {
      field: orders.total_revenue
    }
    filters: [orders.created_date: "2017"]
  }
  assert: revenue_is_expected_value {
    expression: ${orders.total_revenue} = 626000 ;;
  }
}

null 値がないことを確認する

次のデータテストでは、データに null 値がないことを確認します。この explore_sourcesort を使用して、null 値がクエリの先頭に返されるようにします。null 値の並べ替えは、使用する言語によって異なります。次のテストでは、desc: yes を例として使用します。


test: status_is_not_null {
  explore_source: orders {
    column: status {}
    sorts: [orders.status: desc]
    limit: 1
  }
  assert: status_is_not_null {
    expression: NOT is_null(${orders.status}) ;;
  }
}