創建流表
適用於:磚運行時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;