Databricks Lakehouse 中的資料物件

Databricks Lakehouse 會組織使用 Delta Lake 儲存在雲端物件儲存體中的資料,並熟悉資料庫、資料表和檢視等關聯性。 此模型結合了企業資料倉儲的許多優點,以及資料湖的延展性和彈性。 深入瞭解此模型的運作方式,以及物件資料和中繼資料之間的關聯性,讓您可以在為組織設計和實作 Databricks Lakehouse 時套用最佳做法。

Databricks Lakehouse 中的哪些資料物件?

Databricks Lakehouse 架構會將儲存的資料與儲存在雲端物件儲存體中的 Delta Lake 通訊協定結合,並將中繼資料註冊到 中繼存放區 。 Databricks Lakehouse 中有五個主要物件:

  • 目錄 :資料庫的群組。
  • 資料庫 或架構:目錄中物件的群組。 資料庫包含資料表、檢視和函式。
  • 資料表 :儲存為物件儲存體中資料檔案的資料列和資料行集合。
  • 檢視 :儲存的查詢通常針對一或多個資料表或資料來源。
  • 函式 :會傳回純量值或資料列集的已儲存邏輯。

Unity Catalog object model diagram

如需使用 Unity 目錄保護物件的資訊,請參閱 安全性實體物件模型

什麼是中繼存放區?

中繼存放區包含定義 Lakehouse 中資料物件的所有中繼資料。 Azure Databricks 提供下列中繼存放區選項:

  • Unity 目錄中繼存放區 :Unity 目錄提供集中式存取控制、稽核、譜系和資料探索功能。 您可以在 Azure Databricks 帳戶層級建立 Unity 目錄中繼存放區,而且單一中繼存放區可以跨多個工作區使用。

    每個 Unity 目錄中繼存放區都會在 Azure 帳戶的 Azure Data Lake 儲存體 Gen2 容器中設定根儲存體位置。 預設會使用此儲存位置來儲存受控資料表的資料。

    在 Unity 目錄中,資料預設為安全。 一開始,使用者無法存取中繼存放區中的資料。 中繼存放區管理員或物件的擁有者可以授與存取權。 Unity 目錄中的安全性實體物件是階層式物件,且權限會向下繼承。 Unity 目錄提供單一位置來管理資料存取原則。 使用者可以從中繼存放區所連結的任何工作區存取 Unity 目錄中的資料。 如需詳細資訊,請參閱 在 Unity 目錄中 管理許可權。

  • 內建 Hive 中繼存放區(舊版) :每個 Azure Databricks 工作區都包含內建的 Hive 中繼存放區作為受控服務。 中繼存放區的實例會部署到每個叢集,並安全地從每個客戶工作區的中央存放庫存取中繼資料。

    Hive 中繼存放區提供比 Unity 目錄更集中的資料控管模型。 根據預設,叢集可讓所有使用者存取工作區內建 Hive 中繼存放區所管理的所有資料,除非該叢集已啟用資料表存取控制。 如需詳細資訊,請參閱 Hive 中繼存放區資料表存取控制(舊版)。

    資料表存取控制不會儲存在帳戶層級,因此必須針對每個工作區個別設定它們。 若要利用 Unity 目錄所提供的集中式和簡化的資料治理模型,Databricks 建議您 將工作區 Hive 中繼存放區所管理的資料表升級至 Unity 目錄中繼存放區

  • 外部 Hive 中繼存放區 (舊版) :您也可以將自己的中繼存放區帶入 Azure Databricks。 Azure Databricks 叢集可以連線到現有的外部 Apache Hive 中繼存放區。 您可以使用資料表存取控制來管理外部中繼存放區中的許可權。 資料表存取控制不會儲存在外部中繼存放區中,因此必須針對每個工作區個別設定它們。 Databricks 建議您改用 Unity 目錄,以簡化和帳戶為中心的控管模型。

不論您使用的中繼存放區為何,Azure Databricks 都會將所有資料表資料儲存在雲端帳戶的物件儲存體中。

什麼是目錄?

目錄是 Databricks Lakehouse 關係模型中最高的抽象概念(或最粗細的粒紋)。 每個資料庫都會與目錄相關聯。 目錄會以中繼存放區中的物件形式存在。

在推出 Unity 目錄之前,Azure Databricks 使用兩層命名空間。 目錄是 Unity 目錄名稱步調模型中的第三層:

catalog_name.database_name.table_name

內建 Hive 中繼存放區僅支援單一目錄 hive_metastore

什麼是資料庫?

資料庫是資料物件的集合,例如資料表或檢視表(也稱為「關聯性」),以及函式。 在 Azure Databricks 中,「架構」和「資料庫」一詞會交替使用(而在許多關聯式系統中,資料庫是架構的集合)。

資料庫一律會與雲端物件儲存體上的位置相關聯。 您可以選擇性地在註冊資料庫時指定 LOCATION ,請記住:

  • LOCATION與資料庫相關聯的 一律會被視為受控位置。
  • 建立資料庫並不會在目標位置建立任何檔案。
  • LOCATION資料庫的 會決定所有登錄至該資料庫之資料表之資料的預設位置。
  • 成功卸載資料庫會遞迴卸載儲存在受控位置中的所有資料和檔案。

資料庫和資料檔案所管理位置之間的這種互動非常重要。 若要避免不小心刪除資料:

  • 請勿跨多個資料庫定義共用資料庫位置。
  • 請勿將資料庫註冊到已經包含資料的位置。
  • 若要獨立于資料庫管理資料生命週期,請將資料儲存到任何資料庫位置下未巢狀的位置。

什麼是資料表?

Azure Databricks「資料表」則是結構化資料的集合。 Delta 資料表會將資料儲存為雲端物件儲存體上的檔案目錄,並將資料表中繼資料註冊至目錄和架構內的中繼存放區。 由於 Delta Lake 是 Azure Databricks 中建立之資料表的預設儲存體提供者,因此 Databricks 中建立的所有資料表預設都是 Delta 資料表。 由於 Delta 資料表會將資料儲存在雲端物件儲存體中,並透過中繼存放區提供資料的參考,因此整個組織的使用者可以使用其慣用的 API 來存取資料;在 Databricks 上,這包括 SQL、Python、PySpark、Scala 和 R。

請注意,可以在不是 Delta 資料表的 Databricks 上建立資料表。 這些資料表不受 Delta Lake 支援,且不會提供 Delta 資料表的 ACID 交易和優化效能。 屬於此類別的資料表包括針對外部系統中資料註冊的資料表,以及針對 Data Lake 中其他檔案格式註冊的資料表。 請參閱 資料來源連線

Databricks 中有兩種資料表: Managed Unmanaged (或 external) 資料表。

注意

即時 資料表與串流即時資料表之間的差異不會從資料表的觀點強制執行。

什麼是受控資料表?

Azure Databricks 會同時管理受控資料表的中繼資料和資料;當您卸載資料表時,也會刪除基礎資料。 大部分在 SQL 中運作的資料分析師和其他使用者可能偏好此行為。 建立資料表時,受控資料表是預設值。 Managed 資料表的資料位於 LOCATION 其註冊所在的資料庫。 資料位置與資料庫之間的這個 Managed 關聯性表示,若要將 Managed 資料表移至新的資料庫,您必須將所有資料重寫至新的位置。

有數種方式可以建立受控資料表,包括:

CREATE TABLE table_name AS SELECT * FROM another_table
CREATE TABLE table_name (field_name1 INT, field_name2 STRING)
df.write.saveAsTable("table_name")

什麼是 Unmanaged 資料表?

Azure Databricks 只會管理 Unmanaged (外部) 資料表的中繼資料;當您卸載資料表時,不會影響基礎資料。 非受控資料表一律會在資料表建立期間指定 LOCATION ;您可以在第一次定義資料表時,將現有的資料檔案目錄註冊為數據表,或提供路徑。 因為資料和中繼資料是獨立管理的,所以您可以將資料表重新命名或註冊到新的資料庫,而不需要移動任何資料。 資料工程師通常會偏好非受控資料表,以及它們為生產資料提供彈性。

建立 Unmanaged 資料表的方法有很多種,包括:

CREATE TABLE table_name
USING DELTA
LOCATION '/path/to/existing/data'
CREATE TABLE table_name
(field_name1 INT, field_name2 STRING)
LOCATION '/path/to/empty/directory'
df.write.option("path", "/path/to/empty/directory").saveAsTable("table_name")

什麼是檢視?

檢視會針對中繼存放區中的一或多個資料來源或資料表,儲存查詢的文字。 在 Databricks 中,檢視相當於保存為資料庫中物件的 Spark DataFrame。 不同于 DataFrames,您可以查詢來自 Databricks 產品任何部分的檢視,前提是您有權這麼做。 建立檢視不會處理或寫入任何資料;只有查詢文字會註冊至相關聯資料庫中的中繼存放區。

什麼是暫存檢視?

暫存檢視的範圍和持續性有限,且未註冊至架構或目錄。 暫存檢視的存留期會根據您使用的環境而有所不同:

  • 在筆記本和作業中,暫存檢視的範圍是筆記本或腳本層級。 它們無法在宣告的筆記本外部參考,而且當筆記本與叢集中斷連結時將不再存在。
  • 在 Databricks SQL 中,暫存檢視的範圍設定為查詢層級。 相同查詢內的多個語句可以使用暫存檢視,但無法在其他查詢中參考,即使在相同的儀表板內也一樣。
  • 全域暫存檢視的範圍設定為叢集層級,而且可以在共用運算資源的筆記本或作業之間共用。 Databricks 建議搭配適當的資料表 ACL 使用檢視,而不是全域暫存檢視。

什麼是函式?

函式可讓您將使用者定義邏輯與資料庫產生關聯。 函式可以傳回純量值或資料列集。 函式可用來匯總資料。 Azure Databricks 可讓您根據執行內容,以各種語言儲存函式,並受到廣泛支援的 SQL。 您可以使用函式,對 Databricks 產品上各種內容提供自訂邏輯的受控存取權。

關聯式物件如何在 Delta Live Tables 中運作?

Delta Live Tables 會使用宣告式語法來定義和管理 DDL、DML 和基礎結構部署。 Delta Live Tables 會在邏輯規劃和執行期間使用「虛擬架構」的概念。 Delta Live Tables 可以與 Databricks 環境中的其他資料庫互動,而 Delta Live Tables 可以在管線組態設定中指定目標資料庫,來發佈和保存資料表以供查詢其他地方。

在 Delta Live Tables 中建立的所有資料表都是 Delta 資料表。 搭配 Delta Live Tables 使用 Unity 目錄時,所有資料表都是 Unity 目錄受控資料表。 如果 Unity 目錄不是使用中,資料表可以宣告為 Managed 或 Unmanaged 資料表。

雖然可以在 Delta Live Tables 中宣告檢視,但這些檢視應該視為限定于管線的暫存檢視。 Delta Live Tables 中的臨時表是唯一的概念:這些資料表會將資料保存到儲存體,但不會將資料發佈至目標資料庫。

某些作業,例如 APPLY CHANGES INTO ,會同時向資料庫註冊資料表和檢視;資料表名稱會以底線 ( _ ) 開頭,而檢視表會將資料表名稱宣告為作業的目標 APPLY CHANGES INTO 。 檢視會查詢對應的隱藏資料表,以具體化結果。