sql(派生テーブルの場合)

このページでは、派生テーブルの一部である sql パラメータについて説明します。

また、sql(フィールド向け)パラメータのドキュメント ページに記載されているとおり、フィールドの一部として sql を使用することもできます。

用途

view: my_derived_table{
derived_table: {
    sql:
      SELECT *
      FROM events
      WHERE type NOT IN ('test', 'staff') ;;
...
}
階層
sql
デフォルト値
なし

許可
SQL ブロック

定義

sql を使用すると、派生テーブルの生成に使用する SQL を指定できます。SQL クエリが未加工の SQL で記述され、Looker のフィールドを参照していない限り、sql パラメータで任意の正式な SQL クエリを使用できます。派生テーブルの詳細については、Looker の派生テーブルのドキュメントをご覧ください。

sql では、通常のデータベース テーブルを参照するだけでなく、LookML ビューや派生テーブルも参照できます。その場合は、次のコマンドを使用します。

${view_or_derived_table_name.SQL_TABLE_NAME} AS view_or_derived_table_name

このリファレンスでは SQL_TABLE_NAME がリテラル文字列です。他の文字列に置き換える必要はありません。たとえば、key_customer_order_facts 派生テーブル内で key_customer という名前の派生テーブルを参照する場合は、次のようになります。

view: key_customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      INNER JOIN
        ${key_customer.SQL_TABLE_NAME} AS key_customer
      ON
        order.customer_id = key_customer.id
      GROUP BY 1
      ;;
  }
}

sql による Liquid 変数

sql パラメータで Liquid 変数を使用することもできます。Liquid 変数を使用すると、フィールドの値、フィールドに関するデータ、フィールドに適用されたフィルタなどにアクセスできます。

date_startdate_end の Liquid 変数は、データを日付別に複数のテーブルに分割するデータベース言語(BigQuery など)に非常に役立ちます。詳しくは、こちらのヘルプセンター記事をご覧ください。

特に、_in_query_is_selected_is_filtered Liquid の変数は、派生テーブルに興味深い機能を追加できます。クエリにフィールドやフィルタが含まれているかどうかに応じて、true または false が返されます。これらの true 値/false 値を適切に使用するために考慮すべき複雑度がいくつかあります。詳しくは、Liquid 変数のページをご覧ください。

たとえば、次の派生テーブルは、ユーザーが選択したフィールドに基づいてクエリを実行するデータベース テーブルを変更します。

view: dynamic_order_counts {
  derived_table: {
    sql:
      SELECT
        period, number_of_orders
      FROM
        {% dynamic if dates.reporting_date._in_query %}
          daily_orders
        {% elsif dates.reporting_week._in_query %}
          weekly_orders
        {% dynamic else %}
          monthly_orders
        {% dynamic endif %}
      GROUP BY 1
      ;;
  }
}

customer_order_facts 派生テーブルを作成します。

view: customer_order_facts {
  derived_table: {
    sql:
      SELECT
        customer_id,
        COUNT( * ) AS lifetime_orders
      FROM
        order
      GROUP BY 1
      ;;
  }
}

注意点

sql で参照されているテーブルに、現在の接続からアクセスできる必要があります

派生テーブルを含む viewsexplore または join パラメータによって参照され、これらはモデルによって参照されます。どちらのデータベース接続を使用するかは、モデルが決定します(connection パラメータのドキュメントを参照)。データベース接続自体は、Looker の [管理] セクションで定義します。sql パラメータでテーブルを参照する場合、関連付けられた接続でテーブルにアクセスできる必要があります。

Looker フィールドの参照ではなく、sql を使って未加工 SQL を使用する

派生テーブルの sql パラメータに書き込む SQL は未加工の SQL である必要があり、これはデータベースの基盤となる列とテーブルを参照します。Looker のフィールド名やビュー名を参照しないでください。

派生テーブルで _filters['view_name.field_name'] を使用するには、sql_quote が必要です

SQL ベースの派生テーブルを定義する際、_filters['view_name.field_name'] Liquid 変数を使用して SQL で値がレンダリングされ、フィルタが文字列値を返す場合は、出力を単一引用符で囲む必要があります。これを行うには、sql_quote の Liquid フィルタを含めます。

それ以外の場合は、Liquid 変数を | sql_quote で追加しないと、次の LookML 警告が表示されます。

Using "_filters[]" in Derived Table SQL without "sql_quote" is discouraged.

詳しくは、Liquid 変数のリファレンス ページをご覧ください。