创建流表
适用于:砖运行时13.1及以后
创建一个流表,用额外的支持流媒体或δ表增量数据处理。
流表仅支持在三角洲住表。支持数据砖上运行这个命令运行时只计算解析语法。看到教程:声明一个数据管道使用SQL在三角洲住表。
语法
{创建或刷新流媒体表|创建流媒体表(如果不存在]}table_name(table_specification](table_clauses](作为查询]table_specification((column_identifiercolumn_type(不零](评论column_comment]](,…](约束expectation_name预计(expectation_expr)(在违反{失败更新|下降行}]](,…])table_clauses{分区通过(上校(,…])|评论table_comment|TBLPROPERTIES条款}(…]
参数
刷新
如果指定,用最新的数据刷新表可以从查询中定义的来源。只有新数据到来之前查询处理开始。新数据添加到命令的执行期间来源被忽略,直到下一次刷新。
如果不存在
如果指定一个表具有相同名称已经存在,声明将被忽略。
如果不存在
不能一起使用刷新
,这意味着创建或刷新表如果不存在
是不允许的。要创建的表的名称。必须不包含一个名称时间规范。如果名字不是合格的当前模式中创建的表。
table_specification
这个可选的子句定义的列的列表,它们的类型、属性、描述,和列约束。
如果您不定义必须指定表中的列模式
作为查询
。table_clauses
选择指定分区、评论、用户定义的属性,一个新表刷新进度。每个子条款可能只被指定一次。
一个可选的表列列表分区的表。
评论table_comment
一个
字符串
文字描述表。选择一个或多个用户定义的属性集。
作为查询
这一条款使用数据填充表
查询
。这个查询必须一个流媒体查询。这可以通过添加流
关键字以增量的方式处理任何你想要的关系。当你指定一个查询
和一个table_specification
在一起,在指定的表模式table_specification
必须包含所有返回的列查询
,否则你得到一个错误。任何列中指定table_specification
但不返回查询
返回零
当查询值。这一条款是可选在三角洲住表。如果不提供这一条款在三角洲生活表,你必须在一个参考此表
应用变化
在你的DLT管道命令。看到改变δ生活表中数据获取与SQL。
流表和其他表之间的区别
流表状态表,用于处理每一行只有一次处理越来越多的数据集。因为大多数数据集成长不断随着时间的推移,流表是好的对于大多数摄入工作负载。最优流表需要数据新鲜度和低延迟的管道。流表也可以用于大规模转换,结果可以作为新数据到达时,增量计算使结果保持最新无需完全验算与每个更新源数据。流表是用于扩展的数据源。
流表接受额外的命令等刷新
,这过程中可用的最新数据来源提供的查询。更改所提供的查询只会反映在新数据通过调用刷新
,而不是以前处理过的数据。应用更改现有数据,您需要执行刷新表< table_name >完整的
执行完整的刷新
。全部刷新处理文档中的所有数据来源的最新定义。不建议把全部刷新来源,不要让整个的历史数据保留时间或短,卡夫卡等全部刷新对现有数据截断。你可能无法恢复旧的数据,如果数据来源不再可用。
限制
只有表所有者可以刷新流表来获得最新的数据。
改变表
命令是不允许在流表。表的定义和属性应该通过改变创建或刷新
声明。时间旅行不支持查询。
进化通过DML命令如表模式
插入成
,合并
不支持。以下命令不支持流媒体表:
创建表…克隆< streaming_table >
复制成
分析表
恢复
截断
生成清单
(创建或)取代表
不支持三角洲共享。
重命名表或改变所有者不支持。
表约束等
主关键
和外国关键
不受支持。标识列生成的列,不支持默认列。
例子
——创建一个流表处理文件存储在外部位置——模式推理和演化。>创建或刷新流媒体表raw_data作为选择*从流read_file(“abfss: / / container@storageAccount.dfs.core.windows.net/base/path');——创建一个流表,流程文件与一个已知的模式。>创建或刷新流媒体表csv_data(idint,ts时间戳,事件字符串)作为选择*从流read_file(“s3: / /桶/路径”,格式= >“csv”,模式= >“int id、ts时间戳、事件字符串”);——创建一个流表模式演化和数据质量的期望。——表创建或刷新失败如果数据不满足期望。>创建或刷新流媒体表avro_data(约束date_parsing(to_date(dt)> =“2000-01-01”)在违反失败更新)作为选择*从流read_file(“gs: / /桶/ avroData”);——卡夫卡的数据存储在一个扩展流表。>创建或刷新流媒体表firehose_raw评论“存储原始数据从卡夫卡”TBLPROPERTIES(“delta.appendOnly”=“真正的”)作为选择价值raw_data,抵消,时间戳,timestampType从流read_kafka(bootstrapServers= >“诱导多能性”的,订阅= >“topic_name”);——从另一个流表读取数据将于每小时运行一次。>创建流媒体表firehose_bronze时间表CRON' 0 0 * * *吗?*’作为选择from_json(raw_data,“schema_string”)数据,*除了(raw_data)从流firehose_raw;