我正在处理表格"内容"用户定义的功能" TrasformData"
@result =
SELECT Id,
TrasformData(Data) AS TrasformedData
FROM Content;
表格"内容"很大(约100M记录)和#34; TrasformData"功能很慢。该功能非常复杂,一条记录大约需要20毫秒。
Azure Data Lake默认将我的查询拆分为25个顶点。这还不够。完成25 AU可能需要数小时。我想为这个过程分配至少200 AU,并尽快完成。据我所知,为此查询分配超过25 AU是没用的,直到它分成25个顶点。
我可以以某种方式增加查询的并行性吗?有谁可以帮我解决这个问题?任何选择都是可以接受的。
答案 0 :(得分:3)
您有三种方法可以提高工作的并行度。
第一个是增加Content
表的分配桶的数量(假设您正在使用一个表格,其中您的语句似乎表明了25个顶点)。
如果您正在使用HASH
分发,则可以通过添加INTO x
子句指定更大的数字(其中x是存储桶的数量,应小于约2000)。
其他两个选项类似:使用提示来欺骗系统使用更多节点。
一种方法是对前一个结果使用数据提示,声称它返回了非常多的行。这将欺骗系统重新分区数据,并将扩展未来的处理(将数字调整为您满意的数字):
@content = SELECT * FROM Content OPTION(ROWSIZE=1000000000);
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
另一种是明确更改分区:
@content =
SELECT *
FROM Content
OPTION(PARTITION(id)=(PARTITIONCOUNT=100));
@result = SELECT id, TransformData(Data) AS TransformData FROM @content;
然而,这两种方法都为您提供了一个固定的分配,如果您的数据更多,那么如果您的数据较少或不完整,则会进行全面分配。