Risolvere i problemi del connettore Azure Cosmos DB in Azure Data Factory e Azure Synapse

SI APPLICA A: Azure Data Factory Azure Synapse Analytics

Suggerimento

Provare Data Factory in Microsoft Fabric, una soluzione di analisi all-in-one per le aziende. Microsoft Fabric copre tutti gli elementi, dallo spostamento dei dati all'analisi scientifica dei dati, all'analisi in tempo reale, alla business intelligence e alla creazione di report. Scopri come avviare gratuitamente una nuova versione di valutazione .

Questo articolo fornisce suggerimenti per risolvere i problemi comuni relativi ai connettori Azure Cosmos DB e Azure Cosmos DB per NoSQL in Azure Data Factory e Azure Synapse.

Messaggio di errore: Le dimensioni della richiesta sono troppo grandi

  • Sintomi: quando si copiano dati in Azure Cosmos DB con dimensioni batch di scrittura predefinite, viene visualizzato l'errore seguente: Request size is too large.

  • Causa: Azure Cosmos DB limita le dimensioni di una singola richiesta a 2 MB. La formula è dimensione richiesta = dimensione singola del documento * dimensioni batch di scrittura. Se le dimensioni del documento sono grandi, il comportamento predefinito comporterà una dimensione della richiesta troppo grande.

  • Risoluzione:
    È possibile ottimizzare le dimensioni del batch di scrittura. Nel sink dell'attività di copia ridurre il valore delle dimensioni del batch di scrittura (il valore predefinito è 10000).
    Se la riduzione del valore delle dimensioni del batch di scrittura su 1 non funziona ancora, modificare l'API SQL di Azure Cosmos DB da V2 a V3. Per completare questa configurazione, sono disponibili due opzioni:

    • Opzione 1: modificare il tipo di autenticazione impostando l'entità servizio o l'identità gestita assegnata dal sistema o l'identità gestita assegnata dall'utente.
    • Opzione 2: se si vuole comunque usare l'autenticazione della chiave dell'account, seguire questa procedura:
      1. Creare un servizio collegato Azure Cosmos DB per NoSQL.

      2. Aggiornare il servizio collegato con il modello seguente.

        {
          "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>"
              }
            }
          }
        }
        

Messaggio di errore: Violazione di vincolo di indice univoco

  • Sintomi: quando si copiano dati in Azure Cosmos DB, viene visualizzato l'errore seguente:

    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.\"]}...

  • Causa: Le cause possono essere due:

    • Causa 1: se si usa Inserisci come comportamento di scrittura, questo errore indica che i dati di origine hanno righe o oggetti con lo stesso ID.
    • Causa 2: se si usa Upsert come comportamento di scrittura e si imposta un'altra chiave univoca sul contenitore, questo errore indica che i dati di origine hanno righe o oggetti con ID diversi, ma lo stesso valore per la chiave univoca definita.
  • Risoluzione:

    • Per la causa 1, impostare Upsert come comportamento di scrittura.
    • Per la causa 2, assicurarsi che ogni documento abbia un valore diverso per la chiave univoca definita.

Messaggio di errore: La frequenza delle richieste è troppo elevata

  • Sintomi: quando si copiano dati in Azure Cosmos DB, viene visualizzato l'errore seguente:

    Type=Microsoft.Azure.Documents.DocumentClientException, Message=Message: {"Errors":["Request rate is large"]}

  • Causa: il numero di unità richiesta usate è maggiore delle UR disponibili configurate in Azure Cosmos DB. Per informazioni su come Azure Cosmos DB calcola le UR, vedere Unità richiesta in Azure Cosmos DB.

  • Soluzione: provare una delle due soluzioni seguenti:

    • Aumentare il numero di UR del contenitore a un valore maggiore in Azure Cosmos DB. Questa soluzione migliorerà le prestazioni dell'attività di copia, ma comporta un costo maggiore in Azure Cosmos DB.
    • Ridurre writeBatchSize a un valore minore, ad esempio 1000, e ridurre parallelCopies a un valore minore, ad esempio 1. Questa soluzione ridurrà le prestazioni di esecuzione della copia, ma non comporterà costi aggiuntivi in Azure Cosmos DB.

Colonne mancanti nel mapping delle colonne

  • Sintomi: quando si importa uno schema per Azure Cosmos DB per il mapping delle colonne, mancano alcune colonne.

  • Causa: Azure Data Factory e le pipeline di Synapse deducono lo schema dai primi 10 documenti di Azure Cosmos DB. Se alcune colonne o proprietà del documento non contengono valori, lo schema non viene rilevato e di conseguenza non viene visualizzato.

  • Soluzione: è possibile ottimizzare la query come illustrato nel codice seguente per forzare la visualizzazione dei valori di colonna nel set di risultati con valori vuoti. Si supponga che la colonna impossibile non sia presente nei primi 10 documenti. In alternativa, è possibile aggiungere manualmente la colonna per il mapping.

    select c.company, c.category, c.comments, (c.impossible??'') as impossible from c
    

Messaggio di errore: GuidRepresentation per il lettore è CSharpLegacy

  • Sintomi: quando si copiano dati da Azure Cosmos DB MongoAPI o MongoDB con il campo UUID (Universally Unique Identifier), viene visualizzato l'errore seguente:

    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,’“,

  • Causa: esistono due modi per rappresentare l'UUID in Binary JSON (BSON): UuidStardard e UuidLegacy. Per impostazione predefinita, viene usato UuidLegacy per leggere i dati. Se i dati UUID in MongoDB sono UuidStandard, verrà visualizzato un errore.

  • Soluzione: nella stringa di connessione MongoDB aggiungere l'opzione uuidRepresentation=standard . Per altre informazioni, vedere Stringa di connessione MongoDB.

Codice errore: CosmosDbSqlApiOperationFailed

  • Messaggio: CosmosDbSqlApi operation Failed. ErrorMessage: %msg;.

  • Causa: problema con l'operazione CosmosDbSqlApi. Questo vale per il connettore Azure Cosmos DB per NoSQL in particolare.

  • Raccomandazione: per controllare i dettagli dell'errore, vedere il documento della Guida di Azure Cosmos DB. Per altre informazioni, contattare il team di Azure Cosmos DB.

Codice errore: CosmosDbSqlApiPartitionKeyExceedStorage

  • Messaggio: 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.

  • Causa: le dimensioni dei dati di ogni partizione logica sono limitate e la chiave di partizione ha raggiunto le dimensioni massime della partizione logica.

  • Raccomandazione: controllare la progettazione delle partizioni di Azure Cosmos DB. Per altre informazioni, vedere Partizioni logiche.

Passaggi successivi

Per altre informazioni sulla risoluzione dei problemi, usare le risorse seguenti: