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