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 クエリが未加工の SQL で記述され、Looker フィールドを参照していない限り、任意の有効な 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 変数を使用すると、フィールドの値、フィールドに関するデータ、フィールドに適用されたフィルタなどのデータにアクセスできます。

Liquid 変数 date_startdate_end は、BigQuery など、日付を基準にデータを複数のテーブルにパーティション化するデータベース ダイアレクトで非常に役立ちます。詳細については、日付フィルタでの date_startdate_end の使用のベスト プラクティス ページをご覧ください。

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

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

view: dynamic_order_counts {
  derived_table: {
    sql:
      SELECT
        period, number_of_orders
      FROM
        {% if dates.reporting_date._in_query %}
          daily_orders
        {% elsif dates.reporting_week._in_query %}
          weekly_orders
        {% else %}
          monthly_orders
        {% 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 で参照されるテーブルは、現在の接続からアクセス可能である必要があります

派生テーブルを含む views は、explore パラメータまたは join パラメータによって参照され、そのパラメータは モデルによって参照されます。モデルによって、使用するデータベース接続が決まります(connection パラメータのドキュメント ページをご覧ください)。データベース接続自体は、Looker の [管理者] セクションで定義されます。sql パラメータでテーブルを参照する場合、テーブルは関連付けられた接続内でアクセス可能である必要があります。

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

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

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

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

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

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

詳細については、Liquid 変数リファレンスのドキュメント ページをご覧ください。