内容提要
Databricks 引入了一种新的数据类型,称为 Variant,与 JSON 字符串相比,它在存储半结构化数据方面提供了更好的性能。这种数据类型允许支持嵌套和不断演变的模式,具有灵活性。Variant 对于涉及半结构化数据的用例特别有用,例如端点检测与响应(EDR)、广告点击分析和物联网遥测。Variant 的实现是开源的,将包含在 Spark 4.0 和 Delta 4.0 中。与字符串相比,它提供了更快的数据访问和导航。Variant 支持无模式数据源,并在性能上显著优于传统方法。
延伸解读
Variant 如何解决半结构化数据的痛点
传统上,处理半结构化数据时,用户往往面临两难:将 JSON 存储为字符串可以保持灵活性,但查询性能差;而使用严格模式(如 struct)虽然性能好,却需要维护和更新模式,难以适应快速变化的 schema。Variant 数据类型允许在不定义显式模式的情况下,获得与结构化数据相近的性能,从而兼顾灵活性和效率。
性能提升与基准测试
根据 Databricks 的基准测试,在嵌套和扁平模式下,Variant 相比字符串列的查询性能提升了 8 倍。这些测试基于客户数据模式,在启用 Photon 的 Databricks Runtime 15.0 上进行。这意味着对于 EDR、广告点击分析等场景,使用 Variant 可以显著减少查询延迟和计算资源消耗。
开源与生态系统
Variant 的实现已贡献给 Apache Spark 和 Delta Lake 开源社区,包括数据类型、二进制表达式和编码格式。二进制编码格式封装在开源库中,可供其他项目使用。Variant 将包含在 Spark 4.0 和 Delta 4.0 中,避免了专有数据仓库的锁定问题,促进了开放数据生态的发展。
使用方式与未来计划
用户可以通过 PARSE_JSON() 函数将 JSON 字符串转换为 Variant 类型,并使用点号语法导航路径。Variant 支持 CTAS 和 COPY INTO 等方式加载数据。未来计划实现 shredding 技术,将特定路径存储在单独的列中,以进一步提升查询性能并减少 IO。Variant 将在 Databricks Runtime 15.3 中默认启用,供用户测试。
Q&A
Variant 数据类型的主要优势是什么?
Variant 数据类型在存储半结构化数据时性能优于 JSON 字符串,提供更快的数据访问和导航。
Variant 数据类型适用于哪些用例?
Variant 特别适用于端点检测与响应(EDR)、广告点击分析和物联网遥测等用例。
如何在 Databricks 中使用 Variant 数据类型?
用户可以通过创建 Variant 类型的表列,使用 PARSE_JSON() 函数将 JSON 字符串转换为 Variant。
Variant 数据类型的开源实现包含哪些内容?
Variant 数据类型、二进制表达式和二进制编码格式已合并到开源 Spark 中,并支持 Delta。
Variant 数据类型在性能基准测试中表现如何?
在性能基准测试中,Variant 在处理嵌套和扁平模式时,性能比字符串提高了 8 倍。
未来对 Variant 数据类型有哪些计划?
未来计划实现 Variant 类型的分片技术,以提高查询特定路径的性能。