创建流表

适用于:检查标记是的砖的SQL检查标记是的砖运行时13.1及以后

预览

这个特性是在公共预览。注册访问,填写这张表格

创建一个流表,用额外的支持流媒体或δ表增量数据处理。

流表仅支持在三角洲住在砖SQL表和统一目录。支持数据砖上运行这个命令运行时只计算解析语法。看到教程:声明一个数据管道使用SQL在三角洲住表

语法

{创建刷新流媒体|创建流媒体(如果存在]}table_name(table_specification](table_clauses](作为查询]table_specification((column_identifiercolumn_type(](评论column_comment]](,](约束expectation_name预计(expectation_expr)(违反{失败更新|下降}]](,])table_clauses{分区通过(上校(,])|评论table_comment|TBLPROPERTIES条款|时间表(刷新]CRONcron_string(时间timezone_id]}(]

参数

  • 刷新

    如果指定,用最新的数据刷新表可以从查询中定义的来源。只有新数据到来之前查询处理开始。新数据添加到命令的执行期间来源被忽略,直到下一次刷新。

  • 如果不存在

    如果指定一个表具有相同名称已经存在,声明将被忽略。

    如果存在不能一起使用刷新,这意味着创建刷新如果存在是不允许的。

  • table_name

    要创建的表的名称。必须不包含一个名称时间规范。如果名字不是合格的当前模式中创建的表。

  • table_specification

    这个可选的子句定义的列的列表,它们的类型、属性、描述,和列约束。

    如果您不定义必须指定表中的列模式作为查询

    • column_identifier

      一个独特的列的名称。

      • column_type

        指定了数据类型的列。

      • 非空

        如果指定的列不接受值。

      • 评论column_comment

        一个字符串来描述列。

      • (在违反约束expectation_name期望(expectation_expr){失败更新|删除行}]

        增加了数据质量的期望。可以跟踪这些数据质量的期望随着时间的推移和通过流表的访问事件日志。一个失败更新期望使处理失败时都创建表以及刷新表。一个下降期望使整个行如果不满足预期下降。

        expectation_expr可能是由文字、表内列标识符,和确定性,内置的SQL函数或运营商除了:

        expr必须不包含任何子查询

  • table_clauses

    选择指定分区、评论、用户定义的属性,一个新表刷新进度。每个子条款可能只被指定一次。

    • 分区的

      一个可选的表列列表分区的表。

    • 评论table_comment

      一个字符串文字描述表。

    • TBLPROPERTIES

      选择一个或多个用户定义的属性集。

    • 日程安排(刷新)CRON cron_string(时区timezone_id)

      如果提供,时间流表或物化视图刷新与给定的数据石英cron时间表。只有time_zone_values被接受。时间当地的不支持。如果时间不在,使用会话时区。如果时间缺席和会话时区没有设置,则抛出一个错误。时间表语义上等价于时间表刷新

      你不能使用时间表语法在三角洲住表中管道的定义。

      时间表条款中是不允许的创建刷新命令。时间表可以的一部分提供创建命令。使用改变流表改变一个流表创建后的时间表。

  • 作为查询

    这一条款使用数据填充表查询。这个查询必须一个流媒体查询。这可以通过添加关键字以增量的方式处理任何你想要的关系。当你指定一个查询和一个table_specification在一起,在指定的表模式table_specification必须包含所有返回的列查询,否则你得到一个错误。任何列中指定table_specification但不返回查询返回当查询值。

    这一条款要求流表中创建数据砖SQL,但不是必需的三角洲生活表。如果不提供这一条款在三角洲生活表,你必须在一个参考此表应用变化在你的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,抵消,时间戳,timestampTyperead_kafka(bootstrapServers= >“诱导多能性”的,订阅= >“topic_name”);——从另一个流表读取数据将于每小时运行一次。>创建流媒体firehose_bronze时间表CRON' 0 0 * * *吗?*’作为选择from_json(raw_data,“schema_string”)数据,*除了(raw_data)firehose_raw;