在 Databricks SQL 中使用串流資料表載入資料
Databricks 建議使用 Databricks SQL 使用串流資料表來擷取資料。 遞增串流資料表是註冊到 Unity 目錄的資料表,具有額外的串流或遞增資料處理支援。 每個串流資料表都會自動建立差異即時資料表管道。 您可以使用串流資料表從 Kafka 和雲端物件儲存體進行遞增資料載入。
本文展示使用串流資料表從設定為 Unity 目錄磁碟區 (建議) 或外部位置的雲端物件儲存載入資料。
注意
若要瞭解如何使用 Delta Lake 表作為串流來源和接收器,請參閱差異資料表串流讀取和寫入。
開始之前
在開始之前,您必須符合下列需求。
工作區需求:
- 已啟用無伺服器的 Azure Databricks 帳戶。 如需更多資訊,請參閱啟用無伺服器 SQL 倉儲。
- 已啟用 Unity 目錄的工作區。 如需更多資訊,請參閱設定和管理 Unity 目錄。
計算需求:
您可以使用下列其中一項:
使用
Current
通道的 SQL 倉儲。在 Databricks Runtime 13.3 LTS 或以上版本上以共用存取模式計算。
在 Databricks Runtime 15.4 LTS 或更新版本上使用單一使用者存取模式進行計算。
在 Databricks Runtime 15.3 和以下版本上,您無法使用單一使用者計算來查詢其他使用者所擁有的串流數據表。 只有在您擁有串流數據表時,才能在 Databricks Runtime 15.3 和以下使用單一用戶計算。 資料表的建立者是擁有者。
不論數據表擁有權為何,Databricks Runtime 15.4 LTS 和更新版本都支援在單一使用者計算上對 Delta Live Tables 產生的數據表進行查詢。 若要利用 Databricks Runtime 15.4 LTS 及以上版本提供的資料篩選功能,您必須確認您的工作區已啟用無伺服器運算,因為支援差異即時資料表產生的資料篩選功能會在無伺服器運算上執行。 當您使用單一使用者計算來執行數據篩選作業時,可能會向無伺服器計算資源收費。 請參閱 單一用戶計算的細微訪問控制。
權限需求
- Unity 目錄外部位置上的
READ FILES
權限。 如需相關資訊,請參閱建立外部位置以將雲端儲存連線到 Azure Databricks。 - 您在其中建立串流資料表目錄上的
USE CATALOG
權限。 - 您在其中建立串流資料表結構描述上的
USE SCHEMA
權限。 - 您在其中建立串流資料表結構描述上的
CREATE TABLE
權限。
其他需求:
來源資料的路徑。
磁碟區路徑範例:
/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>
外部位置路徑範例:
abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis
注意
本文假設您要載入的資料位於與 Unity 目錄磁碟區或您可以存取的外部位置相對應的雲端儲存位置。
探索和預覽來源資料
在工作區的側邊欄中,按一下查詢,然後按一下建立查詢。
在查詢編輯器中,從下拉式清單中選取使用
Current
通道的 SQL 倉庫。將下列內容貼入編輯器,將角括弧 (
<>
) 中的值取代識別來源資料的資訊,然後按一下執行。注意
如果
read_files
資料表值函式的預設值無法解析您的資料,您在執行該函式時可能會遇到結構描述推斷錯誤。 例如,您可能需要為多行 CSV 或 JSON 檔案設定多行模式。 如需剖析器選項清單,請參閱 read_files 資料表值函式。/* Discover your data in a volume */ LIST "/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>" /* Preview your data in a volume */ SELECT * FROM read_files("/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>") LIMIT 10 /* Discover your data in an external location */ LIST "abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>" /* Preview your data */ SELECT * FROM read_files("abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>") LIMIT 10
將資料載入串流資料表
若要從雲端物件儲存體中的資料建立串流資料表,請將下列內容貼入查詢編輯器,然後按一下 [執行]:
/* Load data from a volume */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('/Volumes/<catalog>/<schema>/<volume>/<path>/<folder>')
/* Load data from an external location */
CREATE OR REFRESH STREAMING TABLE <table-name> AS
SELECT * FROM STREAM read_files('abfss://<container>@<storage-account>.dfs.core.windows.net/<path>/<folder>')
使用 DLT 管道重新整理串流資料表
本節說明使用來自查詢中定義的來源,其最新可用資料重新整理串流資料表的模式。
CREATE
當您或REFRESH
串流數據表時,更新會使用無伺服器 Delta Live Tables 管線來處理。 您定義的每個串流數據表都有相關聯的 Delta Live Tables 管線。
執行 REFRESH
命令之後,會傳回 DLT 管道連結。 您可以使用 DLT 管道連結檢查重新整理的狀態。
注意
只有表擁有者才能刷新串流資料表以取得最新資料。 建立資料表的使用者就是擁有者,擁有者不能變更。
請參閱什麼是差異即時資料表?。
僅內嵌新資料
在預設情況下,read_files
函式會在建立資料表時讀取來源目錄中的所有現有資料,然後在每次重新整理時處理新到的記錄。
若要避免在建立資料表時擷取來源目錄中已存在的資料,請將 includeExistingFiles
選項設定為 false
。 這表示只有在資料表建立後才會處理到達目錄中的資料。 例如:
CREATE OR REFRESH STREAMING TABLE my_bronze_table
AS SELECT *
FROM STREAM read_files(
'abfss://myContainer@myStorageAccount.dfs.core.windows.net/analysis/*/*/*.json',
includeExistingFiles => false)
完全重新整理串流資料表
完全重新整理會以最新的定義重新處理來源中所有可用的資料。 不建議在不保留整個資料歷程記錄或保留期間很短的來源 (例如 Kafka) 上呼叫完全重新整理,因為完全重新整理會截斷現有資料。 如果資料來源中的資料不再可供使用,您可能無法復原舊資料。
例如:
REFRESH STREAMING TABLE my_bronze_table FULL
排程串流資料表以自動重新整理
若要設定串流資料表依據定義的排程自動重新整理,請將下列內容貼入查詢編輯器,然後按一下執行:
ALTER STREAMING TABLE
[[<catalog>.]<database>.]<name>
ADD [SCHEDULE [REFRESH]
CRON '<cron-string>'
[ AT TIME ZONE '<timezone-id>' ]];
如需重新整理排程查詢的範例,請參閱變更串流資料表。
追蹤重新整理的狀態
您可以透過在差異即時資料表 UI 中檢視管理串流資料表的管道,或檢視串流資料表的 DESCRIBE EXTENDED
命令所傳回的重新整理資訊,來檢視串流資料表的重新整理狀態。
DESCRIBE EXTENDED <table-name>
從 Kafka 串流擷取
如需從 Kafka 串流擷取的範例,請參閱 read_kafka。
將串流資料表的存取權授與使用者
若要授與使用者在串流資料表上的 SELECT
權限,以便他們可以查詢該資料表,請將下列內容貼入查詢編輯器,然後按一下執行:
GRANT SELECT ON TABLE <catalog>.<schema>.<table> TO <user-or-group>
如需更多關於在 Unity 目錄安全物件上授與權限的資訊,請參閱 Unity 目錄權限與安全物件。