这篇文章主要介绍Delta Lake 0.5.0有什么特性,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
Delta Lake 0.5.0 于2019年12月13日正式发布,正式版本可以到 https://github.com/delta-io/delta/releases/tag/v0.5.0?spm=a2c6h.12873639.0.0.23ea24406RkWrF&file=v0.5.0 下载使用。这个版本支持多种查询引擎查询 Delta Lake 的数据,比如常见的 Hive、Presto 查询引擎。并发操作得到改进。当然,这个版本还是不支持直接使用 SQL 去增删改查 Delta Lake 的数据,这个可能得等到明年1月的 Apache Spark 3.0.0 的发布。
通过使用 manifest 文件来支持多种查询引擎
在之前版本的 Delta Lake,只支持使用 Spark 去查询 Delta Lake 的数据,使得它的使用场景有点限制。但是通过引入了 manifest 文件(参见 #76,https://github.com/delta-io/delta/issues/76?spm=a2c6h.12873639.0.0.152d2440UP8orM),我们可以使用 Presto/Amazon Athena 等查询引擎去查询 Delta Lake 的数据。Amazon Athena 是一种交互式查询服务,让您能够轻松使用标准 SQL 直接分析 Amazon S3 中的数据,其内部是使用 Presto 实现的。
manifest 文件的生成可以使用 Scala, Java, Python 以及 SQL 去实现,具体可以参见 Delta Lake 的最新文档:Presto and Athena to Delta Lake Integration,https://docs.delta.io/0.5.0/presto-integration.html?spm=a2c6h.12873639.0.0.152d2440FjP2qK
除了支持 Presto/Amazon Athena,还支持 Redshift Spectrum(Amazon Redshift 是一种快速、完全托管的 PB 级数据仓库服务,它使得用现有商业智能工具对您的所有数据进行高效分析变得简单而实惠,Amazon Redshift 不能直接分析 S3 上的数据,他需要将 S3 上的数据拷贝到 Amazon Redshift 才行;而 Redshift Spectrum 是 Amazon Redshift 的一项新功能,它支持直接分析 S3 上的数据。)、Snowflake(这个是美国的一家公司的数据湖产品,支持分析 S3 上的数据) 以及 Hive(只支持查 Delta Lake 的数据,不支持 metastore)。
但是毕竟不是通过 manifest 文件实现的,所以有一些 Delta Lake 原生的功能暂不支持,比如数据一致性可能不能保证,底层的模式发生变化上层查询引擎会不感知,得重新建立。具体可以参见 limitations,
https://docs.delta.io/0.5.0/presto-integration.html?spm=a2c6h.12873639.0.0.152d24401m0KhO#limitations
更好的并发操作支持
现在我们可以同时运行更多的 Delta Lake 操作。这个实现是通过将 Delta Lake 乐观并发控制的冲突检测变得更细粒度解决的。这使得我们可以在 Delta Lake 表上运行更加复杂的工作流:
-
在添加新分区时,同时删除旧分区;
-
在不相交的分区上并发地运行更新(updates)和合并(merges);
-
在数据压缩的时候同时对 Delta Lake 添加数据。
具体参见 并发控制,https://docs.delta.io/0.5.0/concurrency-control.html。
改进了对文件压缩的支持
在压缩数据的时候现在可以通过DataFrameWriter的选项 dataChange 设置为 false 来重新编写文件。通过这个选项允许压缩操作与其他批处理和流操作并发运行。关于如何使用可以参见 压缩文件,
https://docs.delta.io/0.5.0/best-practices.html?spm=a2c6h.12873639.0.0.23ea2440hRtZny#compact-files。
改进了纯插入合并( insert-only merge)的性能
Delta Lake 现在为只有插入子句而没有更新子句的合并操作提供了更优化的性能。此外,Delta Lake 确保这种 insert-only merge 操作只会向表中追加(append)新数据。举个例子,常见的 ETL 操作将收集到的数据追加到 Delta Lake 表中,然而,这些源常常会生成重复的日志记录,需要下端来删除这些重复的数据,而有了这个功能,我们可以避免插入重复的记录。具体可以参见 https://docs.delta.io/0.5.0/delta-update.html?spm=a2c6h.12873639.0.0.152d2440yuXqE9#-merge-in-dedup。
通过 SQL 将 Parquet 表转换成 Delta Lake 表
在 Delta Lake 0.4.0 版本,已经支持使用 Scala, Java 以及 Python 来实现这个目的。为了使用更加方便,Delta Lake 0.5.0 版本支持直接通过 SQL 将 Parquet 表转换成 Delta Lake 表,具体如下:
Convert unpartitioned parquet table at path 'path/to/table'
CONVERT TO DELTA parquet.`path/to/table`
Convert partitioned parquet table at path 'path/to/table' and partitioned by integer column named 'part'
CONVERT TO DELTA parquet.`path/to/table` PARTITIONED BY (part int)
以上是“Delta Lake 0.5.0有什么特性”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
原创文章,作者:kirin,如若转载,请注明出处:https://blog.ytso.com/225746.html