在 Databricks SQL 中使用串流資料表載入資料
Databricks 建議使用 Databricks SQL 使用串流資料表來擷取資料。 遞增串流資料表是註冊到 Unity 目錄的資料表,具有額外的串流或遞增資料處理支援。 每個串流資料表都會自動建立差異即時資料表管道。 您可以使用串流資料表從 Kafka 和雲端物件儲存體進行遞增資料載入。
本文展示使用串流資料表從設定為 Unity 目錄磁碟區 (建議) 或外部位置的雲端物件儲存載入資料。
注意
若要瞭解如何使用 Delta Lake 表作為串流來源和接收器,請參閱差異資料表串流讀取和寫入。
重要
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 及以上版本提供的資料篩選功能,您必須確認您的工作區已啟用無伺服器運算,因為支援差異即時資料表產生的資料篩選功能會在無伺服器運算上執行。 當您使用單一使用者計算來執行數據篩選作業時,可能會向無伺服器計算資源收費。 請參閱 單一用戶計算的細微訪問控制。
權限需求
- 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>')
設定運行時間通道
使用 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)
## <a id="refresh"></a> Refresh a <st> using a DLT pipeline
This section describes patterns for refreshing a <st> with the latest data available from the sources defined in the query.
When you `CREATE` or `REFRESH` a <st>, the update processes using a serverless <DLT> pipeline. Each <st> you define has an associated <DLT> pipeline.
After you run the `REFRESH` command, the DLT pipeline link is returned. You can use the DLT pipeline link to check the status of the refresh.
.. note:: Only the table owner can refresh a <st> to get the latest data. The user that creates the table is the owner, and the owner can't be changed. You might need to refresh your <st> before using [time travel](/delta/history.md#time-travel) queries.
See [_](/delta-live-tables/index.md).
### Ingest new data only
By default, the `read_files` function reads all existing data in the source directory during table creation, and then processes newly arriving records with each refresh.
To avoid ingesting data that already exists in the source directory at the time of table creation, set the `includeExistingFiles` option to `false`. This means that only data that arrives in the directory after table creation is processed. For example:
.. azure::
```sql
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 目錄權限與安全物件。
使用查詢歷程記錄監視執行
您可以使用查詢歷程記錄頁面來存取查詢詳細數據和查詢配置檔,以協助您識別用來執行串流數據表更新之 Delta Live Tables 管線中效能不佳的查詢和瓶頸。 如需查詢歷程記錄和查詢配置檔中可用資訊種類的概觀,請參閱 查詢歷程記錄 和 查詢配置檔。
重要
這項功能處於公開預覽狀態。 工作區管理員可以從 [預覽 ] 頁面啟用這項功能。 請參閱管理 Azure Databricks 預覽版。
與串流數據表相關的所有語句都會出現在查詢記錄中。 您可以使用 [語句 ] 下拉式篩選來選取任何命令,並檢查相關的查詢。 所有 CREATE
語句後面接著在 REFRESH
Delta Live Tables 管線上以異步方式執行的語句。 這些 REFRESH
語句通常包含詳細的查詢計劃,以提供優化效能的見解。
若要存取 REFRESH
查詢歷程記錄 UI 中的語句,請使用下列步驟:
- 按兩下 左側提要欄位以開啟 [查詢歷程記錄 ] UI。
- 從 [語句] 下拉式篩選選取 [重新整理] 複選框。
- 按兩下查詢語句的名稱,即可檢視摘要詳細數據,例如查詢的持續時間和匯總計量。
- 按兩下 [ 查看查詢設定檔 ] 以開啟查詢設定檔。 如需巡覽查詢配置檔的詳細資訊,請參閱 查詢配置檔 。
- 您可以選擇性地使用 [查詢來源] 區段中的連結來開啟相關的查詢或管線。
您也可以使用 SQL 編輯器中的連結,或從附加至 SQL 倉儲的筆記本存取查詢詳細數據。
注意
您的串流數據表必須設定為使用預覽通道執行。 請參閱 設定運行時間通道。