Scenario: archivia dati IoT nello storage degli oggetti

Archivia i dati dello schema di database del dominio IoT meno recenti da Autonomous AI Database a Object Storage dopo la scadenza della finestra di conservazione dei dati in tempo reale in modo da poter accedere AI dati dopo la scadenza della finestra di conservazione dei dati in tempo reale.

Utilizzare questo scenario per definire un limite di conservazione per lo schema di database del dominio IoT, esportare i dati che non devono più rimanere nell'ambiente di Autonomous AI Database attivo. Conservare l'archivio nello storage degli oggetti per l'accesso o il ripristino a lungo termine. Lo schema live rimane incentrato sulla telemetria, i dashboard e la risoluzione dei problemi correnti, mentre lo storage degli oggetti conserva i record meno recenti al di fuori dell'ambiente attivo. Esportare i dati storici in un formato di testo adatto alle query, ad esempio Parquet. Esportare i dati raw e rifiutati come file di dump di Data Pump quando è necessario conservare la colonna BLOB content.

Prima di iniziare

Sono necessari i privilegi di sistema necessari per leggere e scrivere in DATA_PUMP_DIR. Vedere Utilizzo di Data Pump. Per completare questo scenario, è necessario accedere ad Autonomous AI Database, allo schema di database del dominio IoT e al bucket di storage degli oggetti che riceve i file di archivio.

Verificare che per l'utente sia impostato quanto segue:

  • Crea o seleziona un bucket di storage degli oggetti esistente per i file esportati. Per ulteriori informazioni, vedere Inserimento dei dati nello storage degli oggetti.
    L'utente deve essere membro di un gruppo di utenti specifico con le autorizzazioni per creare un bucket. Questo criterio consente al gruppo di utenti specificato di eseguire tutte le operazioni con i bucket e gli oggetti associati.
    Allow group <user-group-in-customer-tenancy> to manage objects in compartment <bucket-compartment> where target.bucket.name = '<bucket-name>'
  • Confermare che l'utente del database può eseguire una query sullo schema IoT di origine: <domain-short-id>__IOT

    Utilizzare un criterio IoT per consentire a un gruppo di utenti di avere accesso completo alle risorse IoT in un compartimento specifico.

    Allow group <group-name> to manage iot-family in compartment <compartment-name>.

    In alternativa, utilizzare questo criterio per consentire a un gruppo di utenti di accedere in sola lettura alle risorse IoT in un compartimento specifico.

    Allow group <group-name> to read iot-family in compartment <compartment-name>.
  • Creare una credenziale di database per lo storage degli oggetti o utilizzare una credenziale esistente in grado di scrivere nel bucket nello storage degli oggetti. Vedere Impostazione delle credenziali e dei parametri di posizione per i negozi degli oggetti.

    Per creare una credenziale del database, utilizzare questa istruzione. Sostituire l'OCID utente, l'ID tenancy con la tenancy del servizio IoT e la chiave API OCI con la chiave API OCI:

  • BEGIN
        dbms_cloud.create_credential(
            credential_name => 'IOT_OBJ_STORE_CRED',
            user_ocid       => 'ocid1.user.oc1..<>',
            tenancy_ocid    => 'ocid1.tenancy.oc1..<>',
            private_key     => '-----BEGIN PRIVATE KEY-----
    <>
    -----END PRIVATE KEY-----
    OCI_API_KEY',
            fingerprint     => '<>'
        );
    EXCEPTION
    WHEN OTHERS THEN
       dbms_output.put_line('Credential IOT_OBJ_STORE_CRED creation error.');
    END;
    / 

Passo 1: pianificare conservazione e archiviazione dei dati

La conservazione dei dati definisce la durata dei record IoT nello schema di database del dominio IoT attivo. Mantieni attivi i dati recenti quando applicazioni, dashboard, analytics operativi o flussi di lavoro di risoluzione dei problemi richiedono un accesso a bassa latenza. Quando i record non rientrano nella finestra di conservazione, archiviarli nello storage degli oggetti prima di rimuoverli dallo schema attivo. Questo approccio limita la crescita del database operativo e conserva ancora la telemetria precedente, i payload raw e i messaggi rifiutati per audit, indagini, analytics offline o ripristino. Per ulteriori informazioni, vedere Aggiornamento della conservazione dei dati di un dominio IoT.

Scegli il limite di fidelizzazione dalla tua azienda, dai requisiti di reporting e compliance. Utilizzare lo stesso limite nella query di esportazione e in qualsiasi processo di cleanup successivo in modo che il limite di archivio sia chiaro. Le colonne dell'indicatore orario, ad esempio time_observed per i dati storicizzati e time_received per i dati raw o rifiutati, sono le chiavi di conservazione tipiche. Registrare il bucket, il prefisso dell'oggetto, il formato di esportazione, il nome delle credenziali, la tabella di origine e l'intervallo di tempo per ogni set di archivi in modo da poter trovare e ricaricare i dati in un secondo momento.

Passo 2: Scegli il formato dell'archivio

Dopo aver definito il limite di conservazione, scegliere il formato di esportazione in base alla tabella di database del dominio IoT che si desidera archiviare e se è necessario conservare i dati BLOB.

Dati storicizzati
Utilizzare DBMS_CLOUD.EXPORT_DATA con un formato di testo quale Parquet, CSV, JSON o XML. Parquet è utile quando i dati meno recenti devono rimanere interrogabili al di fuori dell'ambiente IoT attivo.
Dati non elaborati o rifiutati
Utilizzare il formato DBMS_CLOUD.EXPORT_DATA con Data Pump quando la tabella include la colonna BLOB content ed è necessario conservare il payload originale completo.

Passo 3: archiviare i dati storici nello storage degli oggetti

I dati storici sono già interpretati dalla piattaforma IoT. Esportare le righe con cronologia che hanno superato la finestra di conservazione in tempo reale in un formato query-friendly in modo che i report o gli analytics offline possano leggere l'archivio dallo storage degli oggetti.

  1. In questo esempio i record più vecchi di tre mesi vengono esportati in un oggetto Parquet nello storage degli oggetti.

    begin
      dbms_cloud.export_data(
        credential_name => 'IOT_OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/iot-archive/historized/historized_data_older_than_3_months.parquet',
        format          => json_object(
                             'type' value 'parquet'
                           ),
        query           => q'[
          select *
          from <domain-short-id>__IOT.HISTORIZED_DATA
          where time_observed < add_months(systimestamp, -3)
        ]'
      );
    end;
    /
  2. Per caricare l'archivio Parquet in una tabella di destinazione in un secondo momento, creare una tabella di destinazione compatibile e utilizzare DBMS_CLOUD.COPY_DATA.

    begin
      dbms_cloud.copy_data(
        table_name      => 'HISTORIZED_DATA_ARCHIVE',
        credential_name => 'IOT_OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/iot-archive/historized/historized_data_older_than_3_months.parquet',
        format          => json_object(
                             'type' value 'parquet'
                           )
      );
    end;
    /

Passo 4: archiviare dati non elaborati o rifiutati nello storage degli oggetti

I dati non elaborati e rifiutati possono includere la colonna BLOB content. Utilizzare un'esportazione Data Pump quando il processo di conservazione sposta queste righe dall'ambiente attivo ed è necessario conservare l'intera riga, incluso il contenuto BLOB. Per archiviare le tabelle di database IoT, utilizzare Esportazione di dati da Autonomous AI Database nell'area di memorizzazione degli oggetti o in altri database Oracle.

  1. Esporta dati raw:

    begin
      dbms_cloud.export_data(
        credential_name => 'IOT_OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/iot-archive/raw/raw_data_older_than_3_months.dmp',
        format          => json_object(
                             'type'        value 'datapump',
                             'compression' value 'HIGH',
                             'version'     value 'LATEST'
                           ),
        query           => q'[
          select *
          from <domain-short-id>__IOT.RAW_DATA
          where time_received < add_months(systimestamp, -3)
        ]'
      );
    end;
    /
  2. Esporta dati rifiutati:

    begin
      dbms_cloud.export_data(
        credential_name => 'IOT_OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/iot-archive/rejected/rejected_data_older_than_3_months.dmp',
        format          => json_object(
                             'type'        value 'datapump',
                             'compression' value 'HIGH',
                             'version'     value 'LATEST'
                           ),
        query           => q'[
          select *
          from <domain-short-id>__IOT.REJECTED_DATA
          where time_received < add_months(systimestamp, -3)
        ]'
      );
    end;
    /
Nota

Utilizzare DBMS_CLOUD.COPY_DATA per i formati di testo quali Parquet, CSV, JSON o XML. Per i file di dump di Data Pump, utilizzare Importazione Data Pump quando è necessario ripristinare i dati archiviati.

Passo 5: verifica degli oggetti di archivio

Utilizzare il comando CLI di storage degli oggetti oci os object list per confermare se i file di archivio sono stati scritti nel bucket di storage degli oggetti. Per ulteriori informazioni, vedere Elenco dei bucket di storage degli oggetti e Elenco degli oggetti di storage in un bucket.

oci os object list \
  --namespace <namespace> \
  --bucket-name <bucket> \
  --prefix iot-archive/
Nota

Dopo aver verificato i file di archivio, seguire il processo di cleanup della conservazione approvato per rimuovere l'intervallo di tempo archiviato dallo schema IoT attivo.

Passo 6 facoltativo: caricare un archivio Data Pump in una tabella

Utilizzare questa procedura di copia quando è necessario leggere di nuovo le righe raw o rifiutate archiviate dallo storage degli oggetti in una tabella di Autonomous AI Database per un'indagine, una convalida o un ripristino mirato. La procedura legge il file di dump di Data Pump dallo storage degli oggetti e lo carica nella tabella di destinazione specificata; non rende l'archivio parte del percorso di inclusione IoT attivo. Per un ripristino completo a livello di schema, utilizzare Importazione Data Pump. Per ulteriori informazioni, vedere Scaricare i file di dump, eseguire l'importazione di Data Pump e pulire l'area di memorizzazione degli oggetti.

Caricare il file di dump dallo storage degli oggetti in una tabella di archivio di destinazione:

begin
  dbms_cloud.copy_data(
    table_name      => 'RAW_DATA_ARCHIVE',
    credential_name => 'IOT_OBJ_STORE_CRED',
    file_uri_list   => 'https://objectstorage.<region>.oraclecloud.com/n/<namespace>/b/<bucket>/o/iot-archive/raw/raw_data_older_than_3_months.dmp',
    format          => json_object(
                         'type'        value 'datapump',
                         'rejectlimit' value 0
                       )
  );
end;
/ 

Domande più frequenti

Queste domande frequenti descrivono le storie degli utenti dell'archivio di storage degli oggetti in questo scenario.

Quali dati devono rimanere nello schema di database IoT attivo?
Mantieni i dati di cui le applicazioni, i dashboard, l'analitica operativa e i flussi di lavoro di risoluzione dei problemi hanno bisogno per un accesso a bassa latenza. Archiviare i record meno recenti prima che non rientrino nella finestra di conservazione definita nel Passo 1: Conservazione e archiviazione dei dati del piano.
Devo usare lo stesso formato di archivio per ogni tabella IoT?
N. Utilizzare un formato di testo basato su query, ad esempio Parquet, per i dati storici quando si desidera ispezionare o analizzare i record precedenti al di fuori dell'ambiente attivo. Utilizzare il formato Data Pump per i dati grezzi o rifiutati quando è necessario conservare la riga completa, inclusa la colonna BLOB content.
Posso eseguire una query sui dati IoT archiviati in un secondo momento?
Sì Per gli archivi Parquet, CSV, JSON o XML, caricare l'oggetto in una tabella di destinazione compatibile con DBMS_CLOUD.COPY_DATA o utilizzare un flusso di lavoro di reporting in grado di leggere il formato esportato. Per i file di dump di Data Pump, utilizzare Importazione di Data Pump o la procedura di copia illustrata nel Passo facoltativo 6: Caricamento di un archivio Data Pump in una tabella quando è necessario ispezionare le righe archiviate in una tabella di database.
Cosa registrare per ogni set di archivi?
Registrare la tabella di origine, il limite di conservazione, l'intervallo di tempo, il bucket di storage degli oggetti, il prefisso degli oggetti, il formato di esportazione, il nome delle credenziali e i risultati della verifica. Questi metadati consentono di trovare l'oggetto di archivio corretto e ricaricare i dati in un secondo momento.
Perché il passo di ripristino facoltativo utilizza DBMS_CLOUD.COPY_DATA?
Utilizza DBMS_CLOUD.COPY_DATA quando hai bisogno di un caricamento mirato da un archivio di storage degli oggetti in una tabella di database per la convalida, l'indagine o il ripristino parziale. Utilizzare Importazione Data Pump quando è necessario un flusso di lavoro di ripristino completo di Data Pump.

Passi successivi

Dopo aver archiviato e verificato i dati IoT, continuare con i task di conservazione e ripristino per l'ambiente in uso.

  • Aggiornare l'impostazione di conservazione dei dati del dominio IoT o il processo di cleanup in modo che lo schema attivo mantenga solo la finestra operativa richiesta.
  • Applica i requisiti di conservazione, ciclo di vita e controllo dell'accesso dello storage degli oggetti al bucket e ai prefissi di archivio.
  • Documenta la posizione dell'archivio, la tabella di origine, l'intervallo di tempo, il formato e i risultati della verifica per richieste di audit o ripristino future.
  • Utilizzare l'importazione DBMS_CLOUD.COPY_DATA o Data Pump per ricaricare i dati archiviati quando è necessario ispezionare o ripristinare i record precedenti.