分享方式:


分區化 SQL 連接器

重要

此功能目前為預覽功能。 適用於 Microsoft Azure 預覽版的補充使用規定包含適用於 Beta 版、預覽版或尚未發行至正式運作之 Azure 功能的更合法條款。 如需此特定預覽的相關信息,請參閱 AKS 預覽資訊的 Azure HDInsight。 如需問題或功能建議,請在 AskHDInsight提交要求,並提供詳細數據,並遵循我們在 Azure HDInsight 社群取得更多更新。

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

必要條件

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

  • SQL Server 2012 或更高版本,或 Azure SQL 資料庫。
  • 從 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 連接器名稱 For sharded SQL,這應該是 sharded_sqlserver
connection-user SQL Server 中的用戶名稱
connection-password SQL Server 中用戶的密碼
sharded-cluster 必須針對sharded-sql 連接器設定為TRUE
shard-config-location 定義分區化架構的組態位置

資料來源驗證

連接器會使用使用者密碼驗證來查詢 SQL 伺服器。 組態中指定的相同用戶應該對所有 SQL 伺服器進行驗證。

結構描述定義

連線 or 假設跨 SQL 伺服器之實體數據的 2D 分割區/貯體配置。 架構定義描述此配置。 目前僅支援以檔案為基礎的分區化架構定義。

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

下列 JSON 檔案描述 Trino 分區化 SQL 連接器的組態。 以下是其結構的分解:

  • tables:對象的陣列,每個物件都代表資料庫中的數據表。 每個資料表物件都包含:

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

    • name:分區化架構的名稱。
    • partitioned_by:數位,包含分割分區化架構的一或多個數據行。
    • bucket_count(選擇性):整數,代表數據表分佈的貯體總數,預設值為 1。
    • bucketed_by(選擇性):數位含一或多個數據分割的數據行,請注意數據分割和貯體是階層式的,這表示每個分割區都已貯體。
    • partition_map:對象的陣列,每個物件都代表分區化架構內的分割區。 每個分割區物件都包含:
      • partition:表單中指定的數據分割值 partition-key=partitionvalue
      • 分區:對象的陣列,每個物件都代表分割區內的分區,陣列的每個元素都代表複本,三元會隨機查詢其中任何一個,以擷取分割區/貯體的數據。 每個分區物件都包含:
        • connectionUrl:分區資料庫的 JDBC 連線 URL。

例如,如果兩個數據表 lineitempart 您想要使用此連接器進行查詢,您可以指定它們,如下所示。

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

注意

連線 or 預期資料表的所有資料表都會出現在數據表架構中定義的 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 數據行。
  • 分割 1-7 區值的 AIR 貯體位於 test1 資料庫中。
  • 分割 8-10 區值的 AIR 貯體位於 test2 資料庫中。
  • 分區是的 connectionUrl陣列。 陣列的每個成員都代表 replicaSet。 在查詢執行期間,Trino 會隨機從數位選取分區以查詢數據。

分割區和貯體剪除

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

使用此處所述的雜音哈希函式實作來判斷指派的貯體公式。

類型對應

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

下推

支援下列下推優化:

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

JOIN 只有在連接器判斷組建和探查數據表的數據共置時,才能將作業向下推送至伺服器。 連線 or 決定數據共置時 - 和 right 資料表的sharding_schemaleft相同。 - 聯結條件是分割和貯體索引鍵的超集。

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

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