遷移指南
詳情可參考Databricks官網(wǎng)文章:遷移指南
將工作負(fù)載遷移到Delta Lake
當(dāng)您將工作負(fù)載遷移到Delta-Lake時(shí),您應(yīng)該注意到以下簡(jiǎn)化和與apachespark和apachehive提供的數(shù)據(jù)源相比的區(qū)別。
Delta Lake自動(dòng)處理以下操作,您永遠(yuǎn)不要手動(dòng)執(zhí)行這些操作:
REFRESH TABLE:Delta表始終返回最新信息,因此在更改之后不需要手動(dòng)調(diào)用REFRESH TABLE。
添加和刪除分區(qū):Delta lake自動(dòng)跟蹤表中的分區(qū)集,并在添加或刪除數(shù)據(jù)時(shí)更新列表。因此,不需要運(yùn)行ALTER TABLE[ADD | DROP]PARTITION或MSCK。
加載單個(gè)分區(qū):作為一種優(yōu)化,有時(shí)您可能會(huì)直接加載您感興趣的數(shù)據(jù)分區(qū)。例如,spark.read.parquet("/data/date=2017-01-01")。Delta Lake不需要這樣做,因?yàn)樗梢詮氖聞?wù)日志中快速讀取文件列表以找到相關(guān)文件。如果您對(duì)單個(gè)分區(qū)感興趣,請(qǐng)使用WHERE子句指定它。例如:spark.read.delta("/data").where("date = '2017-01-01'"). 對(duì)于分區(qū)中有許多文件的大型表,這可能比從Parquet表加載單個(gè)分區(qū)(使用直接分區(qū)路徑或WHERE)要快得多,因?yàn)樵谀夸浿辛谐鑫募ǔ1葟氖聞?wù)日志中讀取文件列表慢。
將現(xiàn)有應(yīng)用程序移植到Delta Lake時(shí),應(yīng)避免執(zhí)行以下操作,這些操作會(huì)繞過事務(wù)日志:
手動(dòng)修改數(shù)據(jù):Delta Lake使用事務(wù)日志將更改自動(dòng)提交到表中。因?yàn)槿罩臼鞘聦?shí)的來源,所以Spark不會(huì)讀取已寫出但未添加到事務(wù)日志中的文件。同樣,即使您手動(dòng)刪除文件,事務(wù)日志中仍然存在指向該文件的指針。始終使用本指南中描述的命令來代替手動(dòng)修改存儲(chǔ)在Delta表中的文件。
外部讀取器:直接讀取存儲(chǔ)在Delta Lake中的數(shù)據(jù)。有關(guān)如何讀取Delta表的信息,請(qǐng)參閱Integrations。
示例 假設(shè)您已將Parquet數(shù)據(jù)存儲(chǔ)在directory/data-pipeline 中,并希望創(chuàng)建一個(gè)名為events的表。您始終可以讀入DataFrame并另存為Delta表。這種方法復(fù)制數(shù)據(jù),并讓Spark管理表。另外,您可以轉(zhuǎn)換到較快的Delta Lake,但會(huì)導(dǎo)致表格不受管理。
另存為Delta表
將數(shù)據(jù)讀入DataFrame并將其保存為以下delta格式的新目錄:
Python
%pyspark data = spark.read.parquet("/data-pipeline") data.write.format("delta").save("/mnt/delta/data-pipeline/")
創(chuàng)建一個(gè)Delta表events,該表引用Delta Lake目錄中的文件:
Python
%pyspark spark.sql("CREATE TABLE events USING DELTA LOCATION '/mnt/delta/data-pipeline/'")
轉(zhuǎn)換為增量表
您有兩種選擇將Parquet表轉(zhuǎn)換為Delta表:
將文件轉(zhuǎn)換為Delta Lake格式并創(chuàng)建Delta表:
SQL
%sql CONVERT TO DELTA parquet.`/data-pipeline/` CREATE TABLE events USING DELTA LOCATION '/data-pipeline/'
創(chuàng)建Parquet表并轉(zhuǎn)換為Delta表:
SQL
%sql CREATE TABLE events USING PARQUET OPTIONS (path '/data-pipeline/') CONVERT TO DELTA events