你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

分片 SQL 连接器

重要

此功能目前以预览版提供。 Microsoft Azure 预览版的补充使用条款包含适用于 beta 版、预览版或其他尚未正式发布的 Azure 功能的更多法律条款。 有关此特定预览版的信息,请参阅 Azure HDInsight on AKS 预览版信息。 如有疑问或功能建议,请在 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>
properties 说明
connector.name 用于分片 SQL 的连接器的名称,应为 sharded_sqlserver
connection-user SQL Server 中的用户名
connection-password SQL Server 中用户的密码
sharded-cluster 需要被设置为 sharded-sql 连接器的 TRUE
shard-config-location 用于定义分片架构的配置的位置

数据源身份验证

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

架构定义

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

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

以下 JSON 文件描述了 Trino 分片 SQL 连接器的配置。 其结构由以下项构成:

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

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

    • name:分片架构的名称。
    • partitioned_by:包含分片架构分区时所基于的一个或多个列的数组。
    • bucket_count(可选):表示表分布于其中的存储桶总数的整数,默认为 1。
    • bucketed_by(可选):包含数据分桶时基于的一个或多个列的数组,请注意分区和分桶是有层次结构的,这意味着每个分区都经过了分桶。
    • partition_map:对象的数组,每个对象表示分片架构中的一个分区。 每个分区对象都包含:
      • partition:窗体 partition-key=partitionvalue 中指定的分区值
      • shards:对象的数组,每个对象表示分区中的一个分片,数组的每个元素表示一个副本,可执行三重查询,随机查询其中任意一个来获取分区/存储桶的数据。 每个分片对象都包含:
        • 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 的数组。 数组的每个成员都表示一个副本集。 在查询执行期间,Trino 从数组中随机选择一个分片来查询数据。

分区和存储桶修剪

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

分桶公式:使用此处所述的杂音哈希函数实现来确定分配。

类型映射

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

下推

支持以下下推优化:

  • 限制下推
  • 分布式聚合
  • 联接下推

仅当连接器确定要为生成表和探测表执行数据并置时,才能将 JOIN 操作下推到服务器。 连接器决定当 leftright 表 的 sharding_schema 相同时执行数据并置。 - 联接条件是分区和分桶键的超集。

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

只能在分布式聚合中执行此连接器的 AGGREGATE 下推。 要启用此优化,需要将优化器配置 optimizer.partial-aggregate-pushdown-enabled 设置为 true