常見問題(FAQ)
詳情請參考Databricks官網(wǎng)文章:常見問題
什么是 Delta Lake?
Delta Lake是一個開源存儲層,可為數(shù)據(jù)湖帶來可靠性。Delta Lake提供ACID事務(wù),可伸縮的元數(shù)據(jù)處理,并統(tǒng)一流處理和批數(shù)據(jù)處理。Delta Lake在您現(xiàn)有的數(shù)據(jù)湖之上運行,并且與Apache Spark API完全兼容。
Databricks上的Delta Lake允許您根據(jù)工作負載模式配置Delta Lake,并提供優(yōu)化的布局和索引以進行快速的交互式查詢。
Delta Lake與Apache Spark有何關(guān)系?
Delta Lake位于Apache Spark之上。格式和計算層有助于簡化大數(shù)據(jù)管道的構(gòu)建并提高管道的整體效率。
Delta Lake使用什么格式存儲數(shù)據(jù)?
Delta Lake使用版本化的Parquet文件將您的數(shù)據(jù)存儲在您的云存儲中。除版本外,Delta Lake還存儲事務(wù)日志,以跟蹤對表或Blob存儲目錄所做的所有提交,以提供ACID事務(wù)。
如何使用Delta Lake讀寫數(shù)據(jù)?
您可以使用自己喜歡的Apache Spark API來使用Delta Lake讀寫數(shù)據(jù)。
Delta Lake在哪里存儲數(shù)據(jù)?
寫入數(shù)據(jù)時,您可以指定云存儲中的位置。Delta Lake以Parquet格式將數(shù)據(jù)存儲在該位置。
我可以直接將數(shù)據(jù)流式傳輸?shù)紻elta表中嗎?
是的,您可以使用結(jié)構(gòu)化流直接將數(shù)據(jù)寫入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參數(shù),您永遠不要手動指定:
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] 帶有靜態(tài)分區(qū)的表
INSERT OVERWRITE TABLE 用于具有動態(tài)分區(qū)的表
Bucketing
從表中讀取時指定架構(gòu)
在TRUNCATE表中使用PARTITION(part_spec)指定目標分區(qū)
Delta Lake是否支持多表事務(wù)?
Delta Lake不支持多表事務(wù)和外鍵。Delta Lake支持表級別的事務(wù)。
如何更改列的類型?
更改列的類型或刪除列需要重寫表。有關(guān)示例,請參見更改列類型。
Delta Lake支持多集群寫入,這意味著什么?
這意味著Delta Lake會進行鎖定,以確保同時從多個集群寫入表的查詢不會損壞該表。但是,這并不意味著如果存在寫沖突(例如,更新和刪除同一事件),則它們都會成功。相反,寫入操作將以原子的方式失敗,并且該錯誤將告訴您重試該操作。
多集群寫入的局限性是什么?
在此模式下運行時,不支持以下功能:
SparkR
使用<DBR 7.2>及更低版本執(zhí)行spark-submit作業(yè)。使用<DBR 7.3>及更高版本運行spark-submit作業(yè)支持多集群寫入。
客戶提供的加密密鑰的服務(wù)器端加密
您可以通過將設(shè)置spark.databricks.delta.multiClusterWrites.enabled為來禁用多集群寫入false。如果禁用它們,對單個表的寫入必須來自單個集群。
我可以在Databricks Runtime之外訪問Delta表嗎?
有兩種情況需要考慮:外部寫入和外部讀取。
外部寫入:Delta Lake以事務(wù)日志的形式維護其他元數(shù)據(jù),以啟用ACID事務(wù)和讀取器的快照隔離。為了確保正確更新事務(wù)日志并執(zhí)行正確的驗證,寫操作必須通過Databricks Runtime
外部讀取:增量表存儲以開放格式(Parquet)編碼的數(shù)據(jù),允許其他了解此格式的工具讀取數(shù)據(jù)。有關(guān)如何讀取Delta表的信息。