教程:三角洲湖

本教程介绍常见三角洲湖砖上的操作,包括以下:

您可以运行Python的例子中,R, Scala,本文从内部的SQL代码笔记本附加到一个砖集群。你也可以从内部运行本文中的SQL代码查询关联到一个SQL仓库砖的SQL

请注意

下面的代码示例使用两级的一些命名空间符号组成的一个模式(也称为一个数据库)和一个表或视图(例如,default.people10m)。使用这些示例统一目录,更换二级与三级统一目录名称空间名称空间符号组成的一个目录,模式和表或视图(例如,main.default.people10m)。

创建一个表

所有表上创建数据砖使用默认三角洲湖。

请注意

三角洲湖是默认为所有的读,写,在砖和表创建命令运行时8.0及以上。您可以使用δ关键字指定格式如果使用运行时7.3 LTS砖。

#从源头装载数据。df=火花负载(“/ databricks-datasets / learning-spark-v2 /人/ people-10m.delta”)#写数据表。table_name=“people_10m”dfsaveAsTable(table_name)
图书馆(SparkR)sparkR.session()#从源头装载数据。df=read.df(路径=“/ databricks-datasets / learning-spark-v2 /人/ people-10m.delta”)#写数据表。table_name=“people_10m”saveAsTable(df=df,的表=table_name)
/ /加载数据从其来源。瓦尔=火花负载(“/ databricks-datasets / learning-spark-v2 /人/ people-10m.delta”)/ /写数据表。瓦尔table_name=“people_10m”saveAsTable(“people_10m”)
下降如果存在people_10m;创建如果存在people_10m作为选择*δ' /- - - - - -数据集/学习- - - - - -火花- - - - - -v2//- - - - - -10δ;

前面的操作创建一个新的管理表通过从数据推断的模式。信息可用选项创建一个增量表时,看到的创建表

对于管理表,砖决定数据的位置。的位置,您可以使用描述的细节语句,例如:

显示(火花sql(“描述细节people_10m”))
显示(sql(“描述细节people_10m”))
显示(火花sql(“描述细节people_10m”))
描述细节people_10m;

有时候您可能想要创建一个表插入数据之前通过指定的模式。你可以使用以下SQL命令完成这个:

创建如果存在people10m(idINT,firstName字符串,middleName字符串,字符串,性别字符串,生日时间戳,ssn字符串,工资INT)创建取代people10m(idINT,firstName字符串,middleName字符串,字符串,性别字符串,生日时间戳,ssn字符串,工资INT)

在砖运行时13.0及以上的,你可以使用创建就像创建一个新的空三角洲表复制模式和表源三角洲的属性表。这可以促进表时特别有用的开发环境投入生产,如以下代码示例:

创建刺激people10m就像devpeople10m

您还可以使用DeltaTableBuilderAPI在三角洲湖创建表。相比DataFrameWriter API,该API可以更容易地指定附加信息,如专栏评论,表属性,和生成的列

预览

这个特性是在公共预览

请注意

这个特性可以在砖运行时8.3及以上。

#在metastore创建表DeltaTablecreateIfNotExists(火花)\的表(“default.people10m”)\addColumn(“id”,“INT”)\addColumn(“firstName”,“字符串”)\addColumn(“middleName”,“字符串”)\addColumn(“姓”,“字符串”,评论=“姓”)\addColumn(“性别”,“字符串”)\addColumn(“生日”,“时间戳”)\addColumn(“ssn”,“字符串”)\addColumn(“工资”,“INT”)\执行()#创建或替换表与路径,并添加属性DeltaTablecreateOrReplace(火花)\addColumn(“id”,“INT”)\addColumn(“firstName”,“字符串”)\addColumn(“middleName”,“字符串”)\addColumn(“姓”,“字符串”,评论=“姓”)\addColumn(“性别”,“字符串”)\addColumn(“生日”,“时间戳”)\addColumn(“ssn”,“字符串”)\addColumn(“工资”,“INT”)\财产(“描述”,“与人数据表”)\位置(“/ tmp /δ/ people10m”)\执行()
/ /创建metastore表DeltaTablecreateOrReplace(火花)的表(“default.people10m”)addColumn(“id”,“INT”)addColumn(“firstName”,“字符串”)addColumn(“middleName”,“字符串”)addColumn(DeltaTablecolumnBuilder(“姓”)数据类型(“字符串”)评论(“姓”)构建())addColumn(“姓”,“字符串”,评论=“姓”)addColumn(“性别”,“字符串”)addColumn(“生日”,“时间戳”)addColumn(“ssn”,“字符串”)addColumn(“工资”,“INT”)执行()/ /创建或替换表与路径,并添加属性DeltaTablecreateOrReplace(火花)addColumn(“id”,“INT”)addColumn(“firstName”,“字符串”)addColumn(“middleName”,“字符串”)addColumn(DeltaTablecolumnBuilder(“姓”)数据类型(“字符串”)评论(“姓”)构建())addColumn(“姓”,“字符串”,评论=“姓”)addColumn(“性别”,“字符串”)addColumn(“生日”,“时间戳”)addColumn(“ssn”,“字符串”)addColumn(“工资”,“INT”)财产(“描述”,“与人数据表”)位置(“/ tmp /δ/ people10m”)执行()

插入一个表

合并一组更新和插入到现有δ表,您使用合并成声明。例如,下面的语句将数据从源表合并成目标三角洲表。当两个表中有一个匹配的行,三角洲湖更新数据列使用给定的表达式。当没有匹配的行,三角洲湖添加一个新行。该操作被称为一个插入

创建取代临时视图people_updates(id,firstName,middleName,,性别,生日,ssn,工资)作为(9999998,“比利”,“汤米·”,“Luppitt”,“米”,1992 - 09 - 17 t04:00:00.000 + 0000的,“953-38-9452”,55250年),(9999999,“伊莱亚斯”,“西里尔”,“利百特”,“米”,1984 - 05 - 22 t04:00:00.000 + 0000的,“906-51-2137”,48500年),(10000000,“约书亚”,‘底盘’,“Broggio”,“米”,1968 - 07 - 22 t04:00:00.000 + 0000的,“988-61-6247”,90000年),(20000001,“约翰。”,,“母鹿”,“米”,1978 - 01 - 14 - t04:00:00.000 + 000的,“345-67-8901”,55500年),(20000002,“玛丽”,,“史密斯”,“F”,1982 - 10 - 29 t01:00:00.000 + 000,“456-78-9012”,98250年),(20000003,“简”,,“母鹿”,“F”,1981 - 06 - 25 - t04:00:00.000 + 000的,“567-89-0123”,89900年);合并people_10m使用people_updatespeople_10mid=people_updatesid匹配然后更新*匹配然后插入*;

如果您指定*,这更新或插入目标表中的所有列。这假设源表具有相同的列的目标表,否则查询将抛出一个错误分析。

你必须为每一列指定值表当您执行一个插入操作(例如,当现有的数据集)中的没有匹配的行。然而,你不需要更新所有的值。

看到结果,查询该表。

选择*people_10m在哪里id> =9999998

读一个表

你访问数据在三角洲表的表名或表路径,如以下示例所示:

people_df=火花(table_name)显示(people_df)# #或people_df=火花负载(table_path)显示(people_df)
people_df=tableToDF(table_name)显示(people_df)
瓦尔people_df=火花(table_name)显示(people_df)\ \orgydF4y2Ba瓦尔people_df=火花负载(table_path)显示(people_df)
选择*people_10m;选择*δ' <路径- - - - - -- - - - - -;

写一个表

三角洲湖使用标准语法写入数据表。

自动将新数据添加到现有的差值表,使用附加模式,下面的例子:

插入people10m选择*more_people
df模式(“添加”)saveAsTable(“people10m”)
df模式(“添加”)。saveAsTable(“people10m”)

自动替换表中的所有数据,使用覆盖模式,下面的例子:

插入覆盖people10m选择*more_people
df模式(“覆盖”)saveAsTable(“people10m”)
df模式(“覆盖”)。saveAsTable(“people10m”)

更新一个表

你可以更新数据相匹配的谓词在三角洲表。例如,在一个表命名people10m或一个路径/ tmp /δ/ people-10m,改变的缩写性别列从orgydF4y2BaF男性orgydF4y2Ba,您可以运行下面的:

更新people10m性别=“女”在哪里性别=“F”;更新people10m性别=“男”在哪里性别=“米”;更新δ' /tmp/δ/- - - - - -10性别=“女”在哪里性别=“F”;更新δ' /tmp/δ/- - - - - -10性别=“男”在哪里性别=“米”;
delta.tables进口*pyspark.sql.functions进口*deltaTable=DeltaTableforPath(火花,“/ tmp /δ/ people-10m”)#声明使用SQL-formatted字符串谓词。deltaTable更新(条件=“性别= ' F '”,={“性别”:“女”})#使用谓词的火花SQL函数声明。deltaTable更新(条件=上校(“性别”)= =“米”,={“性别”:点燃(“男”)})
进口ioδ_瓦尔deltaTable=DeltaTableforPath(火花,“/ tmp /δ/ people-10m”)/ /声明使用SQL-formatted字符串谓词。deltaTableupdateExpr(“性别= ' F '”,地图(“性别”- >“女”)进口orgapache火花sql功能_进口火花值得一提的_/ /声明使用火花值得一提的是SQL函数和谓词。deltaTable更新(上校(“性别”)= = =“M”,地图(“性别”- >点燃(“男性”)));

删除从表

您可以删除数据匹配谓词从三角洲表。例如,在一个表命名people10m或一个路径/ tmp /δ/ people-10m删除所有行对应于人的价值生日之前的列1955年,您可以运行下面的:

删除people10m在哪里生日<“1955-01-01”删除δ' /tmp/δ/- - - - - -10在哪里生日<“1955-01-01”
delta.tables进口*pyspark.sql.functions进口*deltaTable=DeltaTableforPath(火花,“/ tmp /δ/ people-10m”)#声明使用SQL-formatted字符串谓词。deltaTable删除(“生日< 1955-01-01”)#使用谓词的火花SQL函数声明。deltaTable删除(上校(“生日”)<“1960-01-01”)
进口ioδ_瓦尔deltaTable=DeltaTableforPath(火花,“/ tmp /δ/ people-10m”)/ /声明使用SQL-formatted字符串谓词。deltaTable删除(“生日< 1955-01-01”)进口orgapache火花sql功能_进口火花值得一提的_/ /声明使用火花值得一提的是SQL函数和谓词。deltaTable删除(上校(“生日”)<“1955-01-01”)

重要的

删除从三角洲的最新版本中删除数据表,但不删除它从物理存储到旧版本明确真空的。看到真空获取详细信息。

显示表的历史

查看表的历史,使用描述历史表声明,它提供了来源的信息,包括版本,操作,用户,等等,每个写一个表。

描述历史people_10m

查询的一个早期版本表(时间旅行)

三角洲湖时间旅行允许您查询一个年长的三角洲表的快照。

查询一个旧版本的表,指定一个版本或时间戳选择声明。例如,要从历史查询版本0以上,使用:

选择*people_10m版本作为0

orgydF4y2Ba

选择*people_10m时间戳作为“2019-01-29 00:37:58”

时间戳,只接受日期或时间戳字符串,例如,“2019-01-01”“2019 - 01 - 01 - 00:00:00.000Z”

DataFrameReader选项允许你创建一个从三角洲DataFrame表是固定到一个特定版本的表,例如在Python中:

df1=火花格式(“δ”)选项(“timestampAsOf”,“2019-01-01”)(“people_10m”)显示(df1)

或者,交替:

df2=火花格式(“δ”)选项(“versionAsOf”,0)(“people_10m”)显示(df2)

有关详细信息,请参见工作与三角洲湖表的历史

优化一个表

一旦完成多个更改一个表,你可能会有很多小文件。提高阅读的速度查询,您可以使用优化崩溃的小文件到较大的:

优化people_10m

z值的列

为了进一步提高读取性能,您可以在同一组共同部署相关信息由z值的文件。自动使用这个co-locality三角洲湖data-skipping算法极大地减少了需要读取的数据量。z值数据,在指定的列顺序ZORDER通过条款。例如,在同一个地点协同工作性别运行:

优化people_10mZORDER通过(性别)

全套的运行时选项优化,请参阅紧凑的数据文件与优化在三角洲湖

清理与快照真空

三角洲湖为阅读提供了快照隔离,这意味着它是安全的优化尽管其他用户或工作表查询。然而,最终你应该清理旧的快照。你可以通过运行真空命令:

真空people_10m

有关使用真空有效地,看删除未使用的数据文件与真空