Delta Lake 0.5.0 正式发布,支持包括 Hive/Presto 等多种查询引擎-阿里云开发者社区

开发者社区> Apache Spark中国社区> 正文

Delta Lake 0.5.0 正式发布,支持包括 Hive/Presto 等多种查询引擎

简介: Delta Lake 0.5.0 于2019年12月13日正式发布,这个版本支持多种查询引擎查询 Delta Lake 的数据,比如常见的 Hive、Presto 查询引擎。并发操作得到改进。

Delta Lake 0.5.0 于2019年12月13日正式发布,正式版本可以到 这里 下载使用。这个版本支持多种查询引擎查询 Delta Lake 的数据,比如常见的 Hive、Presto 查询引擎。并发操作得到改进。当然,这个版本还是不支持直接使用 SQL 去增删改查 Delta Lake 的数据,这个可能得等到明年1月的 Apache Spark 3.0.0 的发布。好了,下面我们来详细介绍这个版本的关键特性。

通过使用 manifest 文件来支持多种查询引擎

在之前版本的 Delta Lake,只支持使用 Spark 去查询 Delta Lake 的数据,使得它的使用场景有点限制。但是通过引入了 manifest 文件(参见 #76),我们可以使用 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

除了支持 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

更好的并发操作支持

现在我们可以同时运行更多的 Delta Lake 操作。这个实现是通过将 Delta Lake 乐观并发控制的冲突检测变得更细粒度解决的。这使得我们可以在 Delta Lake 表上运行更加复杂的工作流:

  • 在添加新分区时,同时删除旧分区;
  • 在不相交的分区上并发地运行更新(updates)和合并(merges);
  • 在数据压缩的时候同时对 Delta Lake 添加数据。

具体参见 并发控制

改进了对文件压缩的支持

在压缩数据的时候现在可以通过DataFrameWriter的选项 dataChange 设置为 false 来重新编写文件。通过这个选项允许压缩操作与其他批处理和流操作并发运行。关于如何使用可以参见 压缩文件

改进了纯插入合并( insert-only merge)的性能

Delta Lake 现在为只有插入子句而没有更新子句的合并操作提供了更优化的性能。此外,Delta Lake 确保这种 insert-only merge 操作只会向表中追加(append)新数据。举个例子,常见的 ETL 操作将收集到的数据追加到 Delta Lake 表中,然而,这些源常常会生成重复的日志记录,需要下端来删除这些重复的数据,而有了这个功能,我们可以避免插入重复的记录。具体可以参见 这里

通过 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)

更加完整的文档可以参见 convert-to-delta


本文转载自过往记忆
原文链接: 【Delta Lake 0.5.0 正式发布,支持包括 Hive/Presto 等多种查询引擎】


阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,技术专家直播,问答区数个Spark技术同学每日在线答疑,只为营造纯粹的Spark氛围,欢迎钉钉扫码加入!
二维码.JPG

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

阿里巴巴开源大数据技术团队成立Apache Spark中国技术社区,定期推送精彩案例,问答区数个Spark技术同学每日在线答疑,只为营造纯粹的Spark氛围,欢迎加入!邀请你加入钉钉群聊Apache Spark中国技术交流社区,点击进入查看详情 https://qr.dingtalk.com/action/joingroup?code=v1,k1,X7S/0/QcrLMkK7QZ5sw2oTvoYW49u0g5dvGu7PW+sm4=&_dt_no_comment=1&origin=11

官方博客
官网链接