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

重要

這項功能處於公開預覽狀態。 若要註冊存取權, 請填寫此窗體

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

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

注意

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

開始之前

開始之前,請確定您具備下列項目:

  • 已啟用無伺服器功能的 Azure Databricks 帳戶。 如需詳細資訊,請參閱 啟用無伺服器 SQL 倉儲

  • 已啟用 Unity 目錄的工作區。 如需詳細資訊,請參閱 設定和管理 Unity 目錄

  • 使用通道的 Current SQL 倉儲。

  • 若要查詢 Delta Live Tables 管線所建立的串流數據表,您必須使用 Databricks Runtime 13.3 LTS 和更新版本或 SQL 倉儲的共享計算。 無法在已啟用 Unity 目錄的管線中建立的串流數據表,從指派或沒有隔離叢集進行查詢。

  • READ FILES Unity 目錄外部位置的許可權。 如需詳細資訊,請參閱 建立外部位置以將雲端記憶體連線到 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>')

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

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

CREATE 串流數據表的作業會使用 Databricks SQL 倉儲來初始建立和載入串流數據表中的數據。 REFRESH 串流數據表的作業會使用 Delta Live Tables (DLT)。 DLT 管線會自動為每個串流數據表建立。 重新整理串流數據表時,會起始 DLT 管線的更新以處理重新整理。

執行 REFRESH 命令之後,會傳回 DLT 管線連結。 您可以使用 DLT 管線連結來檢查重新整理的狀態。

注意

只有數據表擁有者可以重新整理串流數據表,以取得最新的數據。 建立數據表的用戶是擁有者,而且無法變更擁有者。

請參閱 什麼是 Delta Live Tables?

僅內嵌新數據

根據預設,函 read_files 式會在數據表建立期間讀取來源目錄中的所有現有數據,然後使用每個重新整理處理新抵達的記錄。

若要避免在資料表建立時內嵌來源目錄中已存在的數據,請將 選項設定 includeExistingFilesfalse。 這表示只會在處理數據表建立之後抵達目錄的數據。 例如:

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

限制

  • 美國中南部和美國西部 2 個區域不支援 Databricks SQL 串流數據表。

其他資源