可能な場合、結合を使用した SQL クエリがデータソースにプッシュダウンされ、データソースがクエリを評価します。結合をデータソースにプッシュするには、いくつかの条件を満たす必要があります。
- 結合のテーブルは同じデータ・ソースでなければなりません。
- データ・ソース・ドライバーは結合をサポートしている必要があります。
次の例は、同じデータ・ソースからの2つの結合を示しています:
SELECT
soh.customerid,
sum
(soh.subtotal)
AS
soh_subtotal
FROM
dwh.SalesOrderDetail sod
JOIN
dwh.SalesOrderHeader soh
ON
sod.salesorderid = soh.altsalesorderid
GROUP
BY
soh.customerid
;;
Query Plansを表示すると、クエリ全体がデータソースDWHにプッシュダウンされる様子がわかります:
SELECT
g_1.customerid,
SUM
(g_1.subtotal)
FROM
dwh.SalesOrderDetail
AS
g_0, dwh.SalesOrderHeader
AS
g_1
WHERE
g_0.salesorderid =
convert
(g_1.altsalesorderid, biginteger)
GROUP
BY
g_1.customerid
ビューやテーブルがマテリアライズされる特殊なケースがあります。以下の例では、ビューが2つの異なるデータソースのテーブルを結合しています。通常、これは連携クエリになります。しかし、ビューが Materialization されているため、クエリ全体が Analytical Storage にプッシュダウンされます。背景が薄緑色になっているのは、クエリがAnalytical Storageにプッシュダウンされていることを示しています:
CREATE
VIEW
"views.SalesOrdersPlusHeaders_oracle_mssql_mat"
AS
SELECT
*
FROM
"oracle.SalesOrderHeader"
INNER
JOIN
"mssql_local_data.SalesOrderDetail"
ON
"SalesOrderHeader.salesorderid"
=
"SalesOrderDetail.salesorderid"
;;
SELECT
"SALESORDERID"
FROM
"views.SalesOrdersPlusHeaders_oracle_mssql_mat"
LIMIT 500;;
SELECT
g_0.salesorderid
AS
c_0
FROM
dwh.mat_table_8_st2
AS
g_0 LIMIT 500
この動作はOPTION $PREFER_DWH NEVER
を使ってオーバーライドできることに注意してください。以下の例では、元のデータソースから読み込むことをQuery Plannerに強制するオプションを使用し、連携問い合わせを作成しています(より詳細な説明はOPTION Clauseを参照してください):
SELECT
"SALESORDERID"
FROM
"views.SalesOrdersPlusHeaders_oracle_mssql_mat"
OPTION
$PREFER_DWH NEVER
;;