在线书籍对 PolyBase 中的查询优化有这样的说法:
查询优化器做出基于成本的决定,将计算推送到 Hadoop,这样做会提高查询性能。它使用外部表的统计信息来做出基于成本的决策。推送计算创建 MapReduce 作业并利用 Hadoop 的分布式计算资源。
我的问题 - 优化器如何以及何时收集这些统计信息?
在 SQL Server 关系引擎内部,可以隐式或显式创建统计信息,它们会随着写入的发生而老化,并且可以显式刷新或在表维护期间刷新。PolyBase 中是否采用了类似的策略?
鉴于数据可能会被加载到 Hadoop/Azure blob 中而 SQL Server 没有看到它,并且数据量将很大(很可能)通过采样或类似方法创建运行时临时统计数据对我来说似乎不太可能。
PolyBase 统计数据的创建和维护由 DBA 负责。
“入门”指南提供了建立 PolyBase 的几个步骤,最后一个是 CREATE STATISTICS 引用外部表。
有关 CREATE STATISTICS的文档指出:
再往下
由此我得出结论,由系统管理员决定
可以想象,随着产品的成熟和获得牵引力,当前数据引擎的更多功能(自动创建和自动更新统计)将被移植到 PolyBase。另一方面,您真的想在对 5PB 商店进行采样时等待结果吗?