跨擴充型雲端資料庫生成報告(預覽)

適用於:Azure SQL 資料庫

這很重要

在分片地圖管理器模式下(水平分割)中的彈性查詢,使用 EXTERNAL DATA SOURCE 類型 SHARD_MAP_MANAGER,將於 2027 年 3 月 31 日結束支援。 過後,現有工作負載將持續運作,但不再獲得支援,且無法建立新的外部 SHARD_MAP_MANAGER 資料來源類型。 關於遷移選項,請參閱 彈性查詢分片地圖管理器模式的遷移指南

分片化資料庫將資料列分佈於擴展的資料層。 所有參與的資料庫都有相同的結構描述,也稱為水平資料分割。 使用彈性查詢,您可以建立跨越分區化資料庫中所有資料庫的報告。

查詢如何跨分區運作的圖表。

如需快速入門,請參閱跨擴展雲端資料庫的報告(預覽版)。

如需非分區化資料庫,請參閱使用不同架構跨雲端資料庫的查詢(預覽版)。

先決條件

概觀

這些陳述式可在彈性查詢資料庫中建立分區化資料層的中繼資料表示法。

  1. 建立主金鑰
  2. CREATE DATABASE SCOPED CREDENTIAL(建立資料庫範圍的憑證)
  3. 建立外部資料來源
  4. 建立外部資料表

1.1 建立資料庫範圍的主金鑰和登入憑證

彈性查詢使用憑證來連接到您的遠端資料庫。 用強密碼替換每個 <password>

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
CREATE DATABASE SCOPED CREDENTIAL [<credential_name>]  WITH IDENTITY = '<username>',  
SECRET = '<password>';

注意

請確定 "<username>" 不含任何 "@servername" 後置詞。

1.2 建立外部資料來源

語法:

<External_Data_Source> ::=
    CREATE EXTERNAL DATA SOURCE <data_source_name> WITH
        (TYPE = SHARD_MAP_MANAGER,
                   LOCATION = '<fully_qualified_server_name>',
        DATABASE_NAME = '<shardmap_database_name>',
        CREDENTIAL = <credential_name>,
        SHARD_MAP_NAME = '<shardmapname>'
               ) [;]

範例

CREATE EXTERNAL DATA SOURCE MyExtSrc
WITH
(
    TYPE=SHARD_MAP_MANAGER,
    LOCATION='myserver.database.windows.net',
    DATABASE_NAME='ShardMapDatabase',
    CREDENTIAL= SMMUser,
    SHARD_MAP_NAME='ShardMap'
);

擷取目前的外部資料來源清單︰

select * from sys.external_data_sources;

外部資料來源會參考您的分片映射。 彈性查詢會接著使用外部資料來源和基礎分片圖以列舉參與資料層的資料庫。

在彈性查詢處理期間,使用相同的認證來讀取分區對應和存取分區上的資料。

1.3 建立外部資料表

語法:

CREATE EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name  
    ( { <column_definition> } [ ,...n ])
    { WITH ( <sharded_external_table_options> ) }
) [;]  

<sharded_external_table_options> ::=
  DATA_SOURCE = <External_Data_Source>,
  [ SCHEMA_NAME = N'nonescaped_schema_name',]
  [ OBJECT_NAME = N'nonescaped_object_name',]
  DISTRIBUTION = SHARDED(<sharding_column_name>) | REPLICATED |ROUND_ROBIN

範例

CREATE EXTERNAL TABLE [dbo].[order_line](
     [ol_o_id] int NOT NULL,
     [ol_d_id] tinyint NOT NULL,
     [ol_w_id] int NOT NULL,
     [ol_number] tinyint NOT NULL,
     [ol_i_id] int NOT NULL,
     [ol_delivery_d] datetime NOT NULL,
     [ol_amount] smallmoney NOT NULL,
     [ol_supply_w_id] int NOT NULL,
     [ol_quantity] smallint NOT NULL,
      [ol_dist_info] char(24) NOT NULL
)

WITH
(
    DATA_SOURCE = MyExtSrc,
     SCHEMA_NAME = 'orders',
     OBJECT_NAME = 'order_details',
    DISTRIBUTION=SHARDED(ol_w_id)
);

從目前的資料庫擷取外部資料表清單:

SELECT * from sys.external_tables;

刪除外部資料表:

DROP EXTERNAL TABLE [ database_name . [ schema_name ] . | schema_name. ] table_name[;]

備註

DATA_SOURCE 條款定義了用於外部數據表中的外部數據來源(分片圖)。

SCHEMA_NAMEOBJECT_NAME 子句會將外部數據表定義對應至不同架構中的資料表。 如果省略,即會假設遠端物件的結構描述為 dbo,並假設其名稱與所定義的外部資料表名稱相同。 如果您的遠端資料表名稱已存在於您要建立外部資料表的資料庫中,這會很有用。 例如,您想要定義一個外部資料表,以在擴展的資料層上獲取目錄檢視或 DMV 的彙總檢視。 由於目錄檢視和 DMV 已經存在於本機,所以您無法將其名稱使用於外部資料表定義。 請改用不同的名稱,並在和/或 SCHEMA_NAME 子句中使用OBJECT_NAME目錄檢視的 或 DMV 的名稱。 (請參閱稍後的範例。

指定此數據表使用的數據分配。 查詢處理器會利用 子句中 DISTRIBUTION 提供的資訊來建置最有效率的查詢計劃。

  1. SHARDED 表示數據在資料庫之間進行水平分割。 用於資料散發的分割索引鍵是 <sharding_column_name> 參數。
  2. REPLICATED 表示每個資料庫上都有數據表的相同複本。 您必須負責確保複本在所有資料庫上都相同。
  3. ROUND_ROBIN 表示數據表使用應用程式相依的分配方法進行水平分區。

資料層參考:外部資料表 DDL 指的是外部資料來源。 外部資料來源會指定一個分片映射,為外部資料表提供找出資料層中所有資料庫所需的資訊。

安全性考量

可存取外部資料表的使用者可以在外部資料來源定義中所提供的認證下,自動取得基礎遠端資料表的存取權。 避免透過外部資料來源的憑據造成無意的權限提升。 對外部資料表使用「授與」或「撤銷」,就如同它是一般的資料表一樣。

一旦您已定義外部資料來源和外部資料表,現在您可以對外部資料表使用完整的 T-SQL。

範例︰查詢水平資料分割的資料庫

下列查詢在倉儲、訂單及訂單明細之間執行三方聯結,並使用數個彙總和選擇性篩選。 其假設 (1) 水平資料分割 (分區化) 以及 (2) 倉儲、訂單及訂單明細依倉儲識別碼資料行分區,而彈性查詢可以將聯結共置於分區上以及平行處理分區上成本較高的查詢部分。

    select  
         w_id as warehouse,
         o_c_id as customer,
         count(*) as cnt_orderline,
         max(ol_quantity) as max_quantity,
         avg(ol_amount) as avg_amount,
         min(ol_delivery_d) as min_deliv_date
    from warehouse
    join orders
    on w_id = o_w_id
    join order_line
    on o_id = ol_o_id and o_w_id = ol_w_id
    where w_id > 100 and w_id < 200
    group by w_id, o_c_id

用於遠端 T-SQL 執行的預存程序:sp_execute_remote

彈性查詢也會介紹可供直接存取分區的預存程序。 預存程式稱為 sp_execute_remote ,可用來在遠端資料庫上執行遠端預存程式或 T-SQL 程式代碼。 它需要以下參數:

  • 數據源名稱 (nvarchar):RDBMS 類型的外部數據源名稱。
  • 查詢 (nvarchar):要在每個分區上執行的 T-SQL 查詢。
  • 參數宣告 (nvarchar) - 選擇性:具有查詢參數所用參數數據類型定義的字串(例如 sp_executesql)
  • 參數值清單 - 選擇性:以逗號分隔的參數值清單(例如 sp_executesql

sp_execute_remote 使用從調用參數中獲得的外部資料來源,在遠端資料庫上執行所給的 T-SQL 語句。 它會使用外部資料來源的認證連接 shardmap 管理員資料庫和遠端資料庫。

範例:

    EXEC sp_execute_remote
        N'MyExtSrc',
        N'select count(w_id) as foo from warehouse'

工具的連接能力

使用一般 SQL Server 連接字串,將您的應用程式、BI 和資料整合工具連接到包含外部資料表定義的資料庫。 請確定 SQL Server 可支援做為您的工具的資料來源。 然後像其他任何連接到工具的 SQL Server 資料庫一樣,將彈性查詢資料庫當作參考,並從您的工具或應用程式中使用外部資料表,就如同本機資料表一樣。

最佳作法

  • 僅針對受信任的端點設定外部資料來源。 限制邏輯伺服器的對外網路連線,讓其可個別將已核准的目的地 FQDN 加入允許清單。 欲了解更多資訊,請參閱 「安全外部資料來源」。
  • 請確保彈性查詢端點資料庫已通過 SQL 資料庫防火牆獲得對分片映射資料庫及所有分片的存取權。
  • 驗證或強制執行外部資料表所定義的資料分佈。 如果您的實際數據分佈與數據表定義中指定的散發不同,您的查詢可能會產生非預期的結果。
  • 彈性查詢目前不會執行分區刪除,因為分區化索引鍵的述詞允許安全地排除處理某些分區。
  • 彈性查詢最適合可在分片上完成大部分運算的查詢。 使用可在分片上評估的選擇性篩選述詞,或以分區對齊方式在所有分片上聯結分區鍵,通常可以獲得最佳查詢效能。 其他查詢模式可能需要將大量數據從分區載入前端節點,而且效能不佳。