内容提要
Databricks推出Variant数据类型正式可用,支持灵活摄取半结构化数据(如JSON、XML),无需牺牲查询性能。通过Predictive Optimization的Shredding技术,自动优化字段存储和统计,读取速度比未分片快4倍,比JSON字符串快30倍。已有5000多团队使用,每月处理超5亿查询,适用于流数据和API数据,未来将扩展更多功能。
延伸解读
解决半结构化数据的经典权衡
传统上,处理JSON、XML等半结构化数据需要在灵活性和查询性能之间做出取舍:要么构建ETL管道进行模式化处理,牺牲灵活性;要么以字符串形式存储,保持灵活但查询缓慢。Variant数据类型旨在打破这一权衡,允许灵活摄取数据,同时通过分片技术保持接近结构化数据的查询性能。
分片技术如何提升性能
Variant的分片(Shredding)功能利用Predictive Optimization,根据用户的工作负载和查询模式,通过机器学习自动识别最关键的字段,并将其存储为Parquet文件中的列,同时收集统计信息以优化文件跳过。这减少了扫描的数据量,使得读取速度比未分片的Variant快近4倍,比存储为JSON字符串快30倍。
适用场景与未来扩展
Variant特别适用于处理来自流数据源(如Kinesis、Event Hub)、API的JSON负载以及无模式数据库(如PostgreSQL、MongoDB)的数据,能够灵活应对上游模式变化。目前已有超过5000个团队使用,每月处理超过5亿次查询。未来计划支持按Variant字段进行Liquid Clustering、扩展SQL函数等。
Q&A
什么是 Databricks 的 Variant 数据类型?
Variant 是 Databricks 与 Delta 和 Spark 社区合作引入的一种数据类型,用于灵活摄取半结构化数据(如 JSON、XML),同时保持类似结构化数据的查询性能。它已正式发布,并支持在 Parquet 和 Iceberg 中作为开放标准使用。
Variant 如何解决半结构化数据摄取中的灵活性和性能权衡问题?
传统上,摄取半结构化数据需要在灵活性和性能之间权衡:要么构建 ETL 管道进行模式化以换取快速查询,要么以字符串存储保持灵活性但查询慢。Variant 允许灵活摄取数据,无需预先定义模式,同时通过 Shredding 技术自动优化存储和统计,实现高性能查询。
Variant Shredding 是什么?它如何提升查询性能?
Variant Shredding 是 Databricks 的一项性能优化功能,通过 Predictive Optimization 自动将 Variant 数据中的常见字段提取为底层 Parquet 文件中的列,并收集统计信息以改进文件跳过。这样查询时只扫描必要的文件和列,从而提升性能。
使用 Variant 后,查询性能相比未分片和 JSON 字符串提升了多少?
根据 Databricks 的测试,Variant Shredding 的读取速度比未分片的 Variant 快近 4 倍,比将 JSON 存储为字符串快 30 倍。
哪些场景适合使用 Variant?
Variant 特别适合处理来自流数据源(如 Kinesis、Event Hub)的事件、API 的 JSON 负载,以及来自 PostgreSQL、MongoDB 等数据库的无模式数据。它还能有效应对上游应用改变 API 类型等模式变化,避免下游团队频繁更新管道和回填数据。
如何开始使用 Variant?
用户可以通过 Auto Loader 或流式处理工具(如 Kinesis、Event Hub)将半结构化数据摄取为 Variant,写入 Delta 或 Iceberg 表。还可以使用 Genie Code 在 Lakeflow Pipelines Editor 中通过自然语言生成 Auto Loader 摄取管道。
Variant 的未来规划有哪些?
Databricks 计划扩展 Variant 支持,包括按 Variant 字段进行 Liquid Clustering、扩展 SQL 函数以及进一步的功能集成。