流程流數據與達美住表
很多應用程序要求表基於連續到達的數據被更新。然而,隨著數據規模的增長,在每次更新時再處理數據所需的資源可以成為禁止的。您可以定義一個流媒體表或視圖增量計算連續到達的數據。流表和視圖減少攝取新數據的成本和延遲的新數據是可用的。
當一個觸發更新管道,一個流表或視圖過程隻到達了新的數據,自上次更新。已經處理過的數據由三角洲住自動跟蹤表運行時。
流攝入從外部數據源
要攝取流數據,您必須定義一個直播表從一個流源;例如,您可以讀取外部數據流與下麵的代碼:
inputPath=“/ databricks-datasets / structured-streaming /事件/”@dlt。表defstreaming_bronze_table():返回(火花。readStream。格式(“cloudFiles”)。選項(“cloudFiles.format”,“json”)。負載(inputPath))
創建或刷新流媒體生活表streaming_bronze_table作為選擇*從cloud_files(“/ databricks-datasets / structured-streaming /事件/”,“json”)
管道內流從其他數據集
你還可以從其他表流數據在同一管道。
@dlt。表defstreaming_silver_table():返回dlt。read_stream(“streaming_bronze_table”)。在哪裏(…)
創建或刷新流媒體生活表streaming_silver_table作為選擇*從流(生活。streaming_bronze_table)在哪裏…
流程流和批處理數據在一個單一的管道
因為直播表使用Apache火花結構化流是什麼?,現場直播表隻能過程附加查詢;也就是說,查詢源表中插入新行。處理來自源表的更新,例如,合並和刪除,不支持。流程更新,請參閱申請變更成命令。
常見的流模式包括攝入源數據來創建初始數據集在一個管道。這些初始數據集通常被稱為青銅表和經常執行簡單的轉換。回收效率低下的格式如JSON可以禁止這些簡單的轉換,並適合流媒體直播表。
相比之下,最後一個表在一個管道,通常被稱為黃金表,通常需要複雜的聚合或閱讀來源的目標應用變化成
操作。因為這些操作本質上創建更新而不是附加,他們不支持輸入流媒體直播表。這些轉換更適合作為一個生活表實體化。
通過混合流住表和住表到一個管道,可以簡化你的管道,避免昂貴的re-ingestion或加工的原始數據和完整的SQL來計算複雜的力量聚合在一個有效地編碼和過濾數據集。下麵的例子說明了這種類型的混合處理:
@dlt。表defstreaming_bronze():返回(#由於這是一個流源,這個表是增量。火花。readStream。格式(“cloudFiles”)。選項(“cloudFiles.format”,“json”)。負載(“s3: / /道路/ /生/數據”))@dlt。表defstreaming_silver():#因為我們讀青銅表流,這銀表也#增量更新。返回dlt。read_stream(“streaming_bronze”)。在哪裏(…)@dlt。表deflive_gold():#這個表將被重新計算完全閱讀整個銀表#時更新。返回dlt。讀(“streaming_silver”)。groupBy(“user_id”)。數()
創建或刷新流媒體生活表streaming_bronze作為選擇*從cloud_files(“s3: / /道路/ /生/數據”,“json”)創建或刷新流媒體生活表streaming_silver作為選擇*從流(生活。streaming_bronze)在哪裏…創建或刷新生活表live_gold作為選擇數(*)從生活。streaming_silver集團通過user_id
了解更多關於使用自動加載程序有效地讀取JSON文件從S3增量處理。
流連接
三角洲住表支持各種連接策略更新表。
Stream-batch連接
Stream-batch連接是一個好的選擇當denormalizing擴展數據的連續流主要是靜態維度表。每次更新派生的數據集,從流與新記錄時靜態批表的快照更新開始。靜態表中的記錄添加或更新表中沒有反映,直到一個完整的執行刷新。
以下是stream-batch連接的例子:
@dlt。表defcustomer_sales():返回dlt。read_stream(“銷售”)。加入(讀(“beplay体育app下载地址顧客”),(“customer_id”),“左”)
創建或刷新流媒體生活表customer_sales作為選擇*從流(生活。銷售)內心的加入左生活。beplay体育app下载地址使用(customer_id)
在連續管道、批處理的連接與每個micro-batch定期輪詢的更新。