分片 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。
-
分区:表单
例如,如果您希望使用此连接器查询两个表 lineitem
和 part
,您可以按如下所示指定它们。
"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
操作才能推送到服务器。 当 left
和 right
表的分片模式相同时,连接器将数据视为并置。
- 联接条件是分区键和存储桶键的超集。
若要使用 JOIN
下推优化,目录属性 join-pushdown.strategy
应设置为 EAGER
对于这个连接器,AGGREGATE
下推只能用于分布式聚合。 需要将优化器配置 optimizer.partial-aggregate-pushdown-enabled
设置为 true
才能启用此优化。