AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

$iceberg 集計ステージ

$iceberg ステージでは、接続レジストリの接続を指定します。この接続は、Amazon Web Services S3 バケットへの接続で、ここでは Apache Iceberg テーブルにデータを書き込めます。

$iceberg パイプラインの最後のステージである必要があります。1 つのパイプラインにつき、1 つの $iceberg ステージのみを使用できます。

$icebergパイプライン ステージには次のプロトタイプ形式があります。

{
"$iceberg": {
"connectionName": "<registered-connection>",
"bucket": "<target-bucket>",
"databaseName": "<database>",
"tableName": "<string>" | <expression>,
"path": "<key-prefix>",
"region": "<target-region>",
"mode": "cdc" | "insert",
"idFieldName": "<field-name>",
"partitionedBy": {
"<column-name>": "<partition-transform>",
. . .
},
"catalog": {
"type": "hadoop" | "glue"
}
}
}

$icebergステージは、次のフィールドを持つドキュメントを取得します。

フィールド
タイプ
必要性
説明

connectionName

string

必須

読み取りと書き込みに使用する AWS S3 接続の名前。これは、接続レジストリ内の接続の名前と一致する必要があります。

bucket

string

必須

ターゲットの Apache Iceberg データベースを含む S バケットの名前。3

databaseName

string

必須

ターゲット テーブルを含む Apache Iceberg データベースの名前。

tableName

string |式

必須

ターゲット Apache Iceberg テーブルの名前。string または string に評価される式である必要があります。ドキュメントごとのダイナミックルーティングに式を使用します。

path

string

必須

Apache Iceberg データベースへのパスのプレフィックス キー。

region

string

条件付き

バケットの Amazon Web Services リージョン。Amazon Web Services 上で実行されていないストリームプロセッサーに必要です。

mode

string

任意

入力ドキュメントごとに実行する操作を決定する戦略。

  • "cdc" Atlas Stream Processing は、stream.source.operationType メタデータフィールドを読み取ることで操作タイプを決定します。

  • "insert" Atlas Stream Processingにより、stream.source.operationTypeメタデータフィールドの操作タイプ宣言を無視して、各ドキュメントがターゲットテーブルに新しい行として追加されます。

デフォルトは cdc です。

idFieldName

string

任意

cdc モードでローキーとして使用されるフィールド名と列名。

デフォルトは "_id" です。

partitionedBy

ドキュメント

任意

パーティショニング仕様。このフィールドを設定しない場合、$icebergidFieldName 列のデフォルトのパーティション変換を設定します。

1 つ以上のキーと値のペアを含むドキュメントである必要があります。各キーは、パーティション変換を実行する対象の列の名前である必要があります。各値は、使用するパーティション変換である必要があります。最初のパーティション変換はidFieldNameに対して行われる必要があります。

所定のフィールドのパーティション変換値は、次のいずれかである必要があります。

  • "identity"

  • "year"

  • "month"

  • "day"

  • "hour"

  • { truncate: int }

  • { bucket: int }

Apache Iceberg パーティション変換の詳細については、Apache Iceberg ドキュメント を参照してください。

catalog

ドキュメント

任意

使用する Iceberg カタログ を定義するドキュメント。"hadoop" または "glue" の値を持つ type フィールドを含むドキュメントである必要があります。

$icebergステージを使用する場合、それはストリームプロセッサーの最後のステージである必要があります。

Atlas Stream Processing は、SP10SP30SP50 ストリーム プロセッサーのみ $iceberg ステージをサポートします。プロセッサー階層によって、ダイナミック ルーティングでサポートされるテーブルの最大数が決定されます。

階層
最大テーブル

SP 10

5

SP 30

10

SP 50

50

$iceberg ステージは、ストリームプロセッサーの出力データのスキーマから、結果の Apache Iceberg テーブルのスキーマを推計します。Atlas Stream Processing は、ストリーム内の新しいフィールドを観測し、テーブルスキーマをそれに応じて進化させます。

まだ存在しないテーブルを指定した場合、Apache Iceberg は、それを対象とする最初のメッセージを受信したときにテーブルを作成します。

Atlas Stream Processing は、Apache Iceberg テーブルへの出力に対して、少なくとも 1 回のプロセシングを保証します。

tableName フィールドの値として動的式を使用できます。動的式を使用してドキュメント固有の値を取得することで、これらの値に応じて入力ドキュメントを異なるテーブルにルーティングできます。式は string として評価される必要があります。例については、「動的ルーティング」を参照してください。詳細については、「式演算子」を参照してください。

動的な式でトピックを指定したものの、Atlas Stream Processing が特定のメッセージの式を評価できない場合、構成されている場合、Atlas Stream Processing はそのメッセージをデッドレターキュー(DLQ)に送信し、以降のメッセージを処理します。If there's no デッドレターキュー(DLQ) configured, then Atlas Stream Processing skips the message completely and processes subsequent messages.

Atlas Stream Processing は $iceberg ステージのテーブルに書き込む際に、BSON から Iceberg primitive types への型変換を実行します。

BSON
Apache Iceberg プリミティブ
詳細

string

string

int

int

long

long

double

double

bool

boolean

ObjectId

string

16 進数エンコード

UUID

string

文字列化されたUUID

BinData

binary

UUID には適用されません。

date

timestamptz

UTC 時間、マイクロ秒単位で測定

timestamp

timestamptz

UTC 時間、マイクロ秒まで測定

object

string

Basic JSON string としてシリアル化されます

array

string

Basic JSON string としてシリアル化されます

その他の BSON types はサポートされていません。Atlas Stream Processing は、サポートされていない BSON types のドキュメントをDLQ に送信します。

以下の例は、$iceberg ステージの様々なアプリケーションを示しています。

次の例は、Atlas データベースの初期コンテンツと変更ストリームを追加のみの形式で Apache Iceberg テーブルに書き込み、そのデータベースの操作履歴の耐久性のあるアーカイブを作成する方法を示しています。この集計には 2 つのステージがあります。

  1. $source ステージでは、Atlas データベースとの接続を確立し、特定の db データベース内の orders コレクションをターゲットにします。これにより、プロセッサーの有効化時にデータベース内のドキュメントをキャプチャする最初の同期が可能になり、各チェンジストリーム イベントでフル ドキュメントがキャプチャされることが保証されます。

  2. $iceberg ステージでは、Amazon Web Services S3 バケットへの接続を確立し、iceberg-warehouse/ パスの myTable という名前のテーブルに書き込みます。insert 操作のみを指定することで、追加のみのログスタイルの書き込みフローが確保されます。

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": "orders",
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
},
"$iceberg": {
"connectionName": "myS3Connection",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": "myTable",
"mode": "insert"
}
}

次の例は、Atlas コレクションを完全に Apache Iceberg テーブルにミラーリングする方法を示しています。

集計を定義する前に、次の変数を設定します。

const isDeleteExpr = {$eq: [{$meta: "stream.source.operationType"}, "delete"]};

次の集計では、Atlas ソース コレクションへの変更と同期して、Apache Iceberg テーブルエントリを追加、更新、削除します。これには 4 つのステージがあります。

  1. $source ステージでは、Atlas データベースとの接続を確立し、特定の db データベース内の orders コレクションをターゲットにします。これにより、プロセッサーの有効化時にデータベース内のドキュメントをキャプチャする最初の同期が可能になり、各チェンジストリーム イベントでフル ドキュメントがキャプチャされることが保証されます。

  2. $match ステージはoperationTypeでフィルターし、有効な操作タイプ宣言を持つドキュメントのみを処理します。

  3. $replaceRoot ステージは、操作の種類に応じてドキュメントルートを変更します。

    • 削除操作の場合、ドキュメントのルートをドキュメントのキーに変更します。これにより、ドキュメントが削除されたことを示すレコードが作成されますが、そのコンテンツはそれ以降のプロセシングから除外されます。

    • その他のすべての操作については、ドキュメント ルートを fullDocument に変更し、ドキュメントのコンテンツをさらにプロセシングするために渡し、changestream メタデータを除外します。

  4. $iceberg ステージでは、Amazon Web Services S3 バケットへの接続を確立し、iceberg-warehouse/ パス内の myTable という名前の Apache Iceberg テーブルに書き込みます。cdc モードでは、各ドキュメントのstream.source.operationTypeメタデータ フィールドを読み取ることで、このステージで Apache Iceberg テーブルに対して実行する操作を決定します。

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": "orders",
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
},
"$match": {
"operationType": {
"$in": ["insert", "update", "delete", "replace"]
}
},
"$replaceRoot": {
"newRoot": {
"$cond": {
"if": isDeleteExpr,
"then": "$documentKey",
"else": "$fullDocument"
}
}
}
"$iceberg": {
"connectionName": "myS3Connection",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": "myTable",
"mode": "cdc"
}
}

次の例では、Atlas Stream Processingは動的式を使用して、ドキュメントを様々な出力先に動的にルーティングします。

  1. $source ステージでは、Atlas データベースとの接続を確立し、特に db データベース内のコレクション abcを対象とします。これにより、プロセッサーの有効化時にデータベース内のドキュメントをキャプチャする最初の同期が可能になり、各チェンジストリーム イベントでフル ドキュメントがキャプチャされることが保証されます。

  2. $match ステージは、operationType"insert""update""delete""replace" のいずれかであるドキュメントをフィルターします。

  3. $replaceRoot ステージは、操作の種類に応じてドキュメントルートを変更します。

    • 削除操作の場合、ドキュメントのルートをドキュメントのキーに変更します。これにより、ドキュメントが削除されたことを示すレコードが作成されますが、そのコンテンツはそれ以降のプロセシングから除外されます。

    • その他のすべての操作については、ドキュメント ルートを fullDocument に変更し、ドキュメントのコンテンツをさらにプロセシングするために渡し、changestream メタデータを除外します。

  4. $iceberg ステージは、myData という名前の Amazon Web Services S3 バケットへの接続を確立し、iceberg-warehouse/ パス内の Apache Iceberg テーブルに書き込みます。ドキュメント メタデータから取得されたソース collection の名前に従ってテーブル名を決定します。ドキュメント メタデータに従って実行する操作も決定します。

{
"$source": {
"connectionName": "atlas1",
"db": "db",
"coll": ["a", "b", "c"],
"initialSync": {
"enable": true
},
"config": {
"fullDocument": "required"
}
}
},
{
"$match": {
"operationType": {
"$in": ["insert", "update", "delete", "replace"]
}
}
},
{
"$replaceRoot": {
"newRoot": {
"$cond": {
"if": {
"$eq": [{ "$meta": "stream.source.operationType" }, "delete"]
},
"then": "$documentKey",
"else": "$fullDocument"
}
}
}
},
{
"$iceberg": {
"connectionName": "myS3Connection",
"databaseName": "iceberg-db",
"bucket": "myData",
"path": "iceberg-warehouse/",
"tableName": { "$meta": "stream.source.ns.coll" },
"mode": "cdc"
}
}