創建流表

適用於:檢查標記是的磚的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;