共用方式為


在 Databricks SQL 中使用串流數據表載入數據

Databricks 建議使用串流數據表來使用 Databricks SQL 內嵌數據。 串流數據表 是註冊至 Unity 目錄的數據表,可額外支援串流或增量數據處理。 每個串流資料表會自動創建一個 DLT 管線。 您可以使用串流資料表從 Kafka 和雲端物件記憶體載入累加資料。

本文示範如何使用串流數據表,從設定為 Unity 目錄磁碟區或外部位置的雲端物件記憶體載入數據。

注意

若要瞭解如何使用 Delta Lake 資料表作為串流來源和接點,請參閱 Delta 資料表串流讀取和寫入

重要

Databricks SQL 中建立的串流數據表是由無伺服器 DLT 管線所支援。 您的工作區必須支持無伺服器管線才能使用這項功能。

開始之前

在開始之前,您必須符合下列需求。

工作區需求

計算需求

您可以使用下列其中一項:

  • 使用 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 和更新版本都支援在專用計算上對 DLT 產生的數據表進行查詢。 若要利用 Databricks Runtime 15.4 LTS 和更新版本所提供的數據篩選,您必須確認 您的工作區已啟用無伺服器計算,因為支援 DLT 產生的數據表的數據篩選功能會在無伺服器計算上執行。 當您使用專用計算來執行資料篩選作業時,可能會向您收取無伺服器計算資源的費用。 請參閱 專用計算(先前為單一用戶計算)的細粒度存取控制。

權限需求

  • 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 目錄磁碟區或外部位置。

探索和預覽來源資料

  1. 在工作區的側邊欄中,按一下查詢,然後按一下建立查詢

  2. 在查詢編輯器中,從下拉式清單中選取使用 Current 通道的 SQL 倉儲。

  3. 將下列內容貼到編輯器中,以角括弧(<>)取代識別源資料的資訊值,然後按一下 [執行]

    注意

    如果函式的預設值無法剖析您的數據,則執行 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 倉儲建立的串流數據表會自動使用 DLT 管線重新整理。 DLT 管線預設會在 current 通道中使用運行時間。 請參閱 DLT 版本資訊和發行升級程式 以瞭解發行程式。

Databricks 建議針對生產工作負載使用 current 通道。 新功能會優先發佈到preview頻道。 您可以將管線設定為預覽 DLT 通道,藉由將 preview 指定為數據表屬性來測試新功能。 您可以在建立資料表時或在使用 ALTER 語句建立資料表之後指定這個屬性。

下列程式代碼範例示範如何在 CREATE 語句中將通道設定為預覽:

CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
  *
FROM
  range(5)

使用 DLT 管線重新整理串流數據表

本節說明使用查詢中所定義來源中可用的最新數據重新整理串流數據表的模式。

當您 CREATEREFRESH 串流數據表時,更新程式會使用無伺服器 DLT 管線。 您定義的每個串流數據表都有相關聯的 DLT 管線。

執行 REFRESH 命令之後,就會傳回 DLT 管線連結。 您可以使用 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

追蹤重新整理的狀態

您可以在 DLT 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 目錄許可權和安全性實體物件

從串流數據表永久刪除記錄

重要

支援具有串流數據表的 REORG 語句,公開預覽版

注意

  • 搭配串流數據表使用 REORG 語句需要 Databricks Runtime 15.4 及更高版本。
  • 雖然您可以將 REORG 語句與任何串流表搭配使用,但只有在開啟 刪除向量 的串流表中刪除記錄時才需要它。 命令在未啟用刪除向量的情況下,與串流數據表搭配使用時沒有作用。

若要從已啟用刪除向量的串流數據表基礎儲存中實體刪除記錄,例如用於 GDPR 合規性,必須採取其他步驟以確保在串流數據表的數據上運行 VACUUM 作業。

下列詳細說明這些步驟:

  1. 從串流數據表更新記錄或刪除記錄。
  2. 針對數據流數據表執行 REORG 語句,並指定 APPLY (PURGE) 參數。 例如 REORG TABLE <streaming-table-name> APPLY (PURGE);
  3. 等候串流表的數據保留期間結束。 默認數據保留期間為七天,但可以使用 delta.deletedFileRetentionDuration 數據表屬性來設定。 請參閱設定時光查詢的資料保留配置
  4. REFRESH 串流數據表。 請參閱 使用 DLT 管線重新整理串流資料表。 在 REFRESH 作業的 24 小時內,DLT 維護工作,包括確保記錄永久刪除所需的 VACUUM 作業,都會自動執行。 請參閱 DLT 所執行的維護工作。

使用查詢歷程記錄監視執行

您可以使用查詢歷程記錄頁面來存取查詢詳細數據和查詢配置檔,以協助您識別用來執行串流數據表更新之 DLT 管線中效能不佳的查詢和瓶頸。 如需查詢歷程記錄和查詢配置檔中可用資訊種類的概觀,請參閱 查詢歷程記錄查詢配置檔

重要

這項功能處於公開預覽狀態。 工作區管理員可以從 [預覽 ] 頁面啟用這項功能。 請參閱管理 Azure Databricks 預覽版

與串流數據表相關的所有語句都會出現在查詢記錄中。 您可以使用 語句 下拉式篩選來選取任何命令並檢查相關的查詢。 所有 CREATE 語句之後,會在 DLT 管線上以異步方式執行 REFRESH 語句。 這些 REFRESH 語句通常包含詳細的查詢計劃,以提供優化效能的見解。

若要存取 REFRESH 查詢歷程記錄 UI 中的語句,請使用下列步驟:

  1. 點擊 歷程記錄圖示 在左側邊欄開啟 查詢歷程記錄 UI。
  2. 在 [Statement] 下拉式篩選中選取 [REFRESH] 複選框。
  3. 按兩下查詢語句的名稱,即可檢視摘要詳細數據,例如查詢的持續時間和匯總計量。
  4. 按兩下 [ 查看查詢設定檔 ] 以開啟查詢設定檔。 如需巡覽查詢配置檔的詳細資訊,請參閱 查詢配置檔
  5. 您可以選擇性地使用 [查詢來源] 區段中的連結來開啟相關的查詢或管線。

您也可以使用 SQL 編輯器中的連結,或從附加至 SQL 倉儲的筆記本存取查詢詳細數據。

其他資源