完成 SQL Server 資料庫設定工作,以使用 Lakeflow Connect 內嵌至 Azure Databricks。
需求
- 執行指令碼的使用者必須是角色的
db_owner成員。 - CT 設定時,平台上必須具備變更記錄功能。
- 針對 CDC 設定:平台上必須提供變更資料擷取功能。
步驟 1:安裝公用程式物件
此步驟會安裝 SQL Server 安裝所需的公用程式預存程式和函式。 如需安裝內容的詳細資訊,請參閱 SQL Server 公用程式物件腳本參考。
下載腳本: utility_script.sql
在 SQL Server Management Studio (SSMS)、Azure Data Studio 或您慣用的 SQL 用戶端中開啟腳本。
以具有
db_owner角色的使用者身分連線至您的 SQL Server 執行個體。請確定您已連線到目標資料庫。
執行腳本。
驗證安裝:
SELECT dbo.lakeflowUtilityVersion_1_1() AS UtilityVersion; SELECT dbo.lakeflowDetectPlatform() AS Platform;
步驟 2:啟用變更追蹤 (適用於具有主索引鍵的資料表)
變更追蹤是一種輕量型機制,可追蹤表格列的變更。 此步驟會在指定資料表的資料庫層級啟用 CT,並設定 DDL 支援物件來處理綱目變更。 如需詳細資訊,請參閱 lakeflowSetupChangeTrackingSQL Server 公用程式物件指令碼參考。
-- Enable change tracking on specific tables
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'Sales.Orders,Production.Products,HR.Employees',
@User = 'your_ingestion_user',
@Retention = '2 DAYS';
替代選項:
- 對於所有具有主索引鍵的資料表:
@Tables = 'ALL' - 針對特定結構描述:
@Tables = 'SCHEMAS:Sales,HR,Production' - 僅適用於資料庫層級設定 (不啟用資料表):
@Tables = NULL
步驟 3:啟用變更資料擷取 (適用於沒有主索引鍵的資料表)
CDC 會擷取插入、更新和刪除活動,對於沒有主索引鍵的資料表特別有用。 此步驟會在資料庫層級啟用 CDC、設定擷取執行個體管理,並建立觸發器以自動處理結構描述變更。 如需詳細資訊,請參閱 lakeflowSetupChangeDataCaptureSQL Server 公用程式物件指令碼參考。
-- Enable CDC on specific tables (particularly those without primary keys)
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'Staging.ImportData,Logs.AuditTrail',
@User = 'your_ingestion_user';
替代選項:
- 對於所有表格:
@Tables = 'ALL' - 針對特定結構描述:
@Tables = 'SCHEMAS:Sales,HR' - 僅適用於資料庫層級設定:
@Tables = NULL
備註
您可以使用變更追蹤或 CDC,也可以同時使用兩者。 Databricks 建議對具有主索引鍵的資料表 (步驟 2) 使用變更追蹤,並針對沒有主索引鍵的資料表使用 CDC (步驟 3) ,以取得全面的涵蓋範圍。
擷取實例管理
Lakeflow Connect 採用基於前綴的命名慣例來管理 CDC 擷取實例,而不影響其他系統或程序所建立的先前擷取實例。
湖流量捕捉實例命名
Lakeflow Connect 會根據以下命名模式建立並管理擷取實例:
lakeflow_<schema>_<table>_1lakeflow_<schema>_<table>_2
Lakeflow Connect 只管理符合此命名模式的擷取實例。 先前具有不同名稱的現有捕捉實例會被保留,且不會受到 Lakeflow 操作的影響。
擷取實例槽位需求
SQL Server 每表最多允許 2 個擷取實例。 若要讓 Lakeflow Connect 與 CDC 搭配運作:
- Lakeflow 必須有至少兩個捕捉實例插槽中的一個可用,才能建立其
lakeflow_前綴實例。 - 如果兩個時段都已被非 Lakeflow 的擷取實例佔據,Lakeflow Connect 無法建立並管理自己的擷取實例。 雖然 Lakeflow 可以從既有的擷取實例讀取資料,但無法執行完整的刷新或結構演化操作。
小提示
如果兩個擷取實例欄位都被佔用,請改用 變更追蹤 ,或移除現有的擷取實例(如果不再需要)。
與其他 CDC 使用者共存
Lakeflow Connect 可與其他 CDC 消費者安全共存於同一表格:
- 在所有 Lakeflow 操作期間,既有的擷取實例都會被保留(例如完整刷新與結構演化)。
- Lakeflow 只有在需要時才會刪除並重建自己的
lakeflow_前綴實例。 - 其他從非湖流擷取實例消耗 CDC 資料的系統則持續運作且不中斷。
重建 Lakeflow 擷取實例的操作:
以下操作會導致 Lakeflow 刪除並重新建立其 lakeflow_ 前綴的捕捉實例,但不包括其他實例:
- 全面更新作業
- 向資料表新增欄位 (
ADD COLUMN)
範例情境:
如果一個資料表中已有一個名為 my_app_cdc:
- Lakeflow Connect 會產生
lakeflow_schema_table_1。 - 兩個捕獲實例安全地共存。
- 當 Lakeflow 進行完整刷新或架構演化時,它只會重建
lakeflow_schema_table_1。 - 該
my_app_cdc實例保持不變,並持續為另一系統運作。
步驟 4:授予其他權限(如果需要)
此步驟會授與匯入使用者必要的系統和資料表層級許可權。 雖然步驟 2 和 3 會授與 CT 和 CDC 特定的權限,但此步驟可確保使用者擁有所有必要的 SELECT 權限。 如需詳細資訊,請參閱 lakeflowFixPermissionsSQL Server 公用程式物件指令碼參考。
-- Grant system-level and table-level permissions
EXEC dbo.lakeflowFixPermissions
@User = 'your_ingestion_user',
@Tables = 'Sales.Orders,Production.Products,HR.Employees';
替代選項:
- 對於所有表格:
@Tables = 'ALL' - 僅限系統權限:
@Tables = NULL - 具體模式:
@Tables = 'SCHEMAS:Sales,HR'
備註
步驟 2 和 3 中的設定程序會自動授與必要的 CT 和 CDC 許可,但如果許可被撤銷或需要授予額外的資料表層級 SELECT 許可,您可能必須執行此程序。
步驟 5:驗證設定
執行下列查詢,以確認資料庫和資料表的變更追蹤和 CDC 已正確設定。
-- Check Change Tracking status
SELECT
d.name AS DatabaseName,
ctd.is_auto_cleanup_on,
ctd.retention_period,
ctd.retention_period_units_desc
FROM sys.change_tracking_databases ctd
INNER JOIN sys.databases d ON ctd.database_id = d.database_id
WHERE d.name = DB_NAME();
-- Check tables with Change Tracking enabled
SELECT
SCHEMA_NAME(t.schema_id) + '.' + t.name AS TableName,
ct.is_track_columns_updated_on,
ct.begin_version,
ct.cleanup_version
FROM sys.change_tracking_tables ct
INNER JOIN sys.tables t ON ct.object_id = t.object_id;
-- Check CDC status
SELECT
DB_NAME() AS DatabaseName,
is_cdc_enabled
FROM sys.databases
WHERE database_id = DB_ID();
-- Check tables with CDC enabled
SELECT
SCHEMA_NAME(t.schema_id) + '.' + t.name AS TableName,
ct.capture_instance,
ct.start_lsn,
ct.create_date
FROM cdc.change_tables ct
INNER JOIN sys.tables t ON ct.source_object_id = t.object_id;
範例:混合式方法
備註
為了簡單起見,此範例用於 'ALL' 在所有表上啟用 CT 和 CDC。 對於生產用途,請考慮此頁面上的常見案例,以特定結構描述或資料表為目標。
-- Step 1: Already completed (script installed)
-- Step 2 & 3: Enable both CT and CDC
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'ALL',
@User = 'lakeflow_user',
@Retention = '2 DAYS';
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'ALL',
@User = 'lakeflow_user';
-- Step 4: Grant all necessary permissions
EXEC dbo.lakeflowFixPermissions
@User = 'lakeflow_user',
@Tables = 'ALL';
常見場景
案例 1:僅變更追蹤 (特定結構描述)
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'SCHEMAS:Sales,Production',
@User = 'lakeflow_user',
@Retention = '2 DAYS';
EXEC dbo.lakeflowFixPermissions
@User = 'lakeflow_user',
@Tables = 'SCHEMAS:Sales,Production';
情境 2:僅限 CDC(特定資料表)
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'Staging.ImportData,Logs.AuditTrail,dbo.TempRecords',
@User = 'lakeflow_user';
EXEC dbo.lakeflowFixPermissions
@User = 'lakeflow_user',
@Tables = 'Staging.ImportData,Logs.AuditTrail,dbo.TempRecords';
案例 3:混合方法(某些資料結構的 CT,特定資料表的 CDC)
-- Enable CT on transactional schemas
EXEC dbo.lakeflowSetupChangeTracking
@Tables = 'SCHEMAS:Sales,HR',
@User = 'lakeflow_user',
@Retention = '3 DAYS';
-- Enable CDC on specific staging tables without primary keys
EXEC dbo.lakeflowSetupChangeDataCapture
@Tables = 'Staging.ImportData,Logs.AuditTrail',
@User = 'lakeflow_user';
-- Grant permissions on all tables
EXEC dbo.lakeflowFixPermissions
@User = 'lakeflow_user',
@Tables = 'ALL';