跳轉到主要內容

技術指南

開始與達美住表

開始與達美住表”>
                </picture>
                <noscript>
                 <picture>
                  <source type= 開始與達美住表”>
                 </picture>
                </noscript>
               </div>
              </div>
             </div>
            </figure>
           </div>
          </section>
         </div>
        </div>
        <div data-cy=

介紹

本指南將演示如何三角洲生活表允許您開發可伸縮的、可靠的數據管道符合Lakehouse架構的數據質量標準。

我們首先描述一個常見的場景。我們已經從各種OLTP係統在雲數據對象存儲如S3, ADLS或gc。一些數據集是定期更新,有些曆史源係統的快照。我們有一個大致了解消費者的數據和轉換,我們將按照Lakehouse架構部分數據質量為原料,精製,和聚合層:

Lakehouse架構段數據質量為原料,精製、聚合層”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= Lakehouse架構段數據質量為原料,精製、聚合層”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

這些黃金表可以多樣化的消費者,從BI報告培訓機器學習模型,因此這個數據從源到黃金之旅層會有不同的需求,我們關心數據工程師:

  • 延遲:當我們攝取的新數據,它必須是可見的在5秒內銀表”
  • 成本:“我們不能固定容量集群運行24/7支持這些更新”
  • 精度:“我應該占多少晚到達在我的實時數據源的數據嗎?”

乍一看,這些需求可能看起來簡單在管道上麵的引用。然而,盡管lakehouse管道是故意優雅而簡單,在現實中我們常常並不處理一個簡單的線性流。在現實中它通常看起來像這樣:

規模與額外的數據來源豐富我們的分析環境”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 規模與額外的數據來源豐富我們的分析環境”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

當我們開始規模與額外的數據來源豐富我們的分析環境,賦予新見解,ETL複雜度成倍增加,和下麵的挑戰導致這些管道變得極其脆弱:

  • 錯誤處理和恢複是費力由於沒有明確的表之間的依賴關係
  • 數據質量差,執行和監督約束是一個手動過程
  • 數據沿襲無法追蹤,或沉重的實現是必要的
  • 在細粒度的可觀測性,單個批處理/流水平是不可能的
  • 很難占到批處理和流在一個統一的管道

注:批處理和流?

火花能夠使用批處理和流媒體模式有一個API,和三角洲湖使並發批處理和流操作在一個數據集從而消除權衡或再加工需要兩層λ架構,仍然有大量的工作,實施和監控流,特別是在ETL過程相結合的流數據集之間作為單獨的啤酒花和批處理作業。

聲明式ETL

當編程ETL管道、數據轉換通常是“程序”執行。這意味著操作上執行數據表達ETL引擎進行一係列的計算步驟。在許多情況下,即使您使用的是一個編排工具如氣流或Azure數據工廠,工作是推出了含有程序邏輯。雖然協調器可能需要注意的工作之間的依賴關係,他們是不透明的ETL轉換和業務邏輯。

另一方麵,聲明ETL涉及的用戶描述期望的結果管道沒有顯式列出命令必須執行步驟,得出結果。聲明意味著專注於“什麼”是我們的理想目標,利用智能引擎像DLT找出“如何”計算框架應該執行這些過程。

你可能想到的過程和聲明式ETL定義像給別人一步一步的行駛方向和向他們提供GPS包括城市的地圖和交通流信息。

行駛方向將為司機提供的步驟達到目的地,但不能提供他們一個埃塔,他們不會知道哪個社區傳遞的方式。另外,如果需要繞道路線,一步一步的方向現在沒用,但GPS地圖能夠重新路由迂回。

在這個比喻中,地圖是你的DLT管道。DLT引擎可以解釋的GPS地圖,確定最佳路線和為您提供ETA等指標。關於社區中遍曆路徑的詳細信息就像數據沿襲,繞行和事故(或錯誤)是依賴分辨率和模塊化的結果提供的聲明式DLT的性質。

你的第一個管道

在本指南中,我們將實現一個管道遭受這些挑戰,將使用這個作為一個機會來教你如何DLT的聲明式發展模式可以簡化ETL開發和改進質量,整個lakehouse血統,可觀測性。

快速開始,我們在這裏舉辦完成管道的結果三角洲生活表筆記本回購。你可以複製這個SQL筆記本到你的磚部署供參考,也可以跟隨導遊。

本指南將專注於SQL管道但是如果你寧願運行相同的管道在Python中,使用這個筆記本

先決條件

為了最有效的指導,你應該有一個基本的熟悉:

  • SQL
  • ETL開發管道和/或處理大數據係統
  • 磚互動的筆記本和集群
  • 你必須能夠訪問一個磚工作區與權限創建新集群,運行工作,並將數據保存到一個外部雲對象存儲或位置DBFS

數據集

在你的第一個管道,我們將使用retail-org數據集在databricks-datasets伴隨著每一個工作區。三角洲生活表提供了技術處理青銅的細微差別(即表。Lakehouse原始數據)。您將使用自動加載程序功能加載數據逐步從雲對象存儲。

青銅數據集:攝入數據集使用雲文件

青銅數據集代表了原始的質量。我們經常會使最小的調整從原點,利用雲存儲的成本效益來創建一個原始的來源,我們可以驗證提煉數據,訪問字段,通常我們可能不會報告,或創建新的管道。常見的模式在這個階段是不斷攝取新的數據雲存儲的位置。

“流媒體更新”、“連續處理,”vs。DLT的“流”

雖然這些術語可以互換的俗話說,他們在DLT有截然不同的含義。讀者有火花經驗結構化流可能還要注意一些重載的術語。在這裏我們試圖消除歧義這些術語:

  • 流媒體是一種處理模式,數據集被視為無限
  • 增量是一個更新模式中最小的更改目的地數據
  • 連續指管道一直運行,直到停在任意時間,而不是停止一次基於源數據管道開始時的狀態

你可能會注意到一些重疊無界流處理這樣的框架在DLT引發結構化流和流數據集。事實上,DLT的流數據集利用結構化流火花的基本麵和δ事務日誌,但抽象的複雜性,使開發人員能夠專注於滿足處理需求而不是係統性重任。

我們將討論如何DLT的流數據集和DLT的連續方式交互的黃金部分本指南。

* *警告:“連續”一詞也用來引用一個實驗觸發模式在火花結構化流micro-batches由單一的記錄。這是一個比“連續”DLT不同的定義

作為一個例子,讓我們看看一個青銅的表我們會攝取。

創建流媒體直播sales_orders_raw評論”的原始銷售訂單,攝取/ databricks-datasets。”TBLPROPERTIES(“質量”=“青銅”)作為選擇*cloud_files (“/ databricks-datasets / retail-org sales_orders /”、“json”(“cloudFiles地圖。inferColumnTypes”、“真正的”);

SQL語句使用自動加載程序來創建一個名為sales_orders_raw的流媒體直播表從json文件。

cloud_files:調用自動加載器和雲存儲路徑和格式作為參數。(注意,API比cloudFiles調用外部的DLT略有不同)。
現在,讓我們創建一個管道來攝取來自雲對象存儲的數據。
打開你的空間

  1. 創建您的第一個DLT管道筆記本
  2. 為你創建一個新的筆記本DLT管道如“dlt_retail_sales_pipeline”
  3. 將下麵的代碼複製到第一個單元格:

    創建流媒體直播beplay体育app下载地址評論”客戶購買成品,從/ beplay体育app下载地址databricks-datasets攝取。”TBLPROPERTIES(“質量”=“映射”)作為選擇*cloud_files (“/ databricks-datasets / retail-beplay体育app下载地址org /客戶/”、“csv”);創建流媒體直播sales_orders_raw評論”的原始銷售訂單,攝取/ databricks-datasets。”TBLPROPERTIES(“質量”=“青銅”)作為選擇*cloud_files (“/ databricks-datasets / retail-org sales_orders /”、“json”(“cloudFiles地圖。inferColumnTypes”、“真正的”);

注:管道筆記本
DLT管道筆記本是特別的,即使他們使用標準磚筆記本。目前我們不阻止你附加管道筆記本一個集群,集群附加永遠不會使用的DLT管道運行。作為一個最佳實踐,我們建議你把管道筆記本處於分離狀態,並使用第二個劃痕筆記本在開發運行任意命令。如果你運行一個管道筆記本對附加的集群中,您將看到類似於這個…


  1. 在新選項卡中打開工作或窗口,並選擇“三角洲生活表”
  2. 選擇“創建管道”來創建一個新的管道
  3. 指定一個名稱,如“銷售訂單管道”
  4. 筆記本路徑指定為在步驟2中創建的筆記本。這是一個必要的步驟,但可以修改為指向一個兒童圖書館在未來。
  5. 目標是可選的,但是建議您這樣做,因為目標是目標數據庫授權的其他成員可以訪問結果的數據管道。
  6. 一個存儲位置是可選的,但是建議您這樣做。您可以指定一個外部blob存儲位置如果您已經配置了一個。這就是DLT將產生數據和元數據日誌的管道。提示:如果沒有指定存儲,所有數據和日誌產生的DLT管道將存儲在一個存儲由DLT DBFS根路徑。你可以找到的路徑編輯設置JSON文件。在外部存儲數據和日誌(即non-DBFS根)位置,您必須指定存儲位置的DLT管道。
  7. 管道模式設置為觸發
  8. 設置最小和最大數量的工人使用集群規模
  9. 選擇“開始”
  10. 您已經創建了您的第一個管道!

管道日誌

現在,您將看到一段以下圖,其中包括管道運行的日誌。這是一節可能是什麼樣子。

DLT油”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= DLT油”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

首先攝取代碼解釋

圖標代表DLT數據集,在這種情況下表。這兩個表我們考慮銅表。具體地說,它們是增量表和生活我們攝取他們使用自動加載程序功能使用cloud_files函數

DLT圖形首先攝取代碼”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= DLT圖形首先攝取代碼”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

DLT視圖和表中

DLT,視圖類似於一個臨時視圖在SQL和一些計算一個別名。一個視圖允許您將一個複雜的查詢分解成更小的或更容易查詢。視圖還可以重用一個給定的轉換作為多個表的來源。視圖可以從管道內交互,不能查詢。

在DLT,表是類似傳統的物化視圖。三角洲住在三角洲格式表運行時自動創建表並確保那些表更新最新創建的表的查詢的結果。

消費者可以讀取這些數據的表和視圖Lakehouse三角洲與標準表(例如報告在SQL或數據科學在Python中),但它們被DLT引擎更新和管理。更多細節,請參見章節目標在下麵。

線數據集:預期和高質量的數據

在本節中,我們將把您韁繩來開發一個端到端的管道如下演示的DAG。現在我們已經創建了青銅數據集和銀,金,概述Lakehouse架構在2020年CIDR數據庫會議上發表的論文並使用每一層教你DLT新概念。


銀層都是高質量,多樣化,和可訪問的數據集。這些可能不符合一個特定的用例,如服務生產報告在低延遲,但他們已經潔淨了,改變了,和策劃,以便數據科學家和分析師可以輕鬆和自信地使用這些表快速執行預處理,探索性分析和工程特性,這樣他們就可以把剩餘時間花在機器學習和洞察力。

最大的生產力殺手這些消費者不僅僅是數據訪問和預處理,但信心他們正在使用的數據的質量。出於這個原因,我們將使用DLT,確保這些數據集符合特定的質量標準,並明確標注數據集。兩個數據消費者和決策者可以使用生成的編目和質量監控,來自的正確使用約束和評論。

  1. 打開你的管道筆記本和創建一個新的細胞。
  2. 將下麵的代碼複製到一個新的細胞:

    創建流媒體直播sales_orders_cleaned (約束valid_order_number期望(order_number)違反下降)分區通過(order_date)評論“清潔和有效的銷售訂單order_number (s)和分區order_datetime。”TBLPROPERTIES(“質量”=“銀”)作為選擇f.customer_id,f.customer_name,f。number_of_line_items,時間戳(from_unixtime (((f.order_datetime作為長))))作為order_datetime,日期(from_unixtime (((f.order_datetime作為長))))作為order_date,f。order_number f。ordered_products c。狀態,c。城市,c。朗,c。lat, c。units_purchased, c.loyalty_segment流(LIVE.sales_orders_raw) f加入生活。beplay体育app下载地址客戶cc.customer_id=f.customer_idc.customer_name=f.customer_name
  3. 返回到管道“銷售訂單管道”在左邊的導航條,導航到工作選擇“三角洲住表”並選擇管道上一步創建的
  4. 旁邊的下拉選擇啟動/停止開關,然後選擇“完整的刷新

約束:約束允許您定義數據質量的期望。他們聲明,解決任何火花過濾謂詞,以及承擔失敗的動作。一個動作可以保留,下降,失敗,或隔離。為更多的細節在這裏看到的。所有的約束都記錄到啟用流線型的質量監控。

Tblproperties:的鍵值對列表可以是三角洲湖屬性,DLT管道屬性,或任意的。任意tblproperties就像標記可用於數據編目。在這個例子中,“質量”:“銀”是一個任意的函數作為一個標簽的屬性。

備注:一個字符串簡要描述表的目的,在未來使用數據編目

黃金數據集:完成與流媒體/連續vs觸發

許多聚合不能執行增量和必須執行完整的再加工,即使新的數據處理增量上遊聚合的銅和銀層。然而,有重要的價值在獲得實時或“快速”尚未聚合的數據。與傳統的λ架構需要一個複雜的雙重基礎設施過程快速和慢速數據,Lakehouse架構允許一個單一的管道實時增量的“快速”的銅和銀層,和一批更新金層(由強一致性保證三角洲湖存儲)。

在實踐中,這種模式可能是具有挑戰性的程序性ETL中需要部署獨立的流和批處理作業和每個單獨維護。為了解決這個問題,DLT允許你選擇管道中的每個數據集是否完整或增量,以最小的更改其他的管道。這使它容易規模管道涉及的銅和銀實時數據與黃金組合聚合層。

泡沫:一些引發聚合可以逐步執行,如計數、min,馬克斯和總和。在一些簡單的情況下,它可能是有意義的黃金數據集的增量。然而,即使是簡單的數量和金額可能會變得效率低下,不建議如果您使用多個分組(例如GROUP BY col1, col2 col3)。

在這種情況下我們的黃金表,我們在創建完整的金銀聚合數據表的表由城市:

  1. 打開你的管道筆記本和創建一個新的細胞。
  2. 將下麵的代碼複製到一個新的細胞:

    創建生活sales_order_in_la評論“銷售訂單在洛杉磯。”TBLPROPERTIES(“質量”=“黃金”)作為選擇城市、order_date customer_id、customer_name ordered_products_explode.curr,總和(ordered_products_explode.price)作為銷售,總和(ordered_products_explode.qty)作為qantity,(ordered_products_explode.id)作為product_count(選擇的城市,日期(order_datetime)作為order_date、customer_id customer_name,爆炸(ordered_products)作為ordered_products_explodeLIVE.sales_orders_cleaned在哪裏城市=“洛杉磯”)集團通過order_date、城市、customer_id customer_name ordered_products_explode.curr;創建生活sales_order_in_chicago在芝加哥發表評論“銷售訂單”。TBLPROPERTIES(“質量”=“黃金”)作為選擇城市、order_date customer_id customer_name,ordered_products_explode.curr,總和(ordered_products_explode.price)作為銷售,總和(ordered_products_explode.qty)作為qantity,(ordered_products_explode.id)作為product_count(選擇的城市,日期(order_datetime)作為order_date、customer_id customer_name,爆炸(ordered_products)作為ordered_products_explodeLIVE.sales_orders_cleaned在哪裏城市=“芝加哥”)集團通過order_date、城市、customer_id customer_name ordered_products_explode.curr;
  3. 返回到管道“銷售訂單管道”在左邊的導航條,導航到工作選擇“三角洲住表”並選擇管道上一步創建的
  4. 旁邊的下拉選擇啟動/停止開關,並選擇“刷新”

連續vs引發管道模式

DLT,而單個數據集可以增量或完成,整個管道可能引發或連續的。當連續管道開始,它將自旋向上的基礎設施和管道繼續攝取新的數據,直到停止手動或通過API。引發管道將消耗源一旦和所有新數據將自動旋轉下的基礎設施。引起管道通常會安排運行在生產中使用一個協調器或磚多任務的工作。

之間切換觸發和連續模式,打開你的管道,並選擇“編輯設置”。連續will be a boolean in the JSON. Setting "continuous": false" is equivalent to setting the pipeline to Triggered mode.

這使您可以靈活地慢慢成熟為連續處理模式沒有顯著重構您的代碼。這是一個常見的模式組織開始實現實時的見解的價值不用花費高額成本的不斷運行的雲基礎設施。經驗豐富的火花工程師可以使用以下矩陣了解DLT的功能:

讀: 寫: 連續模式 觸發模式
完整的 完整的 再加工一個預定義的時間間隔 單再加工(刪除和替換)
完整的 增量 不可能的 不可能的
增量 完整的 再加工一個預定義的時間間隔 再加工物化流的結果
增量 增量 流使用默認觸發 Trigger.once()流

Productionization

我們已經定義了管道。我們可以總結以下步驟:

  1. 設置一個目標數據庫方便消費者查詢管線的數據集
  2. 將管道設置為生產方式
  3. 如果您選擇使用觸發模式,您可以安排管道使用多任務工作

管道可觀測性和數據質量監控

在磚試試這個筆記本

事件日誌

DLT發出所有管道管道中的日誌一個預定義的三角洲湖表的存儲位置,可用於監測、血統和數據質量報告。可以導入這個通用的日誌分析筆記本檢查事件日誌,或使用dbutils訪問三角洲表{{你的存儲位置}}/係統/事件。

大多數有用的信息在日誌表的“詳細信息”欄。這裏有不同類型的行為,將導致DLT發出一個日誌,和一些相關的領域內的事件,你會發現在“細節”:

  • user_action:事件發生時采取行動就像創建管道
  • flow_definition:事件發生時管道部署或更新,並有血統,模式和執行計劃的信息
    • output_datasetinput_datasets——輸出表/視圖及其上遊表(s) /視圖(s)
    • flow_type——這是一個完整的或附加流
    • explain_text——引發解釋計劃
  • flow_progress:事件發生時數據流開始跑步或者結束處理一批數據
    • 指標——目前包含num_output_rows
    • data_quality -包含一個數組的數據質量規則的結果這個特定的數據集
      • dropped_records
      • 預期
        • 名稱、數據集、passed_records failed_records

數據質量監控(需要磚SQL)

因為DLT日誌公開為一個三角洲表,和日誌包含數據預期指標,很容易生成報告監測數據質量與BI工具的選擇。我們建議使用磚的SQL因為它是與三角洲和磚平台緊密集成,提供極快的查詢速度通過易於管理計算端點。Beplay体育安卓版本

使用磚SQL數據質量報告”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 使用磚SQL數據質量報告”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div data-cy=

創建一個使用磚SQL數據質量報告,遵循這些步驟:

  1. 注意“存儲位置”為您的管道通過導航到你的管道,選擇編輯設置,和複製的值“storage_location”
  2. 注冊metastore使用以下示例中的日誌表和存儲位置從步驟1:

    創建{{my_pipeline_logs}}作為選擇*三角洲。”{{管道存儲位置}}/係統/事件”
  3. 在左上方的下拉框中,切換到“SQL”工作區(你應該在“數據科學與工程”工作空間在開發DLT管道)
  4. 在左邊的導航條,選擇“查詢”
  5. 選擇“創建查詢”
  6. 複製下麵的SQL查詢,取代{{my_pipeline_logs}}與您在步驟2中創建的表的名稱:

    all_expectations作為(選擇爆炸(from_json (細節:flow_progress: data_quality:預期,schema_of_json(“[{“名稱”:“力量”,“數據集”:“力量”,“passed_records”:“int”、“failed_records”:“int”}]”)))作為期望{{my_pipeline_logs}}在哪裏細節:flow_progress.metrics)選擇expectation_name X_Axis,總和(Y_Axis)作為Y_Axis(選擇expectation.name作為expectation_name,“通過”作為X_Axis, expectation.passed_records作為Y_Axisall_expectations聯盟所有選擇expectation.name作為expectation_name,“失敗”作為X_Axis, expectation.failed_records作為Y_Axisall_expectations)集團通過expectation_name, X_Axis
  7. 運行該查詢,您應該看到類似下麵的反應:
  1. 選擇“添加可視化”
  2. 選擇一個可視化類型為“圖”和圖表類型為“餡餅”。Set the X and Y columns, and set grouping to expectation_name:
磚SQL餅圖的可視化”>
                   </picture>
                   <noscript>
                    <picture>
                     <source type= 磚SQL餅圖的可視化”>
                    </picture>
                   </noscript>
                  </div>
                 </div>
                </div>
               </figure>
              </div>
             </div>
            </div>
            <div class=

現在,您可以嚐試使用不同的圖表和/或在Redash可視化類型。一般來說,對於圖表,您可以使用group by expectation_name X_axis Y_axis和創建儀表板為不同質量監控的目的

結論

既然你已經走到你的第一個三角洲生活表管道和學到一些關鍵概念,我們迫不及待地想看到您創建的管道!δ生活表上的更多信息,請參閱我們的DLT文檔,觀看演示,或下載的筆記本!

Baidu
map