Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop
在之前版本的 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 表上运行更加复杂的工作流:
具体参见 并发控制。
在压缩数据的时候现在可以通过将 DataFrameWriter 的选项 dataChange
设置为 false 来重新编写文件。通过这个选项允许压缩操作与其他批处理和流操作并发运行。关于如何使用可以参见 压缩文件。
Delta Lake 现在为只有插入子句而没有更新子句的合并操作提供了更优化的性能。此外,Delta Lake 确保这种 insert-only merge 操作只会向表中追加(append)新数据。举个例子,常见的 ETL 操作将收集到的数据追加到 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。
本博客文章除特别声明,全部都是原创!