可能な場合、結合を使用した SQL クエリがデータソースにプッシュダウンされ、データソースがクエリを評価します。結合をデータソースにプッシュするには、いくつかの条件を満たす必要があります。 

  1. 結合のテーブルは同じデータ・ソースでなければなりません。
  2. データ・ソース・ドライバーは結合をサポートしている必要があります。

次の例は、同じデータ・ソースからの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
;;