自動載入器可以從使用 Unity 目錄設定的外部位置安全地內嵌資料。 若要深入瞭解使用 Unity 目錄安全地連接記憶體,請參閱 使用 Unity 目錄連線到雲端物件記憶體。 自動載入器依賴結構化串流來進行累加處理;如需建議和限制,請參閱 使用 Unity 目錄搭配結構化串流。
注意
在 Databricks Runtime 11.3 LTS 及以上版本中,你可以使用自動載入器,使用標準或專用存取模式(過去稱為共享與單使用者存取模式)。
預設支援目錄清單模式。
指定 Unity 目錄中自動載入資源的位置
Unity 目錄安全性模型假設工作負載中參考的所有儲存位置都會由 Unity 目錄管理。 Databricks 建議一律將檢查點和架構演進資訊儲存在 Unity 目錄所管理的記憶體位置。 Unity Catalog 不允許您在數據表目錄下將檢查點或結構推斷和演化檔案嵌套。
使用 Unity Catalog 從雲端儲存匯入資料
以下範例假設執行使用者擁有 READ FILES 外部位置的權限、目標資料表的擁有者權限,以及以下設定與授權。
注意
Azure Data Lake Storage 是唯一 Unity 目錄支援的 Azure 記憶體類型。
| 儲存位置 | 授予 |
|---|---|
abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data |
READ FILES |
abfss://dev-bucket@<storage-account>.dfs.core.windows.net |
READ FILES、WRITE FILES、CREATE TABLE |
使用 AutoLoader 將資料載入到 Unity 目錄管理的表格
以下範例示範如何使用 Auto Loader 將資料匯入 Unity 目錄管理的資料表。
Python
checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", checkpoint_path)
.load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable("dev_catalog.dev_database.dev_table"))
SQL
CREATE OR REFRESH STREAMING TABLE dev_catalog.dev_database.dev_table
AS SELECT * FROM STREAM read_files(
'abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data',
format => 'json'
);
當你在 Lakeflow pipelines 中的 read_files 陳述式內使用 CREATE STREAMING TABLE 時,系統會自動管理檢查點和結構描述的位置。
使用 Auto Loader 將 Unity Catalog 外部資料表載入
要將資料存放在特定儲存位置,請使用 Unity Catalog 的外部資料表,而非受管理的資料表。 例如,使用外部資料表與非 Databricks 用戶端分享資料或登錄現有資料。 使用外部資料表時,儲存路徑由你設定。 請參閱 使用外部數據表。
若要將 Auto Loader 與 Unity Catalog 外部資料表搭配使用,請先使用 CREATE TABLE ... LOCATION 註冊該資料表,然後再以名稱將串流寫入該資料表。 資料表位置必須位於您具有權限的CREATE EXTERNAL TABLE內。 檢查點位置也必須位於受 Unity Catalog 管理的外部位置中。 使用與表格資料分開的路徑。
checkpoint_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/_checkpoint/dev_table"
table_path = "abfss://dev-bucket@<storage-account>.dfs.core.windows.net/external/dev_table"
# One-time: register the external table in UC.
spark.sql(f"""
CREATE TABLE IF NOT EXISTS dev_catalog.dev_database.dev_table
USING DELTA
LOCATION '{table_path}'
""")
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "json")
.option("cloudFiles.schemaLocation", checkpoint_path)
.load("abfss://autoloader-source@<storage-account>.dfs.core.windows.net/json-data")
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable("dev_catalog.dev_database.dev_table"))