工程的博客

模式演化在三角洲湖的合并操作和运营指标

三角洲湖0.6.0引入了模式演化和性能改进合并操作指标表的历史

2020年5月19日, 工程的博客

分享这篇文章
试试这个笔记本复制下面的步骤

我们最近宣布的释放三角洲湖0.6.0在合并引入了模式演化和性能改进和操作指标表的历史。这个版本的主要特点是:

  • 支持模式演化合并操作(# 170)——你现在可以自动进化模式的表合并操作。这是有用的在你想插入的场景变化数据表和数据的模式会随着时间而改变。而不是检测和应用模式变化在插入之前,合并可以同时发展模式和插入更改。看到文档获取详细信息。
  • 改善合并性能自动重新分区(# 349)- - -当合并到分区表时,您可以选择自动重新分配数据的分区列前写作。在分区表的合并操作的情况下速度慢的原因是它生成许多小文件(# 345),使自动重新分区(spark.delta.merge.repartitionBeforeWrite)可以提高性能。看到文档获取详细信息。
  • 改进的性能在没有插入条款(# 342)- - -现在你可以获得更好的性能在合并操作如果它没有任何插入条款。
  • 在描述历史操作指标(# 312)- - -现在你可以看到操作指标(例如,文件数量和行改变)写道,更新和删除操作在三角洲表的表的历史。看到文档获取详细信息。
  • 从任何文件系统支持阅读三角洲表(# 347)- - -现在你可以读三角洲Hadoop文件系统表在任何存储系统实现。然而,写作三角洲表仍然需要配置一个LogStore实现存储系统提供了必要的保证。看到文档获取详细信息。

模式演化的合并操作

正如早些时候发布的三角洲湖,湖三角洲包括的能力执行合并操作简化你的插入/更新/删除操作在一个单一的原子操作以及包括的能力实施和发展模式(也可以发现更多细节技术讨论)。释放的三角洲0.6.0湖,您现在可以发展模式在合并操作。

让我们展示这个及时通过使用一个例子;你可以找到原来的代码示例这个笔记本。我们将从一个小的子集2019年的小说《冠状病毒COVID-19 (2019 - ncov)由约翰霍普金斯CSSE数据存储库我们有可用的数据集/ databricks-datasets。这是一个数据集常用的研究人员和分析师获得一些启示的病例数COVID-19整个世界。与数据的一个问题是,模式会随着时间而改变。

例如,文件代表COVID-19病例从3月1日- 3月21日(2020年4月30日)有以下模式:

#进口old_dataold_data = (spark.read.option (“inferSchema”,真正的).option (“头”,真正的)…. csv (/ databricks-datasets / COVID /…/03- - - - - -21- - - - - -2020年. csv))old_data.printSchema ()| - - -省/州:字符串(可空=真正的)|——国家/地区:字符串(可空=真正的)|——最后更新:时间戳(可空=真正的)|——确认:整数(可空=真正的)|——死亡:整数(可空=真正的)|——恢复:整数(可空=真正的)|——纬度:(可空=真正的)|——经度:(可空=真正的)

但从3月22日开始的文件(截至4月30日)附加列包括FIPS Admin2,活跃,Combined_Key。

new_data = (spark.read.option (“inferSchema”,真正的).option (“头”,真正的)…. csv (/ databricks-datasets / COVID /…/04- - - - - -21- - - - - -2020年. csv))new_data.printSchema ()
              |——FIPS:整数(可空=真正的)|——Admin2:字符串(可空=真正的)|——Province_State:字符串(可空=真正的)|——Country_Region:字符串(可空=真正的)|——Last_Update:字符串(可空=真正的)|——纬度:(可空=真正的)|——Long_:(可空=真正的)|——确认:整数(可空=真正的)|——死亡:整数(可空=真正的)|——恢复:整数(可空=真正的)|——活跃:整数(可空=真正的)|——Combined_Key:字符串(可空=真正的)

在我们的示例代码中,我们重命名的一些列(例如Long_ - >经度,省/州- > Province_State,等等),它们在语义上是相同的。而不是进化表模式,我们只是改名为列。

如果模式的关键问题是合并在一起,我们可以使用三角洲湖的模式演化特性使用“mergeSchema”选项DataFrame.write (),如以下所示的声明。

new_data.write.option (“mergeSchema”,“真正的”).mode (“添加”).save(路径)

但是如果您需要更新现有的价值和合并模式在同一时间吗?与三角洲湖0.6.0,这可以与实现合并操作的模式演化。可视化,我们首先回顾的old_data一行

old_data。选择("process_date", "Province_State", "Country_Region", "Last_Update", "Confirmed").显示()+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|Province_State|Country_Region|Last_Update|确认|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|2020年-03年-21年|华盛顿|我们|2020年-03年-21年22:43:04|1793年|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

接下来让我们模拟一个更新条目之后new_data的模式

#模拟一个更新的条目项= [(53,,“华盛顿”,“我们”,2020 - 04 - 27 t19:00:00,47.4009,121.4905,1793年,94年,0,,,“2020-03-21”,2)]关口= [“FIPS”,“Admin2”,“Province_State”,“Country_Region”,“Last_Update”,“纬度”,“经”,“确认”,“死亡”,“恢复”,“活跃”,“Combined_Key”,“process_date”,“水平”]simulated_update =火花。createDataFrame(项目、峡路)

和工会simulated_update new_data共有40行

new_data。选择("process_date", "FIPS", "Province_State", "Country_Region", "Last_Update", "Confirmed").sort(col("FIPS")).显示(5)+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|FIPS|Province_State|Country_Region|Last_Update|确认|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|2020年-03年-21年|53|华盛顿|我们|2020年-04年-27年T19:00:00|1793年||2020年-04年-11年|53001年|华盛顿|我们|2020年-04年-11年22:45:33|30.||2020年-04年-11年|53003年|华盛顿|我们|2020年-04年-11年22:45:33|4||2020年-04年-11年|53005年|华盛顿|我们|2020年-04年-11年22:45:33|244年||2020年-04年-11年|53007年|华盛顿|我们|2020年-04年-11年22:45:33|53|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +

我们设置以下参数来配置您的环境自动模式演化:

#启用自动模式演化spark.sql (“设置spark.databricks.delta.schema.autoMerge.enabled = true”)

现在我们可以运行一个单一的原子操作来更新值(从3/21/2020)以及新模式合并在一起使用以下语句。

三角洲。表导入*deltaTable=DeltaTable。DELTA_PATH forPath(火花)#模式演化一个合并操作deltaTable.alias (“t”)。合并(new_data.alias (“s”),”年代。process_date = t。process_dateAND s.province_state = t.province_state AND s.country_region = t.country_region AND s.level = t.level").whenMatchedUpdateAll ().whenNotMatchedInsertAll ()。执行()

我们来回顾一下三角洲湖表用下面的语句:

#加载数据spark.read.format(“δ”).load (DELTA_PATH)选择(“process_date”、“FIPS”、“Province_State”、“Country_Region”,“Last_Update”,“确认”、“Admin2”).sort(坳(FIPS))显示()+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|process_date|FIPS|Province_State|Country_Region|Last_Update|确认|管理|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +|2020年-03年-21年|53|华盛顿|我们|2020年-04年-27年T19:00:00|1793年|||2020年-04年-11年|53001年|华盛顿|我们|2020年-04年-11年22:45:33|30.|亚当斯||2020年-04年-11年|53003年|华盛顿|我们|2020年-04年-11年22:45:33|4|Asotin||2020年-04年-11年|53005年|华盛顿|我们|2020年-04年-11年22:45:33|244年|本顿||2020年-04年-11年|53007年|华盛顿|我们|2020年-04年-11年22:45:33|53|Chelan|+- - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +

运营指标

可以进一步深入操作指标通过查看三角洲湖历史表(operationMetrics列)火花UI中通过运行以下声明:

deltaTable.history ()。显示()

下面是一个简短的前面的命令的输出。

+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|版本|用户标识|操作|operationMetrics|+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|1|100802年|合并|[numTargetRowsCop……||0|100802年||[numFiles- - - - - ->1n…|+- - - - - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +

你会发现两个版本的表,一个用于旧模式和新模式的另一个版本。当回顾下面的操作指标,它指出,有39行插入和1行更新。

{“numTargetRowsCopied”:“0”,“numTargetRowsDeleted”:“0”,{“numTargetRowsCopied”:“0”,“numTargetRowsDeleted”:“0”,“numTargetFilesAdded”:“3”,“numTargetRowsInserted”:“39”,“numTargetRowsUpdated”:“1”,“numOutputRows”:“40”,“numSourceRows”:“40”,“numTargetFilesRemoved”:“1”}“numTargetFilesAdded”:“3”,“numTargetRowsInserted”:“39”,“numTargetRowsUpdated”:“1”,“numOutputRows”:“40”,“numSourceRows”:“40”,“numTargetFilesRemoved”:“1”}

你可以了解更多关于这些操作指标背后的细节通过将SQL选项卡中的火花UI。

运营指标的一个例子现在可供审查通过三角洲湖0.6.0火花UI

GIF动画调用出火花UI的主要组件为您的回顾。

  1. 39初始行从一个文件中(与新模式4/11/2020)创建初始new_data DataFrame
  2. 1模拟更新行生成,与new_data DataFrame
  3. 1行从一个文件中(与旧模式3/21/2020)创建了old_data DataFrame。
  4. SortMergeJoin用来连接两个DataFrames一起坚持我们的三角洲湖表。

将深入研究如何解释这些操作指标,检查深入三角洲湖第3部分:如何删除、更新和合并工作技术说话

ADiving湖成三角洲第3部分:如何删除、更新和合并工作技术说话。

开始使用δ0.6.0湖

尝试三角洲湖与前面的代码片段在Apache火花2.4.5(或更大)的实例(在砖上,试试这个DBR 6.6 +)。湖泊三角洲湖使您的数据更可靠(不管你创建一个新的或现有的数据迁移湖)。要了解BOB低频彩更多,请参考https://delta.io/,并加入三角洲湖社区通过松弛谷歌集团。你可以跟踪所有的即将推出,计划特性GitHub的里程碑。你也可以尝试管理三角洲湖在砖免费帐户。

学分

我们想要感谢下列贡献者更新,doc变化,和贡献在三角洲湖0.6.0:阿里Afroozeh Anurag870,安德鲁•福格蒂Burak•, Erik LaBianca Gengliang Wang IonutBoicuAms, Jakub Orłowski,何塞•托雷斯KevinKarlBob,迈克尔•Armbrust Pranav Anand,拉胡尔Govind,拉胡尔从诙谐,Shixiong朱、史蒂夫•Suh如来佛Das,盖张汤姆·范Bussel韦斯利·霍夫曼,小李,切特,尤金Koifman,范龙佩(Herman van Hovell, hongdd, lswyyy, lys0716,马哈茂德•马赫迪玛丽安薛

免费试着砖

相关的帖子

看到所有工程的博客的帖子