メインコンテンツまでスキップ

Zerobus Ingest を使用する

このページでは、Lakeflow Connectで Zerobus Ingest を使用してデータを取り込む方法について説明します。

Zerobus Ingest を開始する

注記

クライアント側のファイアウォールを使用している場合は、Zerobus Ingestで使用されるIPアドレスを許可リストに追加してください。リージョン別のIPアドレスを表示するには、「Databricksのサービスと資産のIPアドレスとドメイン」を参照してください。

開始する前に、ワークスペースのリージョンで Zerobus Ingest が利用可能であることを確認してください。取り込みの可用性を参照してください。

  1. Zerobus Ingest URL を取得します。
  2. データを取り込むテーブルを作成するか、既存のテーブルを特定します。
  3. Service Principalを作成し、テーブルへの権限を付与します。
  4. クライアントまたはエクスポーターを接続して、データの送信を開始します。

ユースケースのガイドを選択してください:

  • 独自のデータのインジェスト : 定義したスキーマで Zerobus Ingest SDK または REST API を使用します。このページの手順に従ってください。

  • OpenTelemetry データの取り込み : 標準の OpenTelemetry SDK またはコレクターを使用して、トレース、Logs、メトリクスを定義済みのテーブルスキーマに送信します。詳細な手順については、 Zerobus Ingest を使用した OpenTelemetry データの取り込みを参照してください。

インターフェースを選択

Zerobus Ingest は複数のインターフェースをサポートしており、すべて Unity Catalog の Delta テーブルに直接書き込みます。要約:

  • SDKs over gRPC :最も高い持続的throughputを実現し、大容量のストリーミングプロデューサーに最適です。

  • REST : ステートレスであり、軽量または「頻繁に通信する」エッジデバイスの大規模なフリートに最適です。

  • OpenTelemetry (OTLP) : OpenTelemetryのトレース、Logs、メトリクスをすでに送信しているシステム用。Zerobus Ingestを使用したOpenTelemetryデータの取り込みを参照してください。

  • Kafka 互換 APIs (ベータ版): すでに Kafka プロトコルに対応しているプロデューサー向け。Zerobus Ingest での Kafka 互換 APIs の使用を参照してください。

完全な比較および選択方法については、API プロトコルを参照してください。SDK を介して、レコード形式(JSON、Protocol Buffers (protobuf)、または Apache Arrow)を選択することもできます。メッセージタイプを参照してください。このページの残りの部分では、SDK および REST API を使用します。

ワークスペース URL と Zerobus Ingest エンドポイントを取得する

ログインすると、ワークスペースの URL がブラウザに表示されます。完全な URL はhttps://<databricks-instance>.com/o=XXXXX形式に従いますが、ワークスペース URL は/o=XXXXXより前のすべての内容で構成されます。たとえば、次の完全な URL を指定すると、ワークスペースの URL とワークスペース ID を特定できます。

  • 完全なURL: https://abcd-teste2-test-spcse2.cloud.databricks.com/?o=2281745829657864#
  • ワークスペース URL: https://abcd-teste2-test-spcse2.cloud.databricks.com
  • ワークスペースID: 2281745829657864

サーバー エンドポイントは、ワークスペースとリージョンによって異なります。

  • サーバーエンドポイント: <workspace-id>.zerobus.<region>.cloud.databricks.com

ワークスペースのリージョンを確認するには、Databricks UI の上部ナビゲーションバーにあるワークスペーススイッチャーを開きます。リージョンは各ワークスペース名の下に表示されます(例:us-west-2)。また、アカウントコンソールの [ ワークスペース ] からも確認できます。

リージョンの可用性については、 Zerobus Ingest クォータを参照してください。

ターゲットテーブルを作成または識別する

データを取り込むターゲット テーブルを特定します。新しいターゲット テーブルを作成するには、 CREATE TABLE SQL コマンドを実行します。たとえば、 unity.default.air_qualityという名前の新しいテーブルを作成します。

SQL
    CREATE TABLE unity.default.air_quality (
device_name STRING, temp INT, humidity LONG);
注記

OpenTelemetry 取り込みの場合、テーブルは信号タイプ (トレース、ログ、メトリクス) ごとに事前定義されたスキーマを使用する必要があります。 Unity Catalogでターゲットテーブルを作成するを参照してください。

テーブルスキーマは Zerobus Ingest が受け入れるものの契約であり、Zerobus Ingest が自動的に進化させることはありません。スキーマの変更を事前に計画します。最初にテーブルを進化させ、次にプロデューサーを更新してください。Zerobus Ingest は、破壊的なテーブル変更後に適合しなくなったレコードを、破棄するのではなく、永続的な fallback ロケーションに書き込みます。スキーマ管理永続的な fallback ロケーションからのデータ回復を参照してください。

デフォルトでは、Zerobus Ingest はターゲットテーブルのスキーマと一致しないフィールドを持つレコードを拒否します。それらのフィールドを失わずにキャプチャするには、レスキュー列を構成します。Zerobus レスキュー列を参照してください。

ストリーミングテーブルへの取り込み

備考

ベータ版

Zerobus Ingest を使用して ストリーミングテーブル に取り込む機能は Beta 版です。ワークスペース管理者は、 プレビュー ページからこの機能へのアクセスを制御できます。Databricksのプレビューを管理するを参照してください。

新しいストリーミングテーブルを作成するには、CREATE STREAMING TABLEのSQLコマンドを実行します。例えば:

SQL
CREATE STREAMING TABLE unity.default.air_quality (
device_name STRING, temp INT, humidity LONG);

ストリーミングテーブルの作成後、標準の Delta テーブルの場合とまったく同様に、クライアントの書き込みにあるいずれかのインターフェースを使用してデータを取り込みます。ストリーミングテーブルへの書き込みは、管理された Delta テーブルへの書き込みと同じ方法で行われ、同じ制限とクォータが適用されます。

サービスプリンシパルを作成し、権限を付与する

A Service Principal は、パーソナライズされたアカウントよりも高いセキュリティを提供する特殊な ID です。Service Principalおよび認証での使用方法の詳細については、「OAuth を使用した Databricks へのService Principal アクセスの承認」を参照してください。

Databricks REST APIまたはSDKを使用してプログラムでService Principalを作成および管理するか、以下で説明するようにワークスペースUIを通じて行うことができます。このセクションの最後にある権限付与は、任意のクライアントから実行できるSQLです。

  1. Service Principalを作成するには、 [設定] > [ID とアクセス] に移動します。

  2. 「サービスシプリンパル」 で、 「管理」 を選択します。

  3. [ サービスプリンシパルの追加 ] をクリックします。

  4. [サービスプリンシパルの追加] ウィンドウで、 [新規追加 ] をクリックして新しいサービスプリンシパルを作成します。

  5. サービスプリンシパルのクライアント ID とクライアント シークレットを生成して保存します。

  6. カタログ、スキーマ、テーブルに必要な権限をサービスプリンシパルに付与します。

    1. Service Principal ページで、 Configurations tab に移動します。
    2. アプリケーション ID (UUID) をコピーします。
    3. 権限を付与するには、以下のSQLを使用してください。必要に応じて、例のUUID、カタログ名、スキーマ名、テーブル名を置き換えてください。
    SQL
    GRANT USE CATALOG ON CATALOG <catalog> TO `<UUID>`;
    GRANT USE SCHEMA ON SCHEMA <catalog.schema> TO `<UUID>`;
    GRANT MODIFY, SELECT ON TABLE <catalog.schema.table_name> TO `<UUID>`;

クライアントを記述する

ご希望のプログラミング言語で Zerobus SDK を使用するか、REST API を使用して、ターゲット テーブルにデータを取り込みます。SDK はオープンソースです。完全なライブラリ、言語固有のドキュメント、およびその他の例については、 Zerobus SDK リポジトリを参照してください。

以下の例では ingest_record_offset を使用しており、レコードを送信した順序が保持されます。

Python 3.9 以降が必要です。この SDK は、非同期ランタイムを通じて、高 throughput で効率的なネットワーク I/O を提供します。JSON(最もシンプル)および Protocol Buffers(本番運用に推奨)をサポートしています。この SDK は、同期および非同期の実装の両方と、オフセットベースおよびフューチャーベースの取り込み方法もサポートしています。

Bash
pip install databricks-zerobus-ingest-sdk

JSONの例:

Python
import logging
from zerobus.sdk.sync import ZerobusSdk
from zerobus.sdk.shared import TableProperties

# See "Get your workspace URL and Zerobus Ingest endpoint" for information on obtaining these values.
SERVER_ENDPOINT="https://1234567890123456.zerobus.us-west-2.cloud.databricks.com"
DATABRICKS_WORKSPACE_URL="https://dbc-a1b2c3d4-e5f6.cloud.databricks.com"
TABLE_NAME="main.default.air_quality"
CLIENT_ID="your-client-id"
CLIENT_SECRET="your-client-secret"

sdk = ZerobusSdk(
SERVER_ENDPOINT,
DATABRICKS_WORKSPACE_URL
)

table_properties = TableProperties(TABLE_NAME)
stream = sdk.create_stream(CLIENT_ID, CLIENT_SECRET, table_properties)

try:
for i in range(1000):
record_dict = {
"device_name": f"sensor-{i}",
"temp": 20 + i % 15,
"humidity": 50 + i % 40
}
stream.ingest_record_offset(record_dict)
finally:
stream.close()

上記の例では、返されたオフセットを待機せずに、オフセットベースの ingest_record_offset メソッドを使用しています。利用可能な取り込み方法、オフセットの耐久性確認を待機するタイミング、および確認コールバックを使用して進行状況を追跡する方法については、メッセージのブロッキングと確認を参照してください。

Protocol Buffers: 型安全な取り込みを行うには、protobuf 記述子を TableProperties に渡します(形式は自動的に選択されます)。generate_proto ツールを使用してテーブルからスキーマを生成し、protoc でコンパイルしてから、コンパイルされた記述子を渡してストリームを作成します。

Arrow Flight (ベータ版): 同じ gRPC 接続を介して Apache Arrow RecordBatchデータを列指向またはバッチ指向で取り込むには、 「Arrow Flight を Zerobus Ingest で使用する」を参照してください。[arrow]追加のpip install "databricks-zerobus-ingest-sdk[arrow]" pyarrowが必要です。

完全なドキュメント、構成オプション、バッチ取り込み、およびプロトコル バッファーの例については、 Python SDK リポジトリを参照してください。

エラーに対応する

上記の例は、正常系(ハッピーパス)を示しています。本番運用では、取り込み処理をエラーハンドリングでラップしてください。SDK は、組み込みのリカバリ機能を通じて、ネットワークの問題などの一時的なエラーを自動的に再試行します。無効な認証情報やテーブルの欠落など、回復不可能な障害は ZerobusException として表面化します:

Python
from zerobus.sdk.shared import ZerobusException

try:
stream.ingest_record_offset(record)
except ZerobusException as e:
# Handle the failure: log it, fix the cause, recover on a new stream, or stop.
...

SDK は一時的な障害からも自動的に回復し、ストリームが完全に失敗した場合には未確認のレコードを救出できるようにします。レジリエントクライアントパターンと完全なエラーリファレンスについては、回復および再試行パターンZerobus Ingest のエラー処理を参照してください。

次のステップ