分片 SQL 连接器

重要

AKS 上的 Azure HDInsight 已于 2025 年 1 月 31 日停用。 了解此公告的详细信息

需要将工作负荷迁移到 Microsoft Fabric 或等效的 Azure 产品,以避免工作负荷突然终止。

重要

此功能目前以预览版提供。 Microsoft Azure 预览版补充使用条款 包含适用于 Beta 版、预览版或尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览版的信息,请参阅 在 AKS 上的 Azure HDInsight 预览信息。 有关问题或功能建议,请在 AskHDInsight 上提交请求,并提供详细信息,关注我们以获得更多关于 Azure HDInsight Community的更新。

分片 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>
财产 描述
连接器.名称 用于分片 SQL 的连接器的名称是 sharded_sqlserver
连接用户 SQL Server 中的用户名
连接密码 SQL Server 中用户的密码
分片集群 需要为 sharded-sql 连接器 设置为 TRUE
分片配置位置 定义分片模式的配置位置

数据源身份验证

连接器使用用户密码身份验证来查询 SQL 服务器。 配置中指定的同一用户应对所有 SQL 服务器进行身份验证。

架构定义

连接器假定跨 SQL 服务器的物理数据的 2D 分区/桶式布局。 架构定义描述此布局。 目前,仅支持基于文件的分片架构定义。

可以在目录属性中指定分片架构 json 的位置,例如 shard-config-location=etc/shard-schema.json。 配置具有所需属性的分片架构 json 以指定布局。

以下 JSON 文件描述了 Trino 分片 SQL 连接器的配置。 下面是其结构的细分:

  • :对象数组,每个对象表示数据库中的表。 每个表对象都包含:

    • 架构:表的架构名称,对应于 SQL Server 中的数据库。
    • 名称:表的名称。
    • sharding_schema:与表关联的分片架构的名称,该架构充当对后续步骤中所述 sharding_schema 的引用。
  • sharding_schema:对象数组,每个对象表示分片架构。 每个分片架构对象都包含:

    • 名称:分片架构的名称。
    • partitioned_by:根据分片架构进行分区时使用的一个或多个列的数组。
    • bucket_count(可选):表示表分布的存储桶总数的整数,默认为 1。
    • bucketed_by(可选):包含一个或多个用于对数据进行分桶的列的数组,请注意,分区和分桶是分层的,这意味着每个分区都被分桶。
    • partition_map:对象数组,每个对象表示分片架构中的分区。 每个分区对象都包含:
      • 分区:表单 partition-key=partitionvalue 中指定的分区值
      • 分片:这是一个对象数组,每个对象表示分区中的一个分片,数组的每个元素代表一个副本。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 个存储桶。
  • 每个分区都按partkey列进行分桶。
  • 分区值 AIR 的存储桶 1-7 位于 test1 数据库中。
  • 分区值 AIR 的存储桶 8-10 位于 test2 数据库中。
  • 分片是 connectionUrl数组。 数组的每个成员都表示一个 replicaSet。 在执行查询期间,Trino 从数组中随机选择一个分片来查询数据。

分区和存储桶修剪

连接器在规划期间评估查询约束,并根据提供的查询谓词执行。 这有助于加快查询性能,并允许连接器查询大量数据。

使用此处 描述的 MurmurHash 函数实现来确定分配任务的存储桶公式。

类型映射

分片 SQL 连接器支持与 SQL Server 连接器相同的类型映射

下推

支持以下下推优化:

  • 限制下推
  • 分布式聚合
  • 加入下推

仅当连接器确定生成表和探测表的数据是并置时,JOIN 操作才能推送到服务器。 当 leftright 表的分片模式相同时,连接器将数据视为并置。 - 联接条件是分区键和存储桶键的超集。

若要使用 JOIN 下推优化,目录属性 join-pushdown.strategy 应设置为 EAGER

对于这个连接器,AGGREGATE 下推只能用于分布式聚合。 需要将优化器配置 optimizer.partial-aggregate-pushdown-enabled 设置为 true 才能启用此优化。