在Databricks作業中使用dbt

預覽

dbt任務完成公共預覽

您可以將dbt Core項目作為Databricks作業中的任務運行。通過運行dbt Core項目作為作業任務,您可以受益於以下Databricks job特性:

  • 自動化dbt任務並計劃包含dbt任務的工作流。

  • 監視dbt轉換並就轉換的狀態發送通知。

  • 將dbt項目與其他任務一起包含在工作流中。例如,您的工作流可以使用Auto Loader攝取數據,使用dbt轉換數據,並使用notebook任務分析數據。

  • 自動歸檔來自作業運行的工件,包括日誌、結果、清單和配置。

要了解有關dbt Core的更多信息,請參閱印度生物技術部的文檔

開發和生產工作流程

Databricks建議使用Databricks SQL倉庫開發dbt項目。使用Databricks SQL倉庫,您可以測試dbt生成的SQL並使用SQL倉庫查詢曆史調試dbt生成的查詢。學習如何使用dbt核心和dbt-databricks包以在開發環境中創建和運行DBT項目,請參見連接到dbt核心

要在生產環境中運行dbt轉換,Databricks建議在Databricks作業中使用dbt任務。默認情況下,dbt任務將在單節點作業集群上運行dbt Python進程,並根據所選SQL倉庫運行dbt生成的SQL。

您可以在無服務器SQL倉庫、通用集群或任何其他平台上運行dbt轉換dbt-supported倉庫.本文通過示例討論前兩個選項。

請注意

針對SQL倉庫開發dbt模型,並在通用集群的生產環境中運行它們,可能會導致性能和SQL語言支持方麵的細微差異。Databricks建議通用集群和SQL倉庫使用相同的Databricks Runtime版本。

需求

Databricks推薦dbt-databricks包,不是dbt-spark包。dbt-databricks包是dbt-spark為Databricks優化的一個分支。

創建並運行您的第一個dbt作業

下麵的示例使用jaffle_shop項目,演示DBT核心概念的示例項目。要創建運行jaffle shop項目的作業,請執行以下步驟。

  1. 轉到你的Databricks登陸頁麵,做以下其中一項:

    • 點擊工作圖標工作流在側欄中,單擊創建作業按鈕

    • 在側欄中,單擊新圖標並選擇工作

  2. 上出現的任務對話框中的任務選項卡中,取代為你的工作添加一個名字…你的工作名稱。

  3. 任務名稱,輸入任務名稱。

  4. 類型,選擇印度生物技術部任務類型。

    添加dbt任務
  5. ,點擊編輯並輸入jaffle商店GitHub存儲庫的詳細信息。

    配置dbt項目repo
    • Git存儲庫URL,輸入jaffle shop項目的URL。

    • Git引用(分支/標簽/提交),輸入主要.也可以使用標記或SHA。

  6. 點擊確認

  7. 印度生物技術部的命令文本框,指定要運行的DBT命令(deps種子,運行).必須在每個命令前加上印度生物技術部.命令按照指定的順序執行。

    配置dbt命令
  8. 數據倉庫,選擇一個SQL倉庫來運行dbt生成的SQL。的數據倉庫下拉菜單隻顯示無服務器和pro SQL倉庫。

  9. (可選)可以為任務輸出指定模式。默認情況下,模式默認的使用。

  10. (可選)如果需要修改dbt Core所在集群,請單擊dbt CLI集群.為了最小化成本,集群默認為一個小型單節點集群。

  11. (可選)可指定dbt-databricks版本。例如,將dbt任務固定到開發和生產的特定版本:

    • 依賴庫,點擊刪除圖標在當前dbt-databricks版本旁邊。

    • 點擊添加

    • 添加依賴庫,按PyPI頁簽中,輸入dbt-package版本號文本框(例如,dbt-databricks = = 1.2.0).

    • 點擊添加

    配置dbt-databricks版本

    請注意

    Databricks建議將dbt任務固定到dbt- Databricks包的特定版本,以確保開發和生產運行使用相同的版本。Databricks推薦1.2.0或更高版本的dbt-databricks包。

  12. 點擊創建

  13. 要運行作業,請單擊立即運行按鈕

查看dbt作業任務的結果

作業完成後,可以通過從數據庫運行SQL查詢來測試結果筆記本或者通過跑步查詢在你的數據倉庫。例如,查看以下示例查詢:

顯示<模式>
選擇<模式>beplay体育app下载地址限製10

取代<模式>使用任務配置中配置的模式名。

API的例子

你也可以使用職位API 2.1創建和管理包含DBT任務的作業。使用實例創建一個帶有單個dbt任務的作業:

“名稱”“jaffle_shop DBT作業”“max_concurrent_runs”1“git_source”“git_url”“https://github.com/dbt-labs/jaffle_shop”“git_provider”“gitHub”“git_branch”“主要”},“job_clusters”“job_cluster_key”“dbt_CLI”“new_cluster”“spark_version”“10.4.x-photon-scala2.12”“node_type_id”“i3.xlarge”“num_workers”0“spark_conf”“spark.master”“地方(* 4)”“spark.databricks.cluster.profile”“singleNode”},“custom_tags”“ResourceClass”“SingleNode”),“任務”“task_key”“轉換”“job_cluster_key”“dbt_CLI”“dbt_task”“命令”“印度生物技術部deps”“印度生物技術部種子”“印度生物技術部運行”),“warehouse_id”“1 a234b567c8de912”},“庫”“pypi”“包”“dbt-databricks > = 1.0.0, < 2.0.0”

(高級)在通用集群下運行dbt生成的SQL

要使用通用集群運行dbt任務,請使用自定義集群profiles.yml定義要連接到的集群。要使用通用集群創建運行jaffle shop項目的作業,請執行以下步驟。

  1. 創建的分支jaffle_shop存儲庫。

  2. 將分叉的存儲庫克隆到桌麵。例如,您可以運行如下命令:

    Git克隆https://github.com/<用戶名>/jaffle_shop.git

    取代<用戶名>用你的GitHub手柄。

  3. 創建一個名為profiles.ymljaffle_shop目錄,內容如下:

    jaffle_shop目標databricks_job輸出databricks_job類型方法http模式“< schema >”宿主“< http_host >”http_path“< http_path > / < cluster_id >”令牌”{{env_var(“DBT_ACCESS_TOKEN”)}}”
    • 取代<模式>使用項目表的模式名。

    • 取代< http_host >服務器主機名的值。連接細節選項卡為您的SQL倉庫。

    • 取代< http_path >HTTP路徑的值。連接細節選項卡為您的SQL倉庫。

    • 取代< cluster_id >與要連接的集群的ID。

    您不需要在文件中指定秘密,例如訪問令牌,因為您要將該文件檢入源代碼控製。相反,該文件使用dbt模板功能在運行時動態插入憑證。

  4. 數據倉庫中,選擇沒有(手動)

  5. 配置文件目錄文件所在目錄的相對路徑profiles.yml文件。將路徑值保留為空,以使用存儲庫根的默認值。

  6. 將該文件簽入Git並將其推到派生的存儲庫中。例如,您可以運行如下命令:

    Git添加配置文件。Yml git提交-m“添加配置文件。yml我的Databricks工作”git推
  7. 點擊工作圖標工作流在Databricks用戶界麵的側邊欄。

  8. 選擇dbt作業並單擊任務選項卡。

  9. ,點擊編輯並輸入您的fork jaffle商店GitHub存儲庫詳細信息。

    配置fork項目repo
  10. 數據倉庫中,選擇沒有(手動)

  11. 配置文件目錄文件所在目錄的相對路徑profiles.yml文件。將路徑值保留為空,以使用存儲庫根的默認值。

(高級)工作流中使用dbt Python模型

請注意

對Python模型的dbt支持是beta版,需要dbt 1.3或更高版本。

DBT現在支持Python模型特定的數據倉庫,包括Databricks。使用dbt Python模型,您可以使用來自Python生態係統的工具來實現難以用SQL實現的轉換。您可以使用dbt Python模型創建Databricks作業來運行單個任務,也可以將dbt任務作為包含多個任務的工作流的一部分。

要在dbt任務中使用Python模型,必須使用通用的集群

有關在Databricks中使用dbt Python模型的更多信息,請參見特定的數據倉庫在DBT文檔中。

錯誤和故障排除

配置文件不存在錯誤

錯誤消息

DBT在找檔案。/tmp/…/profiles. Yml文件。Yml,但是沒有找到。

可能的原因

profiles.yml在指定的$PATH中找不到文件。確保dbt項目的根目錄包含概要文件。yml文件。