在 Databricks SQL 中使用串流數據表載入數據
Databricks 建議使用串流數據表來使用 Databricks SQL 內嵌數據。 串流數據表 是註冊至 Unity 目錄的數據表,可額外支援串流或增量數據處理。 針對每個串流數據表,系統會自動建立一個 Delta Live Tables 管線。 您可以使用串流資料表從 Kafka 和雲端物件記憶體載入累加資料。
本文示範如何使用串流數據表,從設定為 Unity 目錄磁碟區或外部位置的雲端物件記憶體載入數據。
注意
若要瞭解如何使用 Delta Lake 資料表作為串流來源和接點,請參閱 Delta 資料表串流讀取和寫入。
重要
Databricks SQL 中建立的串流數據表是由無伺服器 Delta Live Tables 管線所支援。 您的工作區必須支持無伺服器管線才能使用這項功能。
開始之前
在開始之前,您必須符合下列需求。
工作區需求:
- 已啟用無伺服器的 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 和更新版本所提供的數據篩選,您必須確認工作區 已啟用無伺服器計算,因為支援 Delta Live Tables 產生的數據表的數據篩選功能會在無伺服器計算上執行。 當您使用單一使用者計算來執行數據篩選作業時,可能會向無伺服器計算資源收費。 請參閱 單一用戶計算的細微訪問控制。
權限需求
- Unity Catalog 外部位置上的
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>')
設定運行時間通道
使用 SQL 倉儲建立的串流數據表會使用 Delta Live Tables 管線自動重新整理。 Delta Live Tables 管線預設會在 current
通道中使用運行時間。 請參閱 Delta Live Tables 的版本資訊及發行升級流程,以了解發行流程。
Databricks 建議針對生產工作負載使用 current
通道。 新功能會先發行至 preview
通道。 您可以將管線設定為預覽 Delta Live Tables 通道,藉由將 preview
指定為資料表屬性來測試新功能。 您可以在建立資料表時或在使用 ALTER 語句建立資料表之後指定這個屬性。
下列程式代碼範例示範如何在 CREATE 語句中將通道設定為預覽:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
使用 DLT 管線重新整理串流數據表
本節說明使用查詢中所定義來源中可用的最新數據重新整理串流數據表的模式。
當您 CREATE
或 REFRESH
串流數據表時,更新程序會使用無伺服器的 Delta 即時表格處理流程。 您定義的每個串流數據表都有相關聯的 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>' ]];
如需重新整理排程查詢的範例,請參閱 ALTER STREAMING TABLE。
追蹤重新整理的狀態
您可以檢視串流數據表重新整理的狀態,方法是在 Delta Live Tables 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 目錄許可權和安全性實體物件。
使用查詢歷程記錄監視執行
您可以使用查詢歷程記錄頁面來存取查詢詳細數據和查詢配置檔,以協助您識別用來執行串流數據表更新之 Delta Live Tables 管線中效能不佳的查詢和瓶頸。 如需查詢歷程記錄和查詢配置檔中可用資訊種類的概觀,請參閱 查詢歷程記錄 和 查詢配置檔。
重要
這項功能處於公開預覽狀態。 工作區管理員可以從 [預覽 ] 頁面啟用這項功能。 請參閱管理 Azure Databricks 預覽版。
與串流數據表相關的所有語句都會出現在查詢記錄中。 您可以使用 語句 下拉式篩選來選取任何命令並檢查相關的查詢。 所有 CREATE
語句之後,都會接續一個在 Delta Live Tables 管線上異步執行的 REFRESH
語句。 這些 REFRESH
語句通常包含詳細的查詢計劃,以提供優化效能的見解。
若要存取 REFRESH
查詢歷程記錄 UI 中的語句,請使用下列步驟:
- 按兩下 左側提要欄位以開啟 [查詢歷程記錄 ] UI。
- 從 [語句] 下拉式篩選選取 [REFRESH] 複選框。
- 按兩下查詢語句的名稱,即可檢視摘要詳細數據,例如查詢的持續時間和匯總計量。
- 按兩下 [ 查看查詢設定檔 ] 以開啟查詢設定檔。 如需巡覽查詢配置檔的詳細資訊,請參閱 查詢配置檔 。
- 您可以選擇性地使用 [查詢來源] 區段中的連結來開啟相關的查詢或管線。
您也可以使用 SQL 編輯器中的連結,或從附加至 SQL 倉儲的筆記本存取查詢詳細數據。
注意
您的串流數據表必須設定為在 預覽 通道上運行。 請參閱 設定執行時間通道。