ほとんどのストリーミング データ パイプラインでは、データ変換が必要です。抽出、読み込み、変換(ELT)パイプラインで宛先に到達した後にデータを変換するユーザーもいれば、抽出、変換、読み込み(ETL)パイプラインで取り込む前にデータを変換するユーザーもいます。従来、このアーキテクチャでは、データ変換を行うために Dataflow や Apache Flink などのツールを使用した複雑なパイプラインが必要でした。
Pub/Sub では、ストリーミング パイプラインのデータ変換を簡素化するための単一メッセージ変換 (SMT)が提供されています。SMT を使用すると、メッセージデータと属性に対する軽量な変更を Pub/Sub 内で直接行うことができます。SMT を使用すると、追加のデータ処理ステップや個別のデータ変換プロダクトが不要になります。
SMT が実行されると、メッセージデータや属性など、Pub/Sub メッセージが入力として使用されます。出力は、データまたは属性が変更された変換済みの Pub/Sub メッセージです。 SMT は Pub/Sub API に統合されているため、トピックまたはサブスクリプション構成の一部として管理できます。
SMT のユースケース
ユーザーがウェブサイトを閲覧する際に、パーソナライズされた商品のおすすめを表示するオンライン ショップを設計するとします。これを行うには、Pub/Sub を使用して、サイトでのユーザー アクティビティに関するリアルタイム データを収集します。これには、閲覧した商品、カートに追加した商品、商品に付けられた評価に関するデータが含まれます。
ただし、この生データは、おすすめの生成に使用する前に調整が必要になることがよくあります。たとえば、生データには、ユースケースに関係のない不要な詳細が含まれている可能性があります。このような詳細の例としては、ユーザーのブラウザの種類やサイトにアクセスした時間などがあります。また、データがおすすめシステムの必要な形式になっていない可能性もあります。たとえば、タイムスタンプの形式が異なる場合や、商品 ID を別のタイプに変換する必要がある場合があります。
Pub/Sub SMT を使用すると、次のようなデータ変換を行うことができます。
氏名や住所などの個人情報(PII)を削除して、ユーザーのプライバシーを保護します。
商品閲覧や購入など、おすすめに関連するイベントのみを保持し、ユーザー プロファイルの変更など、その他のイベントは破棄します。
すべてのタイムスタンプ、通貨値、商品 ID が、おすすめシステムと互換性のある一貫した形式とタイプに準拠していることを確認します。
ショッピング カートの合計金額や商品ページの滞在時間など、生データから新しいデータ フィールドを生成します。
Vertex AI モデルからの推論(分類、予測、センチメント、埋め込みなど)をイベントデータに追加します。
SMT を使用すると、次のようなさまざまなユースケースに対応できます。
データのマスキングと秘匿化: クレジット カード番号や個人情報(PII)などのフィールドをマスクまたは 秘匿化してセンシティブ データを保護し、プライバシーに関する規則の遵守を支援します。
データ形式の変換: さまざまな形式間でデータを変換して、 ダウンストリーム システムとの互換性を確保します。
メッセージ フィルタリング: コンテンツまたは属性に基づいて 不要なメッセージをフィルタで除外することで、関連するメッセージのみを処理します。SMT を使用すると、Pub/Sub の組み込みフィルタよりも複雑なフィルタ条件を使用できます。
簡単なデータ変換: 文字列操作、日付の書式設定、算術演算などの基本的なデータ操作タスクを実行します。
SMT の種類
Pub/Sub は次の SMT をサポートしています。
- AI 推論: Vertex AI モデルから Pub/Sub メッセージの推論を取得します。
- ユーザー定義関数: JavaScript ユーザー定義関数(UDF)を呼び出して、 Pub/Sub メッセージに対してカスタム変換を実行します。
SMT のサンプル メッセージ フロー
この画像は、トピックレベルとサブスクリプション レベルの両方に SMT が適用された Pub/Sub システムの例を示しています。
次の手順では、Pub/Sub システムでのメッセージ フローを示します。
パブリッシャー アプリケーションのパブリッシャー 1 とパブリッシャー 2 は、メッセージA とB をそれぞれ Pub/Sub トピックにパブリッシュします。
トピックの SMT は、メッセージA とB をそれぞれメッセージA' と B' に変換します。
スキーマがトピックにアタッチされている場合、変換されたメッセージA' と B' はスキーマに対して検証されます。たとえば、A' がスキーマと 一致しない場合、メッセージA のパブリッシュはエラーで失敗します。
変換されたメッセージA' とB' は Pub/Sub ストレージに書き込まれます。
Pub/Sub は、メッセージA' とB' を、画像に示すように、アタッチされているすべての サブスクリプション(サブスクリプション 1 とサブスクリプション 2 )に配信します。
サブスクリプション 1 にフィルタが構成されている場合、メッセージ A' と B' はフィルタに対して評価されます。フィルタに一致するメッセージのみが次のステップに進みます。その他のメッセージは Pub/Sub によって自動的に確認応答されます。
サブスクリプション 2 にフィルタが構成されている場合、メッセージ A' と B' はフィルタに対して評価されます。フィルタに一致するメッセージのみが次のステップに進みます。その他のメッセージは Pub/Sub によって自動的に確認応答されます。
サブスクリプション 1 の SMT は、メッセージA' とB' を変換します。A' はA''に、B'はB''になります。
サブスクリプション 2 の SMT は、メッセージA' とB' を変換します。A' はA'のままとなり、B'はフィルタで除外されます。
サブスクリプション 1 がペイロードのラップ解除 が有効になっている push サブスクリプションの場合、メッセージA'' とB'' はラップ解除されます。 サブスクリプション 2 がペイロードのラップ解除が 有効になっている push サブスクリプションの場合、A' はラップ解除されます。
サブスクライバー 1 はメッセージB'' を受信し、サブスクライバー 2 は メッセージ A'' を受信し、サブスクライバー 3 はメッセージA' を受信します。
サブスクライバーは、受信したメッセージを確認応答します。
Pub/Sub は、確認応答されたメッセージをストレージから削除します。
制限事項
トピックまたはサブスクリプションで有効にできる SMT は最大 5 つです。
SMT は単一の Pub/Sub メッセージに対して動作します。複数の Pub/Sub メッセージを集約することはできません。