Controllare e monitorare la condivisione dei dati

Questo articolo descrive come i provider di dati e i destinatari possono usare i log di controllo per monitorare gli eventi di condivisione differenziale. I log di controllo del provider registrano le azioni eseguite dal provider e dalle azioni eseguite dai destinatari sui dati condivisi del provider. I log di controllo dei destinatari registrano gli eventi relativi all'accesso alle condivisioni e alla gestione degli oggetti provider.

Per visualizzare l'elenco degli eventi del log di controllo di Condivisione differenziale, vedere Eventi di condivisione differenziale.

Requisiti

Per accedere ai log di controllo, un amministratore dell'account deve abilitare la tabella di sistema del log di controllo per l'account Azure Databricks. Vedere Abilitare le tabelle di sistema. Per informazioni sulla tabella di sistema del log di controllo, vedere Informazioni di riferimento sulla tabella di sistema del log di controllo.

Se non si è un amministratore dell'account o un amministratore del metastore, è necessario avere accesso a per system.access.audit leggere i log di controllo.

Visualizzare gli eventi di condivisione differenziale nel log di controllo

Se l'account dispone di tabelle di sistema abilitate, i log di controllo vengono archiviati in system.access.audit. Se, in alternativa, l'account dispone di una configurazione per il recapito del log di controllo, è necessario conoscere il bucket e il percorso in cui vengono recapitati i log.

Eventi registrati

Per visualizzare l'elenco degli eventi del log di controllo di Condivisione differenziale, vedere Eventi di condivisione differenziale.

Visualizzare i dettagli del risultato della query di un destinatario

Nei log del provider gli eventi restituiti come deltaSharingQueriedTableChanges e deltaSharingQueriedTable vengono registrati dopo che la query di un destinatario dati riceve una risposta. I provider possono visualizzare il response.result campo di questi log per visualizzare altri dettagli sugli elementi condivisi con il destinatario. Il campo può includere i valori seguenti. Questo elenco non è completo.

"checkpointBytes": "0",
"earlyTermination": "false",
"maxRemoveFiles": "0",
"path": "file: example/s3/path/golden/snapshot-data0/_delta_log",
"deltaSharingPartitionFilteringAccessed": "false",
"deltaSharingRecipientId": "<redacted>",
"deltaSharingRecipientIdHash": "<recipient-hash-id>",
"jsonLogFileNum": "1",
"scannedJsonLogActionNum": "5",
"numRecords": "3",
"deltaSharingRecipientMetastoreId": "<redacted>",
"userAgent": "Delta-Sharing-Unity-Catalog-Databricks-Auth/1.0 Linux/4.15.0-2068-azure-fips OpenJDK_64-Bit_Server_VM/11.0.7+10-jvmci-20.1-b02 java/11.0.7 scala/2.12.15 java_vendor/GraalVM_Community",
"jsonLogFileBytes": "2846",
"checkpointFileNum": "0",
"metastoreId": "<redacted>",
"limitHint": "Some(1)",
"tableName": "cookie_ingredients",
"tableId": "1234567c-6d8b-45fd-9565-32e9fc23f8f3",
"activeAddFiles": "2", // number of AddFiles returned in the query
"numAddFiles": "2", // number of AddFiles returned in the query
"numAddCDCFiles": "2", // number of AddFiles returned in the CDF query
"numRemoveFiles": "2", // number of RemoveFiles returned in the query
"numSeenAddFiles": "3",
"scannedAddFileSize": "1300", // file size in bytes for the AddFile returned in the query
"scannedAddCDCFileSize": "1300", // file size in bytes for the AddCDCFile returned in the CDF query
"scannedRemoveFileSize": "1300", // file size in bytes for the RemoveFile returned in the query
"scannedCheckpointActionNum": "0",
"tableVersion": "0"

Errori registrati

Se un'azione di condivisione differenziale tentata ha esito negativo, l'azione viene registrata con il messaggio di errore nel response.error_message campo del log. Gli elementi tra < e > i caratteri rappresentano il testo segnaposto.

Messaggi di errore nei log del provider

La condivisione differenziale registra gli errori seguenti per i provider di dati:

  • La condivisione differenziale non è abilitata nel metastore selezionato.

    DatabricksServiceException: FEATURE_DISABLED:
    Delta Sharing is not enabled
    
  • È stata tentata un'operazione su un catalogo che non esiste.

    DatabricksServiceException: CATALOG_DOES_NOT_EXIST:
    Catalog ‘<catalog>’ does not exist.
    
  • Un utente che non è un amministratore dell'account o un amministratore del metastore ha tentato di eseguire un'operazione con privilegi.

    DatabricksServiceException: PERMISSION_DENIED:
    Only administrators can <operation-name> <operation-target>
    
  • È stata tentata un'operazione in un metastore da un'area di lavoro a cui il metastore non è assegnato.

    DatabricksServiceException: INVALID_STATE:
    Workspace <workspace-name> is no longer assigned to this metastore
    
  • Una richiesta mancava il nome del destinatario o il nome della condivisione.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare Missing required field: <recipient-name>/<share-name>
    
  • Una richiesta includeva un nome di destinatario o di condivisione non valido.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: CreateRecipient/CreateShare <recipient-name>/<share-name> is not a valid name
    
  • Un utente ha tentato di condividere una tabella che non si trova in un metastore del catalogo Unity.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: Only managed or external table on Unity Catalog can be added to a share
    
  • Un utente ha tentato di ruotare un destinatario già in uno stato ruotato e il cui token precedente non era ancora scaduto.

    DatabricksServiceException: INVALID_PARAMETER_VALUE: There are already two active tokens for recipient <recipient-name>
    
  • Un utente ha tentato di creare un nuovo destinatario o di condividerlo con lo stesso nome di quello esistente.

    DatabricksServiceException: RECIPIENT_ALREADY_EXISTS/SHARE_ALREADY_EXISTS: Recipient/Share <name> already exists`
    
  • Un utente ha tentato di eseguire un'operazione su un destinatario o una condivisione che non esiste.

    DatabricksServiceException: RECIPIENT_DOES_NOT_EXIST/SHARE_DOES_NOT_EXIST: Recipient/Share '<name>' does not exist
    
  • Un utente ha tentato di aggiungere una tabella a una condivisione, ma la tabella era già stata aggiunta.

    DatabricksServiceException: RESOURCE_ALREADY_EXISTS: Shared Table '<name>' already exists
    
  • Un utente ha tentato di eseguire un'operazione che ha fatto riferimento a una tabella che non esiste.

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: Table '<name>' does not exist
    
  • Un utente ha tentato di eseguire un'operazione che ha fatto riferimento a uno schema che non esisteva.

    DatabricksServiceException: SCHEMA_DOES_NOT_EXIST: Schema '<name>' does not exist
    
  • Un utente ha tentato di accedere a una condivisione che non esiste.

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    

Messaggi di errore nei log dei destinatari

La condivisione differenziale registra gli errori seguenti per i destinatari dei dati:

  • L'utente ha tentato di accedere a una condivisione che non dispone dell'autorizzazione per accedere.

    DatabricksServiceException: PERMISSION_DENIED:
    User does not have SELECT on Share <share-name>
    
  • L'utente ha tentato di accedere a una condivisione che non esiste.

    DatabricksServiceException: SHARE_DOES_NOT_EXIST: Share <share-name> does not exist.
    
  • L'utente ha tentato di accedere a una tabella che non esiste nella condivisione.

    DatabricksServiceException: TABLE_DOES_NOT_EXIST: <table-name> does not exist.