Databricks Lakehouse中的數據對象
Databricks Lakehouse將使用Delta Lake存儲在雲對象存儲中的數據以熟悉的關係(如數據庫、表和視圖)進行組織。該模型將數據倉庫的許多優點與數據湖的可伸縮性和靈活性結合在一起。了解關於此模型如何工作以及對象數據和元數據之間關係的更多信息,以便在為您的組織設計和實現Databricks Lakehouse時應用最佳實踐。
Databricks Lakehouse中有哪些數據對象?
Databricks Lakehouse架構將在雲對象存儲中用Delta Lake協議存儲的數據與注冊到的元數據結合在一起metastore.Databricks Lakehouse中有五個主要對象:
目錄:一組數據庫。
數據庫或模式:目錄中對象的分組。數據庫包含表、視圖和函數。
表格:對象存儲係統中以數據文件形式存儲的行和列的集合。
視圖:通常針對一個或多個表或數據源保存的查詢。
函數:保存的邏輯,返回一個標量值或一組行。
![Unity Catalog對象模型圖](http://www.eheci.com/docs/docs/_images/object-model.png)
有關使用Unity Catalog保護對象的信息,請參見可安全對象模型.
什麼是亞轉移?
亞礦包含定義湖屋中數據對象的所有元數據。Databricks提供以下metastore選項:
統一目錄:您可以創建一個metastore來存儲和跨多個Databricks工作區共享元數據。Unity Catalog在帳戶級別進行管理。
蜂巢metastore: Databricks將內置Hive metastore的所有元數據存儲為托管服務。metastore的一個實例部署到每個集群,並從每個客戶工作區的中央存儲庫安全地訪問元數據。
外部metastore:你也可以把你自己的metastore帶到Databricks。
無論使用哪種metastore, Databricks都將與客戶配置的對象存儲中的表相關的所有數據存儲在其雲帳戶中。
什麼是目錄?
目錄是Databricks Lakehouse關係模型中最高的抽象(或最粗的粒度)。每個數據庫都將與一個目錄相關聯。目錄作為對象存在於一個亞礦中。
在Unity Catalog引入之前,Databricks使用了兩層命名空間。目錄是Unity Catalog命名空間模型中的第三層:
catalog_name.database_name.table_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支持的,並且不會提供ACID事務和優化的Delta表性能。屬於此類別的表包括針對中的數據注冊的表外部係統和針對數據湖中的其他文件格式.
在Databricks中有兩種表格,管理而且非托管(或外部)表。
請注意
的Delta活動表直播表和流直播表之間的區別不是從表的角度強製執行的。
什麼是托管表?
Databricks管理一個托管表的元數據和數據;刪除表時,也會刪除底層數據。數據分析師和其他主要使用SQL的用戶可能更喜歡這種行為。創建表時默認使用托管表。托管表的數據駐留在位置
它注冊到的數據庫的。數據位置和數據庫之間的這種托管關係意味著,為了將托管表移動到新數據庫,必須將所有數據重寫到新位置。
創建托管表的方法有很多種,包括:
創建表格table_name作為選擇*從another_table
創建表格table_name(field_name1INT,field_name2字符串)
df.寫.saveAsTable(“table_name”)
什麼是非托管表?
Databricks隻管理非托管(外部)表的元數據;刪除表時,不會影響底層數據。非托管表將始終指定位置
在表創建期間;您可以將現有的數據文件目錄注冊為表,也可以在首次定義表時提供路徑。由於數據和元數據是獨立管理的,因此可以重命名表或將其注冊到新數據庫,而不需要移動任何數據。數據工程師通常更喜歡非托管表以及它們為生產數據提供的靈活性。
創建非托管表的方法有很多種,包括:
創建表格table_name使用δ位置/道路/ /現有數據的
創建表格table_name(field_name1INT,field_name2字符串)位置/ /空/目錄/路徑的
df.寫.選項(“路徑”,/ /空/目錄/路徑”).saveAsTable(“table_name”)
什麼是視圖?
視圖通常存儲針對metastore中的一個或多個數據源或表的查詢的文本。在Databricks中,視圖相當於數據庫中作為對象持久化的Spark DataFrame。與DataFrames不同,您可以從Databricks產品的任何部分查詢視圖,前提是您擁有這樣做的權限。創建視圖不處理或寫入任何數據;隻有查詢文本被注冊到關聯數據庫中的metastore。
什麼是臨時視圖?
臨時視圖具有有限的作用域和持久性,並且沒有注冊到模式或編目。臨時視圖的生存期根據你所使用的環境而不同:
在筆記本和作業中,臨時視圖的作用域是筆記本或腳本級別。它們不能在聲明它們的筆記本之外被引用,並且當筆記本從集群中分離時,它們將不再存在。
在Databricks SQL中,臨時視圖的作用域是查詢級別。同一個查詢中的多個語句可以使用臨時視圖,但不能在其他查詢中引用它,即使在同一個儀表板中也是如此。
全局臨時視圖的作用域是集群級別,可以在共享計算資源的筆記本電腦或作業之間共享。Databricks建議使用帶有適當表acl的視圖,而不是全局臨時視圖。
關係對象如何在Delta活動表中工作?
Delta活動表使用聲明性語法定義和管理DDL、DML和基礎設施部署。Delta Live Tables在邏輯規劃和執行過程中使用了“虛擬模式”的概念。Delta Live Tables可以與Databricks環境中的其他數據庫交互,通過在管道配置設置中指定目標數據庫,Delta Live Tables可以發布和持久化表以供在其他地方查詢。在Delta Live tables中創建的所有表都是Delta表,可以聲明為托管表或非托管表。
雖然可以在Delta Live table中聲明視圖,但這些視圖應該被視為管道範圍內的臨時視圖。Delta Live tables中的臨時表是一個獨特的概念:這些表將數據持久化到存儲中,但不將數據發布到目標數據庫。
一些操作,如應用變化成
,將表和視圖同時注冊到數據庫;表名將以下劃線(_
),視圖將表名聲明為應用變化成
操作。視圖查詢相應的隱藏表以實現結果。