Azure Data Factory と Azure Synapse の Azure Cosmos DB コネクタのトラブルシューティング
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。
この記事では、Azure Data Factory と Azure Synapse の Azure Cosmos DB および Azure Cosmos DB for NoSQL コネクタの一般的な問題のトラブルシューティングのための提案を示します。
エラー メッセージ: 要求のサイズが大きすぎます。
現象:既定の書き込みバッチサイズを使用して Azure Cosmos DB にデータをコピーすると、次のエラーが表示されます。
Request size is too large.
原因:Azure Cosmos DB は、1 つの要求のサイズを 2 MB に制限します。 式は、"要求サイズ = 1 つのドキュメント サイズ * 書き込みバッチ サイズ" となります。 ドキュメントのサイズが大きい場合、既定の動作の結果として要求サイズが過度に大きくなります。
解決方法:
書き込みバッチ サイズを調整することができます。 Copy アクティビティのシンクで、<書き込みバッチ サイズ> の値を小さくします (既定値は 10000)。
<書き込みバッチ サイズ> の値を 1 に減らしても解決しない場合は、Azure Cosmos DB SQL API を V2 から V3 に変更します。 この構成を行う方法は 2 種類あります。- 方法 1: 認証の種類を、サービス プリンシパル、システム割り当てマネージド ID、またはユーザー割り当てマネージド ID に変更します。
- 方法 2: アカウント キー認証を引き続き使用する場合は、次の手順に従います。
Azure Cosmos DB for NoSQL リンク サービスを作成します。
そのリンク サービスを次のテンプレートで更新します。
{ "name": "<CosmosDbV3>", "type": "Microsoft.DataFactory/factories/linkedservices", "properties": { "annotations": [], "type": "CosmosDb", "typeProperties": { "useV3": true, "accountEndpoint": "<account endpoint>", "database": "<database name>", "accountKey": { "type": "SecureString", "value": "<account key>" } } } }
エラー メッセージ: 一意なインデックスの制約違反
現象:Azure Cosmos DB にデータをコピーすると、次のエラーが表示されます。
Message=Partition range id 0 | Failed to import mini-batch. Exception was Message: {"Errors":["Encountered exception while executing function. Exception = Error: {\"Errors\":[\"Unique index constraint violation.\"]}...
原因:原因として、次の 2 つが考えられます。
- 原因 1:書き込み動作として Insert を使用する場合、このエラーは、ソース データに同じ ID を持つ行またはオブジェクトがあることを意味します。
- 原因 2:書き込み動作として Upsert を使用し、コンテナーに別の一意のキーを設定した場合、このエラーは、ソース データの行またはオブジェクトの ID はそれぞれ異なりますが、定義された一意のキーとして同じ値が存在することを意味します。
解決方法:
- 原因 1 の場合は、書き込み動作として Upsert を設定します。
- 原因 2 の場合は、定義された一意のキーに対して各ドキュメントの値が異なることを確認してください。
エラー メッセージ:要求率が大きいです
現象:Azure Cosmos DB にデータをコピーすると、次のエラーが表示されます。
Type=Microsoft.Azure.Documents.DocumentClientException, Message=Message: {"Errors":["Request rate is large"]}
原因:使用されている要求ユニット (RU) の数が、Azure Cosmos DB で構成されている使用可能な RU を超えています。 Azure Cosmos DB が RU を計算する方法については、「Azure Cosmos DB の要求ユニット」を参照してください。
解決方法:次の 2 つの解決策のいずれかを試してください。
- <コンテナー RU> 数を Azure Cosmos DB でより大きな値に増やします。 このソリューションにより、Copy アクティビティのパフォーマンスが向上しますが、Azure Cosmos DB にかかるコストが増加します。
- writeBatchSize を 1000 などの小さい値に減らし、parallelCopies を 1 などの小さい値に減らします。 このソリューションでは、コピーの実行のパフォーマンスが低下しますが、Azure Cosmos DB にかかるコストは増加しません。
列マッピングでの列の欠落
現象:列マッピングのために Azure Cosmos DB のスキーマをインポートするときに、一部の列が欠落しています。
原因: Azure Data Factory と Synapse のパイプラインは、最初の 10 個の Azure Cosmos DB ドキュメントからスキーマを推論します。 一部のドキュメント列またはプロパティに値が含まれていない場合、スキーマが検出されず、その結果表示されません。
解決方法:次のコードに示すように、クエリを調整して、列の値を結果セットに空の値で表示するように強制できます。 最初の 10 個のドキュメントで、impossible 列が欠落していると見なします。 あるいは、マッピング用の列を手動で追加することもできます。
select c.company, c.category, c.comments, (c.impossible??'') as impossible from c
エラー メッセージ:リーダーの GuidRepresentation が CSharpLegacy です
現象:汎用一意識別子 (UUID) フィールドを使用して Azure Cosmos DB MongoAPI または MongoDB からデータをコピーすると、次のエラーが表示されます。
Failed to read data via MongoDB client., Source=Microsoft.DataTransfer.Runtime.MongoDbV2Connector,Type=System.FormatException, Message=The GuidRepresentation for the reader is CSharpLegacy which requires the binary sub type to be UuidLegacy not UuidStandard.,Source=MongoDB.Bson,’“,
原因: バイナリ JSON (BSON) で UUID を表すには、UuidStandard と UuidLegacy という 2 つの方法があります。 既定では、UuidLegacy はデータの読み取りに使用されます。 MongoDB 内の UUID データが UuidStandard の場合は、エラーが発生します。
解決方法:MongoDB の接続文字列に、uuidRepresentation=standard オプションを追加します。 詳細については、MongoDB 接続文字列に関する記事を参照してください。
エラー コード:CosmosDbSqlApiOperationFailed
メッセージ:
CosmosDbSqlApi operation Failed. ErrorMessage: %msg;.
原因:CosmosDbSqlApi 操作に問題があります。 これは、具体的には Azure Cosmos DB for NoSQL コネクタに適用されます。
推奨事項: エラーの詳細を確認するには、Azure Cosmos DB のヘルプ ドキュメントを参照してください。 詳細については、Azure Cosmos DB チームにお問い合わせください。
エラー コード: CosmosDbSqlApiPartitionKeyExceedStorage
メッセージ:
The size of data each logical partition can store is limited, current partitioning design and workload failed to store more than the allowed amount of data for a given partition key value.
原因: 各論理パーティションのデータ サイズが制限され、パーティション キーが論理パーティションの最大サイズに達しました。
推奨事項: Azure Cosmos DB パーティションの設計を確認します。 詳細については、「論理パーティション」をご覧ください。
関連するコンテンツ
トラブルシューティングのその他のヘルプについては、次のリソースを参照してください。