我对ADL和USQL很陌生。我浏览了很多文档和演示文稿,但恐怕我仍然缺少很多答案。
简单一点,我有大量数据(每天递增),但是在一个文件中包含有关许多不同客户端的信息。在大多数情况下,将为一个客户分析数据(一个报告=一个客户),但是我想保留进行跨客户分析的可能性(更不常见的情况)。我知道正确分区此数据的重要性(可能将一个客户端数据保持在一起是最有意义的)。我正在研究两种情况:
我现在正在研究这两种情况的利弊。我想到的一些事情是:
在做出决定之前,我想研究的一个非常重要的因素是在使用表和分区时如何物理存储数据。我已经阅读了文档,但发现一条令我困惑的声明(https://docs.microsoft.com/en-us/u-sql/ddl/tables):
首先我们可以读到:
“ U-SQL表由文件支持。每个表分区都映射到其自己的文件”-这似乎很合理。我假设如果我按客户端设置分区,那么最终会遇到与自己进行分区相同的情况。太棒了! U-SQL将为我完成所有工作!或者..不会吗?
后来我们可以看到:
“ ...,并且每个INSERT语句都会添加一个附加文件(除非使用ALTER TABLE REBUILD重建了表)。”
现在,这使事情变得更加复杂。如果我正确阅读它,这意味着如果我永远不会重建表,则我的数据将以与原始原始文件完全相同的方式物理存储,从而会导致性能下降。我做了一些实验,它似乎可以这样工作。不幸的是,我无法将文件与分区匹配,因为引导是不同的(商店中的.ss文件的引导与usql视图中的分区具有不同的引导),所以这只是我的猜测。
因此,我有几个问题:
非常感谢您的帮助,
Jakub
编辑:我做了更多测试,这只会使它更加吸引人。
结论?如果我没记错的话,无论我刚刚插入什么内容,重建看起来实际上都会触及我的所有文件。如果是这种情况,则意味着随着时间的增长,整个方案将变得越来越昂贵。有谁能解释我错了吗?
答案 0 :(得分:1)
Microsoft最近发布了一份名为“ U-SQL Performance Optimization”的白皮书,您应该阅读该白皮书。它包括有关分发,散列,循环和分区的详细说明。