舊版 Hive 中繼存放區中的資料庫物件
Azure Databricks 檔著重於使用 Unity 目錄處理數據物件,但大部分的指示也適用於使用舊版 Hive 中繼存放區中註冊的物件。
本文著重於如何使用在舊版 Hive 中繼存放區中註冊的資料庫物件。 具體而言,本文會指出使用Hive中繼存放區物件與使用Unity Catalog物件不同之處。 它也會描述其他可能非預期的行為。
Databricks 建議您將所有數據從舊版 Hive 中繼存放區遷移至 Unity 目錄。 請參閱 將Hive數據表和檢視升級至 Unity 目錄。
Hive 中繼存放區數據控管如何運作?
雖然 Azure Databricks 工作區會繼續包含內建 Hive 中繼存放區,但使用 Hive 中繼存放區的數據控管已被取代。 Databricks 建議您針對所有數據控管使用 Unity 目錄。 請參閱 使用 Unity 目錄和舊版 Hive 中繼存放區。
啟用 Unity 目錄的工作區並不會減少您在 Hive 中繼存放區中已註冊數據的能力。 在舊版Hive中繼存放區中註冊的所有數據物件都會顯示在目錄中的 Unity 目錄介面中 hive_metastore
。 混合式 Hive 中繼存放區和 Unity 目錄工作區是轉換長期 Hive 中繼存放區工作區的實用模型。 不過,Unity 目錄的數據控管和效能優點很高,您應該儘快完全轉換工作區。
Hive 中繼存放區會使用資料表存取控制 (資料表 ACL) 來管理資料庫物件的存取權。 當您在共用存取模式中使用計算時,數據表訪問控制仍有一些支援。 請參閱Hive中繼存放區數據表訪問控制(舊版)。
認證傳遞是Hive中繼存放區資料庫對象上數據控管已被取代的模式。 本文不會處理認證傳遞。 請參閱認證傳遞(舊版)。
注意
本文參考Hive中繼存放區中的數據訪問控制,其指的是舊版數據表訪問控制。
什麼是 hive_metastore
目錄?
在針對 Unity 目錄啟用的工作區中,Hive 中繼存放區中的所有架構都會顯示為 Unity 目錄三層命名空間中目錄的 hive_metastore
子系。 Hive 中繼存放區實際上不會使用目錄,而且此建構提供 Unity 目錄用戶舊版 Hive 中繼存放區中數據表的進入點。 使用下列語法來查詢舊版 Hive 中繼存放區中的數據表:
SELECT * FROM hive_metastore.schema_name.table_name
注意
您可以選擇性地在已啟用 Unity 目錄的工作區中將 hive_metastore
目錄設定為工作區預設值。 請參閱 管理預設目錄。
Hive 中繼存放區中的架構
在舊版Hive中繼存放區中,架構是數據物件階層中的最高層級。
Unity 目錄與 Hive 中繼存放區之間有一些重要差異,包括:
- 您無法使用目錄總管在 Hive 中繼存放區中建立架構。 您可以檢視和編輯架構的許可權。
- 在Hive中繼存放區中建立的架構只能使用其名稱中的英數位元 ASCII 字元和底線。
- Hive 中繼存放區可讓您在建立期間宣告
LOCATION
架構的 。 此函式類似於 Unity 目錄受控儲存位置,其行為差異如下:- 如果您沒有提供位置,則會使用預設位置
/user/hive/warehouse/<schema-name>
。 此位置位於 DBFS 根目錄上,不建議用來儲存任何生產數據。 - 提供的路徑可以是建立架構的使用者可用的任何雲端儲存位置,包括雲端 URI、DBFS 根目錄和 DBFS 掛接。
- 存取位置並非由Hive中繼存放區管理。
- 刪除Hive中繼存放區中的架構會導致該架構位置中的所有檔案以遞歸方式刪除,而不論數據表類型(Managed 或 external)。
- 如果您沒有提供位置,則會使用預設位置
若要避免意外遺失數據,當您使用Hive中繼存放區架構位置時,Databricks 會建議下列各項:
- 請勿指派已經包含數據的架構位置。
- 請勿在架構位置中建立外部數據表。
- 請勿在多個架構之間共用位置。
- 請勿指派與另一個架構位置重疊的架構位置。 換句話說,請勿使用另一個架構位置的子系路徑。
- 請勿指派與外部數據表位置重疊的架構位置。
Hive 中繼存放區中的受控數據表
Hive 中繼存放區中的受控數據表沒有任何 Unity 目錄中受控數據表的效能優點。 如同 Unity 目錄受控數據表,Hive 中繼存放區受控數據表預設會使用 Delta Lake。 不過,在Hive中繼存放區中,不同於 Unity 目錄,您也可以使用 Azure Databricks 支援的大部分其他數據格式來建立受控數據表。
Hive 中繼存放區中的受控數據表一律會在包含架構的儲存位置中建立。 您用來查詢受控數據表的計算必須具有記憶體位置的存取權。
Hive 中繼存放區不會以 Unity 目錄執行的方式管理受控數據表的數據配置。 當您在Hive中繼存放區中卸除受控數據表時,會立即刪除所有基礎數據檔。 另一方面,在 Unity 目錄中,您可以 UNDROP
管理資料表 7 天,且數據會在 30 天內永久刪除。
您可以使用路徑型存取,在 Hive 中繼存放區受控數據表中讀取或寫入數據,而在 Unity 目錄中,您無法也不需要使用。
Hive 中繼存放區中的外部數據表
在引進 Unity 目錄之前,在 Azure Databricks 中建立的大部分數據表都已設定為 Hive 中繼存放區中的外部數據表。 偏好外部數據表的舊版建議通常著重於幾個主要層面:
- 您可以在雲端物件記憶體中的現有數據上註冊外部資料表。
- 您可以直接從外部系統存取外部資料表中的數據檔以進行讀取或寫入。
- 如果數據表意外卸除,則不會刪除數據檔。
- 由於外部數據表需要
LOCATION
,因此生產數據不太可能意外出現在 DBFS 根目錄中。
Azure Databricks 現在建議大部分表格式數據記憶體使用 Unity 目錄受控數據表。 請參閱 使用受控數據表。
Hive 中繼存放區中的檢視
您可以在Hive中繼存放區中宣告檢視,此檢視是由 Azure Databricks 所支援的任何數據源所支援。 在 Unity 目錄中,您只能對 Unity 目錄數據表和檢視宣告檢視,包括外部數據表、具體化檢視和 Delta 共用數據表。
由於能夠針對非表格式數據源宣告檢視,Hive 中繼存放區中的檢視可以授與非預期或非預期存取權,以結合用戶環境中的其他存取組態來授與數據的非預期存取權。
例如,請考慮下列項目:
- 數據表
my_table
是使用 DBFS 掛接路徑/mnt/my_table
來定義。- DBFS 掛接認證會儲存在工作區中,因此所有用戶預設都可以存取此路徑。
- 數據表 ACL 可用來限制對
my_table
使用者群組的存取。- 舊版數據表 ACL 僅適用於與共用存取模式或 SQL 倉儲串連的計算。
- 檢視
my_view
會直接針對備份相同數據檔'abfss://container-name@storage-account-name.dfs.core.windows.net/my_table'
的雲端 URI 定義。- URI 認證依賴 Spark 工作階段或計算組態中定義的存取原則。
檢視 my_view
具有下列屬性:
- 它不會使用用來將雲端物件記憶體掛接至 的
/mnt/my_table
DBFS 掛接認證。 - 不論計算組態為何,它都不會遵守 在 上
my_table
設定的數據表 ACL。 - 它需要針對提供讀取許可權的
'abfss://container-name@storage-account-name.dfs.core.windows.net/my_table'
計算所設定的數據存取原則。
注意
這是您可能會遇到的非預期行為範例之一,而且無法完整說明舊版 Hive 中繼存放區中檢視所呈現的所有潛在陷阱。 Databricks 建議針對所有檢視定義使用 Unity 目錄。
舊版Hive數據表和HiveQL支援
Azure Databricks 包含 Hive 數據表和 HiveQL 功能的一些舊版支援。 這項功能是舊版 Azure Databricks 和 Apache Hadoop 工具生態系統的剩餘部分。 Databricks 不建議使用 Hive 數據表或其他 Hive 功能,因為這項功能並未優化,而且在某些計算組態中缺乏支援。
下列文章說明舊版 Hive 功能: