このページでは、派生テーブルの一部である
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_start と date_end は、BigQuery など、日付を基準にデータを複数のテーブルにパーティション化するデータベース ダイアレクトで非常に役立ちます。詳細については、日付フィルタでの date_start と date_end の使用のベスト プラクティス ページをご覧ください。
特に _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
{% 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 変数リファレンスのドキュメント ページをご覧ください。