我们可以为对多个输出类型有多个查询的 Azure 流分析作业进行查询并行化/分区吗?
Can we do query parallelization/ partitioning for a Azure Stream Analytics job which has multiple queries to multiple output types?
从这个 MS documentation 了解到 Table Storage 和 Cosmos DB 确实支持使用 ASA 作业进行分区。
但是,它是否适用于,例如:
- 单个 ASA 作业
- 输入:具有 8 个分区的事件中心
- 输出:Table具有 4 个分区的存储和具有 4 个分区的 Cosmos DB
以上是否可行,因为能够利用查询并行化/分区的优势?
提前致谢。
是的,你这里的场景是支持的,但它比预期的要微妙一些。
这里的关键是 Table Storage 和 Cosmos DB 都是未设置分区计数的输出。对于像您这样的工作,从逻辑的角度来看,ASA 实际上将为每个输出 运行 8 个分区写入器。恰好其中 4 个 运行ning 是空的。或者更确切地说,不是 8 个写入 2 个输出,而是 8 个写入一个输出,4 个写入另一个输出。
请注意,如果您将 EH 作为输出目标,而不是 Table 或 Cosmos,您需要 EH 有 8 个分区,即使您只将数据发送到 4 个分区,以保持完整并行化。
在查询方面,你需要这样写:
WITH inputStream AS (
SELECT *
FROM [input]
)
SELECT *
INTO [table]
FROM inputStream
WHERE PartitionKey IN (1,2,3,4)
SELECT *
INTO [cosmos]
FROM inputSTream
WHERE PartitionKey IN (5,6,7,8)
或任何类型的不破坏分区对齐的查询。
从这个 MS documentation 了解到 Table Storage 和 Cosmos DB 确实支持使用 ASA 作业进行分区。
但是,它是否适用于,例如:
- 单个 ASA 作业
- 输入:具有 8 个分区的事件中心
- 输出:Table具有 4 个分区的存储和具有 4 个分区的 Cosmos DB
以上是否可行,因为能够利用查询并行化/分区的优势?
提前致谢。
是的,你这里的场景是支持的,但它比预期的要微妙一些。
这里的关键是 Table Storage 和 Cosmos DB 都是未设置分区计数的输出。对于像您这样的工作,从逻辑的角度来看,ASA 实际上将为每个输出 运行 8 个分区写入器。恰好其中 4 个 运行ning 是空的。或者更确切地说,不是 8 个写入 2 个输出,而是 8 个写入一个输出,4 个写入另一个输出。
请注意,如果您将 EH 作为输出目标,而不是 Table 或 Cosmos,您需要 EH 有 8 个分区,即使您只将数据发送到 4 个分区,以保持完整并行化。
在查询方面,你需要这样写:
WITH inputStream AS (
SELECT *
FROM [input]
)
SELECT *
INTO [table]
FROM inputStream
WHERE PartitionKey IN (1,2,3,4)
SELECT *
INTO [cosmos]
FROM inputSTream
WHERE PartitionKey IN (5,6,7,8)
或任何类型的不破坏分区对齐的查询。