このページでは、ビューの一部である
sql_table_nameパラメータについて説明します。
sql_table_nameは、sql_table_name(結合の場合)パラメータのドキュメント ページで説明されているように、結合の一部としても使用できます。
sql_table_nameは、sql_table_name(Explore 用)パラメータのドキュメント ページで説明されているように、Explore の一部としても使用できます。
用途
view: view_name {
sql_table_name: table_name ;;
}
sql_table_name |
デフォルト値
ビュー名
許可
データベース内のテーブル名
特別なルール
|
定義
sql_table_name パラメータは、ビューによってクエリされるデータベース内のテーブルを指定します。
派生テーブルに基づいてビューを作成する場合は、
sql_table_nameパラメータを使用しないでください。代わりに、derived_tableのドキュメント ページで説明されているderived tableパラメータを使用してください。ビューファイルにsql_table_nameとderived_tableの両方がある場合、Looker IDE はエラーを返します。
ビューに sql_table_name パラメータまたは derived_table パラメータのいずれも含まれていない場合、Looker はビューがデータベース テーブルに基づいており、データベース テーブルの名前がビューの名前と一致していると想定します。つまり、次のようになります。
view: my_name { ... }
これは、次の式と論理的に同等です。
view: my_name {
sql_table_name: my_name ;;
}
このデフォルトの動作にフォールバックして、sql_table_name を使用しないことはよくあります。ただし、この機能が役立つ状況もいくつかあります。まず、ビューの名前を基になるテーブルとは異なる名前にしたい場合があります。たとえば、テーブル名を整理する場合などです。
view: orders {
sql_table_name: prod_orders_2 ;;
}
また、データベース ユーザーのデフォルトの検索パスにないデータベースまたはスキーマに基づいてビューを作成する必要がある場合もあります。テーブル名を スコープ設定するには、<schema_name>.<table_name> 形式を使用します。
view: desired_view_name {
sql_table_name: database_name.schema_name.table_name ;;
}
テーブル名のスコープ設定
テーブル名を単独で使用してテーブルを参照すると、Looker は、Looker 管理者がデータベース接続の接続設定で構成したデフォルトの検索パス(データベースとスキーマ)を使用します。詳しくは、このページの考慮事項をご覧ください。
データベース ユーザーのデフォルトの検索パスにない別のデータベースとスキーマのテーブルを参照する必要がある場合は、<database_name>.<schema_name>.<table_name> 形式を使用してテーブル名をスコープし、別のデータベースまたはスキーマを指すことができます。
- 別のスキーマのテーブルを参照するには、このページの例に示すように、
<schema_name>.<table_name>を使用します。 - 別のデータベースのテーブルを参照するには、完全な
<database_name>.<schema_name>.<table_name>を使用します。
Google BigQuery 接続の場合、<project_name>.<dataset_name>.<table_name> 形式でテーブル名をスコープ設定することで、別のプロジェクトとデータセットのテーブルを参照できます。詳細については、Google BigQuery 接続のドキュメント ページをご覧ください。
フェデレーション結合
異なるデータベースの 2 つのテーブルを結合することを、フェデレーション結合と呼びます。2 つのデータベースが同じ SQL 言語で、その言語がフェデレーション結合をサポートしており、Looker の同じ接続から両方のデータベースにアクセスできる場合は、Looker を使用してフェデレーション結合を実行できます。データベースの構成によっては、テーブルが同じ物理マシンに存在する必要がある場合もあります。
このような場合は、ビューの sql_table_name パラメータで各テーブルのデータベース名を指定して、連携結合を作成できます。
view: view_1 {
sql_table_name: database_name.table_1 ;;
}
view: view_2 {
sql_table_name: another_database_name.table_2 ;;
}
次に、sql_on パラメータを使用してこれらのビューを結合します。
explore: view_1 {
join: view_2 {
sql_on: ${view_1.view_1_ID} = ${view_2.view_2_ID} ;;
}
}
異なる SQL 言語のデータベースを結合する場合は、1 つのデータベースを別のデータベースに複製して、単一のソースからすべてのデータを取得できるようにすることをおすすめします。
例
この例では、customers ビューがデフォルト スキーマの customer_1 テーブルに依存するようにします。
view: customers {
sql_table_name: customer_1 ;;
}
この例では、テーブル名をスキーマ名を含むようにスコープ設定(<schema_name>.<table_name> 形式を使用)することで、customers ビューが analytics の customer_1 テーブルに依存するようにします。
view: customers {
sql_table_name: analytics.customer_1 ;;
}
注意点
view で参照されるテーブルは、現在の接続からアクセス可能である必要があります
sql_table_name パラメータが view オブジェクト内で使用されている場合、その view オブジェクトは explore オブジェクトで参照できます。この explore オブジェクトは、モデル オブジェクトで参照されます。モデル オブジェクトには、定義されたデータベース connection があります。sql_table_name パラメータでデータベース テーブルを参照する場合、モデルファイルで指定された関連付けられた接続内でテーブルにアクセスできる必要があります。
デフォルトのデータベースとスキーマ(または Google BigQuery の場合は課金プロジェクトとデータセット)は、Looker 管理者がデータベース接続の データベースへの Looker 接続を作成するときに定義します。
使いにくいテーブル名の場合、追加の書式設定が必要になることがあります
一部の言語では、サポートされていない文字を含むテーブル名(「フレンドリーでない」テーブル名とも呼ばれます)を角括弧、二重引用符、または単一引用符で囲む必要があります。たとえば、テーブル名 Customers.PaymentInfo にはテーブル名にピリオドが含まれています。これは、スキーマ Customers の PaymentInfo というテーブルとして解釈される可能性があります。これを修正するには、方言で角括弧が必要な場合は、次のようにテーブル名を角括弧で囲みます。
sql_table_name: [Customers.PaymentInfo] ;;
方言で二重引用符または単一引用符が必要な場合は、それらの文字の角かっこを置き換えます。