Databricks Lakehouse中的數據對象

Databricks Lakehouse使用熟悉的關係(如數據庫、表和視圖)組織Delta Lake存儲在雲對象存儲中的數據。該模型結合了數據倉庫的許多優點和數據湖的可伸縮性和靈活性。了解更多關於此模型如何工作以及對象數據和元數據之間的關係的信息,以便在為您的組織設計和實現Databricks Lakehouse時應用最佳實踐。

Databricks Lakehouse中有哪些數據對象?

Databricks Lakehouse架構將雲對象存儲中使用Delta Lake協議存儲的數據與注冊到的元數據相結合metastore.Databricks湖屋有五個主要對象:

  • 目錄:一組數據庫。

  • 數據庫或稱模式:目錄中對象的分組。數據庫包含表、視圖和函數。

  • 表格:在對象存儲中作為數據文件存儲的行和列的集合。

  • 視圖:通常針對一個或多個表或數據源保存的查詢。

  • 函數:保存的邏輯,返回一個標量值或一組行。

Unity Catalog對象模型圖

有關使用Unity Catalog保護對象的信息,請參見可獲得的對象模型

什麼是轉移瘤?

亞metastore包含定義湖屋中數據對象的所有元數據。Databricks提供以下metastore選項:

  • 統一目錄您可以創建一個metastore來跨多個Databricks工作區存儲和共享元數據。Unity Catalog在帳戶級別進行管理。

  • 蜂巢metastore: Databricks將Hive內置metastore的所有元數據存儲為托管服務。轉移庫的實例部署到每個集群,並從每個客戶工作區的中央存儲庫安全地訪問元數據。

  • 外部metastore:你也可以帶你自己的metastore到Databricks。

無論使用何種轉移存儲,Databricks都會在其雲帳戶中存儲客戶配置的對象存儲中與表相關的所有數據。

什麼是目錄?

目錄是Databricks Lakehouse關係模型中最高的抽象(或最粗的粒度)。每個數據庫都將與一個目錄相關聯。目錄作為轉移體中的對象存在。

在Unity Catalog引入之前,Databricks使用兩層命名空間。目錄是Unity Catalog命名空間模型中的第三層:

catalog_namedatabase_nametable_name

內置的Hive metastore隻支持一個目錄,hive_metastore

什麼是數據庫?

數據庫是數據對象的集合,如表或視圖(也稱為“關係”)和函數。在Databricks中,術語“模式”和“數據庫”可以互換使用(而在許多關係係統中,數據庫是模式的集合)。

數據庫將始終與雲對象存儲上的某個位置相關聯。您可以選擇指定位置注冊數據庫時,請記住:

  • 位置與數據庫關聯的總是被認為是托管位置。

  • 創建數據庫不會在目標位置創建任何文件。

  • 位置將確定注冊到該數據庫的所有表的數據的默認位置。

  • 成功刪除數據庫將遞歸刪除存儲在托管位置中的所有數據和文件。

由數據庫管理的位置與數據文件之間的交互非常重要。為了避免不小心刪除數據:

  • 不要跨多個數據庫定義共享數據庫位置。

  • 不要將數據庫注冊到已經包含數據的位置。

  • 若要獨立於數據庫管理數據生命周期,請將數據保存到不嵌套在任何數據庫位置下的位置。

什麼是表格?

Databricks表是結構化數據的集合。Delta表將數據作為雲對象存儲上的文件目錄存儲,並將表元數據注冊到目錄和模式中的metastore。由於Delta Lake是Databricks中創建的表的默認存儲提供程序,因此在默認情況下,Databricks中創建的所有表都是Delta表。由於Delta表將數據存儲在雲對象存儲中,並通過一個metastore提供對數據的引用,因此跨組織的用戶可以使用他們首選的api訪問數據;在Databricks上,這包括SQL, Python, PySpark, Scala和R。

注意,可以在Databricks上創建非Delta表的表。這些表沒有Delta Lake的支持,不會提供Delta表的ACID事務和優化的性能。屬於這一類的表包括根據中的數據注冊的表外部係統和針對數據湖中的其他文件格式

數據庫裏有兩種表格,管理而且非托管(或外部)表。

請注意

三角洲生活表動態表和流實時表之間的區別不是從表的角度強製執行的。

什麼是托管表?

Databricks同時管理一個托管表的元數據和數據;刪除表時,也會刪除底層數據。主要使用SQL的數據分析師和其他用戶可能更喜歡這種行為。在創建表時,托管表是默認的。托管表的數據駐留在位置它注冊到的數據庫的。數據位置和數據庫之間的這種托管關係意味著,為了將托管表移動到新數據庫,必須將所有數據重寫到新位置。

創建托管表的方法有很多,包括:

創建表格table_name作為選擇another_table
創建表格table_namefield_name1INTfield_name2字符串
dfsaveAsTable“table_name”

什麼是非托管表?

Databricks隻管理非托管(外部)表的元數據;刪除表時,不會影響底層數據。非托管表將始終指定位置在表創建;可以將數據文件的現有目錄注冊為表,也可以在首次定義表時提供路徑。因為數據和元數據是獨立管理的,所以可以重命名表或將表注冊到新數據庫,而不需要移動任何數據。數據工程師通常更喜歡非托管表及其為生產數據提供的靈活性。

創建非托管表的方法有很多,包括:

創建表格table_name使用δ位置/道路/ /現有數據的
創建表格table_namefield_name1INTfield_name2字符串位置/ /空/目錄/路徑的
df選項“路徑”/ /空/目錄/路徑”saveAsTable“table_name”

什麼是風景?

視圖通常針對一個或多個數據源或轉移中的表存儲查詢的文本。在Databricks中,視圖相當於作為數據庫對象持久化的Spark DataFrame。與DataFrames不同的是,您可以從Databricks產品的任何部分查詢視圖,前提是您擁有這樣做的權限。創建視圖不會處理或寫入任何數據;隻有查詢文本注冊到關聯數據庫中的metastore。

什麼是臨時視圖?

臨時視圖的作用域和持久性有限,並且沒有注冊到模式或編目。臨時視圖的生存期根據你使用的環境而不同:

  • 在筆記本和作業中,臨時視圖的作用域是筆記本或腳本級別。它們不能在聲明它們的筆記本之外被引用,並且當筆記本從集群分離時將不再存在。

  • 在Databricks SQL中,臨時視圖的作用域是查詢級別。同一個查詢中的多條語句可以使用臨時視圖,但它不能在其他查詢中引用,即使在同一個儀表板中也是如此。

  • 全局臨時視圖的範圍是集群級別,可以在共享計算資源的筆記本或作業之間共享。Databricks建議使用帶有適當表acl的視圖,而不是全局臨時視圖。

什麼是函數?

函數允許您將用戶定義邏輯與數據庫關聯起來。函數可以返回標量值或行集。您可以使用函數在Databricks產品的各種上下文中提供對自定義邏輯的托管訪問。

關係對象如何在Delta Live表中工作?

三角洲生活表使用聲明性語法來定義和管理DDL、DML和基礎設施部署。Delta Live Tables在邏輯規劃和執行過程中使用了“虛擬模式”的概念。Delta Live Tables可以與Databricks環境中的其他數據庫交互,Delta Live Tables可以通過在管道配置設置中指定目標數據庫來發布和保存表,以便在其他地方進行查詢。在Delta Live表中創建的所有表都是Delta表,可以聲明為托管表或非托管表。

雖然可以在Delta Live表中聲明視圖,但這些視圖應該被認為是管道範圍內的臨時視圖。Delta Live tables中的臨時表是一個獨特的概念:這些表將數據持久化到存儲中,但不將數據發布到目標數據庫。

一些操作,例如應用變化,將表和視圖同時注冊到數據庫;表名將以下劃線(_),視圖將有表名聲明為應用變化操作。視圖查詢相應的隱藏表來具體化結果。