三角洲生活表SQL语言参考

本文提供了细节的三角洲生活表的SQL编程接口。

您可以使用Python用户定义函数(udf)在您的SQL查询,但你必须定义这些udf在Python文件之前调用SQL源文件。看到用户自定义标量函数——Python

限制

不支持条款。的操作的火花需要立即加载输入数据来计算输出的模式。不支持此功能在三角洲住表。

创建一个三角洲住表物化视图或流表

您使用相同的基本的SQL语法时宣布一个流表或物化视图(也称为生活)。

你只能申报使用查询流表读取流源。砖建议使用自动加载程序流摄入从云对象存储的文件。看到自动加载程序SQL语法

你必须包括流()函数在一个数据集名称指定其他表或视图时管道流源。

下面描述了声明的语法物化视图和流媒体与SQL表:

创建或更新(临时){流表|生活表}table_name [([col_name1 col_type1[生成总是像generation_expression1][评论col_comment1], col_name2 col_type2[生成总是像generation_expression2][评论col_comment2],…][约束expectation_name_1期望(expectation_expr1)[违反{失败更新|删除行}),约束expectation_name_2期望(expectation_expr2)(在违反{失败更新|删除行}),…])][使用三角洲][分区(col_name1、col_name2…))[位置路径][评论table_comment] [TBLPROPERTIES (key1 [=] val1 key2 = val2,…))作为select_statement

创建一个三角洲住表视图

下面描述了声明视图使用SQL的语法:

创建临时(流)实时视图view_name [([col_name1[评论col_comment1], col_name2 col_comment2评论,…][约束expectation_name_1期望(expectation_expr1)[违反{失败更新|删除行}),约束expectation_name_2期望(expectation_expr2)(在违反{失败更新|删除行}),…select_statement])][评论view_comment]

自动加载程序SQL语法

下面描述了使用自动加载程序在SQL的语法:

创建刷新流媒体table_name作为选择*cloud_files(“<文件路径>”,“<文件格式>”,地图(“< option键>”,“< option_value”,“< option键>”,“< option_value”,))

你可以使用支持格式选项自动加载程序。使用map ()功能,你可以将任意数量的选项传递给cloud_files ()方法。选项是键值对,其中键和值都是字符串。支持格式和选项的细节,请参阅文件格式选项

例如:定义表

您可以创建一个数据集通过阅读从外部数据源或数据集定义在一个管道中。阅读从一个内部数据集,预谋生活关键字的数据集的名称。下面的例子定义了两个不同的数据集:一个表taxi_raw这需要JSON文件作为输入源和一个表filtered_data这需要的taxi_raw表作为输入:

创建刷新生活taxi_raw作为选择*json' /- - - - - -数据集/nyctaxi/样本/json/ '创建刷新生活filtered_data作为选择生活taxi_raw

例如:从流读取源

从流读取数据来源,例如,自动加载器或一个内部数据集,定义一个流媒体表:

创建刷新流媒体customers_bronze作为选择*cloud_files(“/ databricks-datasets / retail-org /客户/”,“csv”)创建刷新流媒体customers_silver作为选择*(生活customers_bronze)

流数据的更多信息,请参阅转换数据与达美住表

控制表是如何实现的

表也提供额外的控制他们的具体化:

请注意

表的大小小于1 TB,砖建议让三角洲生活表控制数据的组织。除非你希望你表超出tb,通常不应当指定分区列。

例如:指定一个模式和分区列

你可以指定一个模式定义一个表。下面的示例指定目标表的模式,包括使用三角洲湖生成的列和定义分区表的列:

创建刷新生活销售(customer_id字符串,customer_name字符串,number_of_line_items字符串,order_datetime字符串,order_number,order_day_of_week字符串生成的总是作为(dayofweek(order_datetime)))分区通过(order_day_of_week)评论“销售原始数据”作为选择*

默认情况下,三角洲生活表推断的模式如果你不指定一个模式定义。

为一个表或视图设置配置值

使用指定一个表或视图的配置值,包括火花配置。任何表或视图定义在一个笔记本声明访问已定义的值。任何火花配置指定使用查询语句执行时使用引发任何表或视图设置语句。阅读一个查询的配置值,使用字符串插值语法$ {}。下面的示例设置一个火花配置值命名startDate可以在查询和使用价值:

设置startDate可以= ' 2020-01-01 ';创建或刷新生活表过滤从src,日期> SELECT * $ {startDate可以}

指定多个配置值,使用一个单独的声明为每个值。

SQL特性

创建表或视图

临时

创建一个临时表。不持续这个表的元数据。

流媒体

创建一个表读取一个输入数据集作为一个流。输入数据集必须流数据来源,例如,汽车装载机或流媒体表。

分区通过

一个可选的一列或多列列表用于分区表。

位置

一个可选的表数据的存储位置。如果没有设置,系统将默认存储位置。

评论

一个可选描述表。

TBLPROPERTIES

一个可选列表表属性为表。

select_statement

δ生活表查询定义表的数据集。

约束条款

预计expectation_name

定义数据质量约束expectation_name。如果违反约束没有定义,将违反约束的行添加到目标数据集。

违反

可选操作失败的行:

  • 失败更新管道:立即停止执行。

  • 下降:将记录并继续进行处理。

改变δ生活表中数据获取与SQL

使用应用变化声明使用三角洲住表疾病预防控制中心功能,如以下所述:

创建或更新流表table_name;应用到生活变化。table_name从source KEYS (keys) [WHERE condition] [IGNORE NULL UPDATES] [APPLY AS DELETE WHEN condition] [APPLY AS TRUNCATE WHEN condition] SEQUENCE BY orderByColumn [COLUMNS {columnList | * EXCEPT (exceptColumnList)}] [STORED AS {SCD TYPE 1 | SCD TYPE 2}] [TRACK HISTORY ON {columnList | * EXCEPT (exceptColumnList)}]

请注意

的默认行为插入更新事件是插入疾控中心事件从源:更新任何目标表中的行匹配指定的键(s)或时插入一个新行匹配的目标表中的记录不存在。处理的删除可以指定的事件应用作为删除条件。

重要的

你必须声明一个目标流表应用更改。您可以选择指定目标表的模式。当指定的模式应用变化目标表,你还必须包括__START_AT__END_AT列有相同的数据类型sequence_by字段。

看到改变数据获取与三角洲生活表

条款

列或列的组合唯一地标识源数据中的一行。这是用来确定哪些疾病预防控制中心事件适用于目标表中的特定记录。

这一条款是必需的。

在哪里

条件应用到源和目标触发等优化分区修剪。这种情况不能用于降低源行;所有疾病预防控制中心行源必须满足这个条件或者是抛出一个错误。使用WHERE子句是可选的,应该使用当您的处理需要特定的优化。

这一条款是可选的。

忽略更新

允许摄入更新包含目标列的一个子集。当一个中心事件匹配指定一个现有的行和忽略NULL更新,列了将保留现有的价值目标。这也适用于嵌套列的值

这一条款是可选的。

默认是覆盖现有的列值。

应用作为删除

指定当事件应该被视为一个疾控中心删除而不是插入。处理无序的数据,删除行暂时保留作为一个墓碑在底层三角洲表,并创建一个视图metastore过滤掉这些墓碑。保留时间间隔可以配置了pipelines.cdc.tombstoneGCThresholdInSeconds表属性

这一条款是可选的。

应用作为截断

指定当一个中心事件应该被视为一个完整的表截断。因为这一条款触发目标表的完整截断,它应该只用于特定的用例需要此功能。

应用作为截断支持条款只对SCD 1型。化合物2型不支持截断。

这一条款是可选的。

序列通过

疾控中心的列名称指定逻辑顺序事件源数据。三角洲生活表使用这个序列处理变更的事件到达的顺序。

这一条款是必需的。

指定要包含在目标表列的一个子集。你可以:

  • 指定列的完整列表包括:(用户标识,的名字,市)

  • 指定一个列排除列表:*除了(操作,sequenceNum)

这一条款是可选的。

默认是在目标表包含所有列没有指定条款。

存储作为

是否保存记录SCD 1型或SCD 2型。

这一条款是可选的。

缺省值是SCD 1型。

跟踪历史

pipelines.enableTrackHistory设置,指定输出列的一个子集生成历史记录有任何变化时的指定列。您可以指定:

  • 指定列的完整列表跟踪:(用户标识,的名字,市)

  • 指定的列列表被排除在跟踪:*除了(操作,sequenceNum)

这一条款是可选的。所有的输出列的默认跟踪历史有任何更改时,相当于跟踪历史*

要使用这一条款,您必须设置pipelines.enableTrackHistory在管道设置。否则,就会抛出一个异常。当pipelines.enableTrackHistory没有设置,为每个输入行生成一个历史记录。