让Spark SQL知道Primary,Foreign,Not NULL约束的方法

Bos*_*ian 7 apache-spark apache-spark-sql

我来自关系数据库世界,所以我有点困惑,Spark SQL 似乎没有利用任何模式约束,如主键、外键和非空约束。

我相信这就是为什么我总是观察到notnull查询计划中存在一些冗余检查。

所以我的问题是,如果数据源定义了这些约束,是否有任何可能的方法让 Spark SQL 利用这些约束?

谢谢。

the*_*tom 4

SPARK 与 RDBMS 不同。它是一个处理引擎,但这个问题肯定有其价值。

IBM,请参阅https://developer.ibm.com/blogs/performance-enhancements-in-spark-using-referential-integrity-constraints/,已在该领域开展了增强 Spark、Catalyst 和 Optimize 规则的工作,请参阅https:// /issues.apache.org/jira/browse/SPARK-19842

去引用:

Spark 中的信息引用完整性约束支持

这项工作提出了在 Spark 中支持信息主键和外键(引用完整性)约束。主要目的是开辟依赖引用完整性约束语义的查询优化技术领域。

信息或统计约束是 Spark 可以用来提高查询性能的约束,例如唯一约束、主键约束、外键约束或检查约束。Spark SQL 引擎不强制执行信息约束;相反,Catalyst 使用它们来优化查询处理。它们提供的语义信息允许 Catalyst 重写查询以消除联接、下推聚合、删除不必要的 Distinct 操作以及执行许多其他优化。信息约束主要针对加载和分析源自数据仓库的数据的应用程序。对于此类应用程序,已知给定约束的条件为真,因此不需要在数据加载操作期间强制执行该约束。

所附文档涵盖约束定义、元存储、约束验证和维护。该文档展示了许多利用引用完整性约束并可以在 Spark 中实现的查询性能改进示例。

在此输入图像描述

因此,随着 Catalyst 的改进,将会添加更多这种支持,但不是现在。