共用方式為


分區 SQL 連接器

注意

AKS 上的 Azure HDInsight 將於 2025 年 1 月 31 日退場。 請於 2025 年 1 月 31 日之前,將工作負載移轉至 Microsoft Fabric 或對等的 Azure 產品,以免工作負載突然終止。 訂用帳戶中剩餘的叢集將會停止,並會從主機移除。

在淘汰日期之前,只有基本支援可用。

重要

此功能目前為預覽功能。 Microsoft Azure 預覽版增補使用規定包含適用於 Azure 功能 (搶鮮版 (Beta)、預覽版,或尚未正式發行的版本) 的更多法律條款。 若需此特定預覽版的相關資訊,請參閱 Azure HDInsight on AKS 預覽版資訊。 如有問題或功能建議,請在 AskHDInsight 上提交要求並附上詳細資料,並且在 Azure HDInsight 社群上追蹤我們以獲得更多更新資訊。

分區 SQL 連接器可讓查詢透過分散在任意數目 SQL 伺服器的資料執行。

必要條件

若要連線到分區 SQL 伺服器,您需要:

  • SQL Server 2012 或更高版本,或 Azure SQL Database。
  • 可從 Trino 協調器和背景工作角色存取 SQL Server 的網路。 連接埠 1433 是預設連接埠。

一般設定

連接器可以將多部 SQL 伺服器當作單一資料來源進行查詢。 建立目錄屬性檔案,並使用 connector.name=sharded-sql 來使用分區 SQL 連接器。

設定範例:

connector.name=sharded_sqlserver
connection-user=<user-name>
connection-password=<user-password>
sharded-cluster=true
shard-config-location=<path-to-sharding-schema>
屬性 說明
connector.name 分區 SQL 的連接器名稱,應為 sharded_sqlserver
connection-user SQL Server 中的使用者名稱
connection-password SQL Server 中使用者名稱的密碼
sharded-cluster 必須設定為 TRUE (若為 sharded-sql 連接器)
shard-config-location 定義分區化結構描述的設定位置

資料來源驗證

連接器會使用「使用者密碼」驗證來查詢 SQL Server。 設定中指定的相同使用者應針對所有 SQL Server 進行驗證。

結構描述定義

連接器採用跨 SQL Server 的實體資料 2D 分割區/貯體配置。 結構描述定義描述此配置。 目前,僅支援檔案型分區化結構描述定義。

您可以在目錄屬性 (例如 shard-config-location=etc/shard-schema.json) 中指定分區化結構描述 json 的位置。 設定具有所需屬性的分區化結構描述 json,以指定配置。

下列 JSON 檔案描述 Trino 分區 SQL 連接器的設定。 以下是其結構的明細:

  • 資料表:物件的陣列,每個物件代表資料庫中的一個資料表。 每個資料表物件包含:

    • schema:資料表的結構描述名稱,對應至 SQL Server 中的資料庫。
    • name:資料表的名稱。
    • sharding_schema:與資料表相關聯的分區化結構描述名稱,可作為後續步驟中所述 sharding_schema 的參考。
  • sharding_schema:物件的陣列,每個物件代表一個分區化結構描述。 每個分區化結構描述物件包含:

    • name:分區化結構描述的名稱。
    • partitioned_by:陣列,其中包含分區化結構描述分割依據的一或多個資料行。
    • bucket_count (選用):整數,代表資料表分散其中的貯體總數,預設值為 1。
    • bucketed_by (選用):陣列,包含將資料存入貯體所依據的一或多個資料行,請注意分割和貯體都是階層式,這表示每個分割區都會存入貯體。
    • partition_map:物件的陣列,每個物件代表分區化結構描述內的一個分割區。 每個分割區物件包含:
      • partition:表單 partition-key=partitionvalue 中指定的分割區值
      • shards:物件的陣列,每個物件代表分割區內的一個分區、陣列的每個元素代表一個複本,而 Trino 會隨機查詢查詢其中任何一個,以擷取分割區/貯體的資料。 每個分區物件包含:
        • connectionUrl:分區資料庫的 JDBC 連線 URL。

例如,如果想要使用此連接器查詢的兩個資料表 lineitempart,您可以如下指定它們。

	"tables": [
		{
			"schema": "dbo",
			"name": "lineitem",
			"sharding_schema": "schema1"
		},
		{
			"schema": "dbo",
			"name": "part",
			"sharding_schema": "schema2"
		}
    ]

注意

連接器預期所有資料表都會存在於資料表結構描述中定義的 SQL Server 中,如果不是這種情況,對該資料表的查詢將會失敗。

在上一個範例中,您可以將資料表 lineitem 的配置指定為:

	"sharding_schema": [
		{
			"name": "schema1",
			"partitioned_by": [
				"shipmode"
			],
          		  "bucketed_by": [
              		  "partkey"
           		],
			"bucket_count": 10,
			"partition_map": [
				{
					"partition": "shipmode='AIR'",
                    			"buckets": 1-7,
					"shards": [
						{
							"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test1"
						}
					]
				},
				{
					"partition": "shipmode='AIR'",
                   			"buckets": 8-10,
					"shards": [
						{
							"connectionUrl": "jdbc:sqlserver://sampleserver.database.windows.net:1433;database=test2"
						}
					]
				}                
			]
        }
    ]

此範例描述:

  • shipmode 所分割資料表明細項目的資料。
  • 每個分割區都有 10 個貯體。
  • 每個分割區都是 bucketed_by partkey 資料行。
  • 分割區值 AIR 的貯體 1-7 位於 test1 資料庫中。
  • 分割區值 AIR 的貯體 8-10 位於 test2 資料庫中。
  • 分區是 connectionUrl 的陣列。 陣列的每個成員代表一個 replicaSet。 在查詢執行期間,Trino 會隨機從陣列中選取一個分區以查詢資料。

分割區和貯體剪除

連接器會在規劃期間評估查詢條件約束,並根據提供的查詢述詞執行。 這有助於加速查詢效能,並允許連接器查詢大量資料。

將使用 murmur 雜湊函數實作來判斷指派的貯體公式,其描述在這裡

類型對應

分區 SQL 連接器支援與 SQL Server 連接器類型對應相同的類型對應。

下推

支援下列下推最佳化:

  • 限制下推
  • 分散式彙總
  • 加入下推

JOIN 作業只在連接器確定針對建置和探查資料表共置資料時,才能下推至伺服器。 連接器會決定資料共置時機 - leftright 資料表的sharding_schema 相同。 - 聯結條件是分割和貯體索引鍵的超集。

若要使用 JOIN 下推最佳化,目錄屬性 join-pushdown.strategy 應設定為 EAGER

此連接器的下推 AGGREGATE 只能針對分散式彙總完成。 最佳化工具設定 optimizer.partial-aggregate-pushdown-enabled 必須設定為 true,才能啟用此最佳化。