次の方法で共有


ユーティリティ オブジェクト スクリプトを使用して SQL Server をインジェスト用に準備する

Lakeflow Connect を使用して Azure Databricks に取り込むための SQL Server データベースセットアップ タスクを完了します。

Requirements

  • スクリプトを実行するユーザーは、 db_owner ロールのメンバーである必要があります。
  • CT設定の場合、変更追跡機能はプラットフォームで利用可能である必要があります。
  • CDC セットアップの場合: 変更データ キャプチャはプラットフォームで使用できる必要があります。

手順 1: ユーティリティ オブジェクトをインストールする

この手順では、SQL Server のセットアップに必要なユーティリティ ストアド プロシージャと関数をインストールします。 インストールされる内容の詳細については、 SQL Server ユーティリティ オブジェクトのスクリプト リファレンスを参照してください

  1. スクリプトのダウンロード: utility_script.sql

  2. SQL Server Management Studio (SSMS)、Azure Data Studio、または任意の SQL クライアントでスクリプトを開きます。

  3. db_owner ロールを持つユーザーとして SQL Server インスタンスに接続します。

  4. ターゲット データベースに接続していることを確認します。

  5. スクリプトを実行します。

  6. インストールを確認します。

    SELECT dbo.lakeflowUtilityVersion_1_1() AS UtilityVersion;
    SELECT dbo.lakeflowDetectPlatform() AS Platform;
    

手順 2: 変更の追跡を有効にする (主キーを持つテーブルの場合)

変更の追跡は、テーブル行への変更を追跡する軽量のメカニズムです。 この手順では、指定したテーブルのデータベース レベルで CT を有効にし、スキーマの変更を処理する DDL サポート オブジェクトを設定します。 詳細については、lakeflowSetupChangeTrackingを参照してください。

-- 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 を有効にし、キャプチャ インスタンス管理を設定し、スキーマ変更の自動処理のトリガーを作成します。 詳細については、lakeflowSetupChangeDataCaptureを参照してください。

-- 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 キャプチャ インスタンスの名前付け

Lakeflow Connect は、次の名前付けパターンを使用してキャプチャ インスタンスを作成および管理します。

  • lakeflow_<schema>_<table>_1
  • lakeflow_<schema>_<table>_2

Lakeflow Connect は、この名前付けパターンに一致するキャプチャ インスタンスのみを管理します。 名前が異なる既存のキャプチャ インスタンスは保持され、Lakeflow 操作の影響を受けません。

インスタンス スロットの要件をキャプチャする

SQL Server では、テーブルごとに最大 2 つのキャプチャ インスタンスを使用できます。 Lakeflow Connect が CDC と連携する場合:

  • Lakeflow でプレフィックス付きインスタンスを作成するには、2 つのキャプチャ インスタンス スロットのうち少なくとも 1 つ lakeflow_ 使用できる必要があります。
  • 両方のスロットが Lakeflow 以外のキャプチャ インスタンスによって既に占有されている場合、Lakeflow Connect は独自のキャプチャ インスタンスを作成および管理できません。 Lakeflow は既存のキャプチャ インスタンスから読み取ることができますが、完全な更新操作やスキーマの進化操作を実行することはできません。

ヒント

両方のキャプチャ インスタンス スロットが占有されている場合は、代わりに 変更の追跡 を使用するか、不要になった場合は既存のキャプチャ インスタンスのいずれかを削除します。

他の CDC コンシューマーとの共存

Lakeflow Connect は、同じテーブル上の他の CDC コンシューマーと安全に共存できます。

  • 既存のキャプチャ インスタンスは、すべての Lakeflow 操作中に保持されます (完全な更新やスキーマの進化など)。
  • 必要に応じて、Lakeflow は独自の lakeflow_ プレフィックス付きインスタンスのみを削除して再作成します。
  • Lakeflow 以外のキャプチャ インスタンスから CDC データを使用する他のシステムは、中断することなく引き続き機能します。

Lakeflow キャプチャ インスタンスを再作成する操作:

次の操作により、Lakeflow はプレフィックス付きキャプチャ インスタンス lakeflow_ 削除して再作成します (それ以外の操作は行いません)。

  • 完全更新操作
  • テーブルへの列の追加 (ADD COLUMN)

シナリオ例:

テーブルに my_app_cdc という名前の既存のキャプチャ インスタンスがある場合:

  1. Lakeflow Connect によって lakeflow_schema_table_1が作成されます。
  2. どちらのキャプチャ インスタンスも安全に共存します。
  3. Lakeflow が完全な更新またはスキーマの進化を実行すると、 lakeflow_schema_table_1のみが再作成されます。
  4. my_app_cdc インスタンスはそのまま残り、他のシステムで引き続き機能します。

手順 4: 追加のアクセス許可を付与する (必要な場合)

この手順では、インジェスト ユーザーに必要なシステム レベルとテーブル レベルのアクセス許可を付与します。 手順 2 と 3 では CT 固有のアクセス許可と CDC 固有のアクセス許可が付与されますが、この手順では、ユーザーが必要なすべての SELECT アクセス許可を持っていることを確認します。 詳細については、lakeflowFixPermissionsを参照してください。

-- 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';

その他のリソース