常见问题(FAQ)

说明

详情请参考Databricks官网文章:常见问题

什么是 Delta Lake?

Delta Lake是一个开源存储层,可为数据湖带来可靠性。Delta Lake提供ACID事务,可伸缩的元数据处理,并统一流处理和批数据处理。Delta Lake在您现有的数据湖之上运行,并且与Apache Spark API完全兼容。

Databricks上的Delta Lake允许您根据工作负载模式配置Delta Lake,并提供优化的布局和索引以进行快速的交互式查询。

Delta Lake与Apache Spark有何关系?

Delta Lake位于Apache Spark之上。格式和计算层有助于简化大数据管道的构建并提高管道的整体效率。

Delta Lake使用什么格式存储数据?

Delta Lake使用版本化的Parquet文件将您的数据存储在您的云存储中。除版本外,Delta Lake还存储事务日志,以跟踪对表或Blob存储目录所做的所有提交,以提供ACID事务。

如何使用Delta Lake读写数据?

您可以使用自己喜欢的Apache Spark API来使用Delta Lake读写数据。

Delta Lake在哪里存储数据?

写入数据时,您可以指定云存储中的位置。Delta Lake以Parquet格式将数据存储在该位置。

我可以直接将数据流式传输到Delta表中吗?

是的,您可以使用结构化流直接将数据写入Delta表并从Delta表中读取。

Delta Lake是否支持使用Spark Streaming DStream API进行写入或读取?

Delta不支持DStream API。我们建议进行表流读取和写入。

使用Delta Lake时,是否可以轻松地将代码移植到其他Spark平台?

是。使用Delta Lake时,您将使用开放的Apache Spark API,因此可以轻松地将代码移植到其他Spark平台。要移植代码,请将deltaformat替换为parquet格式。

Delta表与Hive SerDe表相比如何?

Delta表的管理程度更高。特别是,Delta Lake代表您管理的多个Hive SerDe参数,您永远不要手动指定:

  • ROWFORMAT

  • SERDE

  • OUTPUTFORMAT 和 INPUTFORMAT

  • COMPRESSION

  • STORED AS

Delta Lake不支持哪些DDL和DML功能?

不支持的DDL功能:

  • ANALYZE TABLE PARTITION

  • ALTER TABLE [ADD|DROP] PARTITION

  • ALTER TABLE RECOVER PARTITIONS

  • ALTER TABLE SET SERDEPROPERTIES

  • CREATE TABLE LIKE

  • INSERT OVERWRITE DIRECTORY

  • LOAD DATA

不支持的DML功能:

  • INSERT INTO [OVERWRITE] 带有静态分区的表

  • INSERT OVERWRITE TABLE 用于具有动态分区的表

  • Bucketing

  • 从表中读取时指定架构

  • 在TRUNCATE表中使用PARTITION(part_spec)指定目标分区

Delta Lake是否支持多表事务?

Delta Lake不支持多表事务和外键。Delta Lake支持表级别的事务。

如何更改列的类型?

更改列的类型或删除列需要重写表。有关示例,请参见更改列类型。

Delta Lake支持多集群写入,这意味着什么?

这意味着Delta Lake会进行锁定,以确保同时从多个集群写入表的查询不会损坏该表。但是,这并不意味着如果存在写冲突(例如,更新和删除同一事件),则它们都会成功。相反,写入操作将以原子的方式失败,并且该错误将告诉您重试该操作。

多集群写入的局限性是什么?

在此模式下运行时,不支持以下功能:

  • SparkR

  • 使用<DBR 7.2>及更低版本执行spark-submit作业。使用<DBR 7.3>及更高版本运行spark-submit作业支持多集群写入。

  • 客户提供的加密密钥的服务器端加密

您可以通过将设置spark.databricks.delta.multiClusterWrites.enabled为来禁用多集群写入false。如果禁用它们,对单个表的写入必须来自单个集群。

我可以在Databricks Runtime之外访问Delta表吗?

有两种情况需要考虑:外部写入和外部读取。

  • 外部写入:Delta Lake以事务日志的形式维护其他元数据,以启用ACID事务和读取器的快照隔离。为了确保正确更新事务日志并执行正确的验证,写操作必须通过Databricks Runtime

  • 外部读取:增量表存储以开放格式(Parquet)编码的数据,允许其他了解此格式的工具读取数据。有关如何读取Delta表的信息。