シナリオ: IoTデータをオブジェクト・ストレージにアーカイブ

選択したIoTドメイン・データベース・レコードをAutonomous AIデータベースからオブジェクト・ストレージにエクスポートしてから、自動保存によってライブ・スキーマから削除します。

このシナリオを使用して、IoTドメイン・データベース・スキーマからレコードを選択し、ライブAutonomous AI Database環境から削除する前にエクスポートします。長期的なアクセスまたはリストアのために、アーカイブをオブジェクト・ストレージに保持します。ライブ・スキーマは、現在のテレメトリ、ダッシュボードおよびトラブルシューティングに重点を置いたままですが、オブジェクト・ストレージは、ライブ環境外で古いレコードを保持します。Parquetなどの問合せに適したテキスト形式で履歴化されたデータをエクスポートします。content BLOB列を保持する必要がある場合、RAWおよび拒否されたデータをData Pumpダンプ・ファイルとしてエクスポートします。

タスク

始める前に

DATA_PUMP_DIRに対する読取りおよび書込みに必要なシステム権限が必要です。Data Pumpの使用を参照してください。このシナリオを完了するには、Autonomous AI Database、IoTドメイン・データベース・スキーマおよびアーカイブ・ファイルを受信するオブジェクト・ストレージ・バケットにアクセスする必要があります。

ユーザーに対して次が設定されていることを確認します。

  • エクスポートされたファイルのオブジェクト・ストレージ・バケットを作成または選択します。詳細は、オブジェクト・ストレージへのデータの配置を参照してください。
    ユーザーは、バケットを作成する権限を持つ特定のユーザー・グループのメンバーである必要があります。このポリシーにより、指定したユーザー・グループはバケットおよび関連するオブジェクトに対してすべてを実行できます。
    Allow group <user-group-in-customer-tenancy> to manage objects in compartment <bucket-compartment> where target.bucket.name = '<bucket-name>'
  • データベース・ユーザーがソースIoTスキーマ<domain-short-id>__IOTを問い合せることができることを確認します。

    IoTポリシーを使用して、ユーザーのグループが特定のコンパートメント内のIoTリソースにフル・アクセスできるようにします。

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

    または、このポリシーを使用して、ユーザーのグループが特定のコンパートメント内のIoTリソースへの読取り専用アクセス権を持つようにします。

    Allow group <group-name> to read iot-family in compartment <compartment-name>.
  • オブジェクト・ストレージのデータベース資格証明を作成するか、オブジェクト・ストレージのバケットに書き込むことができる既存の資格証明を使用します。オブジェクト・ストアの資格証明および場所パラメータの設定を参照してください。

    データベース資格証明を作成するには、この文を使用します。ユーザーOCID、テナンシIDをIoTサービス・テナンシに、OCI APIキーをOCI APIキーに置き換えます:

  • BEGIN
        dbms_cloud.create_credential(
            credential_name => 'IOT_OBJ_STORE_CRED',
            user_ocid        => '<replace-with-your-oci-user-ocid>',
            tenancy_ocid     => '<replace-with-your-oci-tenancy-ocid>',
            private_key      => '<replace-with-your-oci-api-signing-private-key>',
            fingerprint      => '<replace-with-your-oci-api-key-fingerprint>'
        );
    EXCEPTION
        WHEN OTHERS THEN
            dbms_output.put_line(
                'Credential IOT_OBJ_STORE_CRED creation error.'
            );
    END;
    /

ステップ1: データの保存とアーカイブの計画

データ保持では、IoTレコードがライブIoTドメイン・データベース・スキーマに保持される期間を定義します。アプリケーション、ダッシュボード、運用分析またはトラブルシューティング・ワークフローに低レイテンシ・アクセスが必要な場合、最新データをライブに保ちます。必要なレコードが引き続き使用可能な状態でエクスポートをスケジュールしてから、自動保存によってライブ・スキーマからエクスポートが削除されます。このアプローチにより、運用データベースの増加が制限され、監査、調査、オフライン分析またはリストア用の古いテレメトリ、RAWペイロードおよび拒否メッセージが引き続き保持されます。詳細は、IoTドメインのデータ保持の更新を参照してください。

履歴化されたデータの場合、自動保存は、サンプルがデータベースに挿入されたときから計算され、time_observed値からは計算されません。このシナリオのtime_observedフィルタでは、監視時間によってサンプルが選択されます。ゲートウェイがテレメトリをバッファリングして後でアップロードした場合でも、古いサンプルは構成済の保存期間内に存在できます。アーカイブまたは転送要件のエクスポート時間範囲を選択します。フィルタの例は、データを削除する手順ではありません。各アーカイブ・セットのバケット、オブジェクト接頭辞、エクスポート形式、資格証明名、ソース表および時間範囲を記録して、後でデータを検索して再ロードできるようにします。

ステップ2: アーカイブ形式の選択

エクスポート・スコープを定義した後、アーカイブするIoTドメイン・データベース表およびBLOBデータを保持する必要があるかどうかに基づいて、エクスポート形式を選択します。

履歴化データ
Parquet、CSV、JSON、XMLなどのテキスト書式でDBMS_CLOUD.EXPORT_DATAを使用します。Parquetは、ライブIoT環境以外で古いデータを問合せ可能なままにする必要がある場合に役立ちます。
生データまたは拒否データ
表にcontent BLOB列が含まれ、元のペイロード全体を保持する必要がある場合は、Data Pump形式のDBMS_CLOUD.EXPORT_DATAを使用します。

ステップ3: 履歴化されたデータのオブジェクト・ストレージへのアーカイブ

履歴データはすでにIoTプラットフォームによって解釈されています。ライブ・スキーマで引き続き使用可能な状態で、レポートまたはオフライン分析用の問合せに適した形式で、必要な履歴化された行をエクスポートします。

  1. この例では、3か月以上前に観察されたサンプルをオブジェクト・ストレージのParquet出力にエクスポートします。監視時間フィルタでは、これらのレコードが自動削除の対象になる時期は識別されません。

    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. Parquetアーカイブを後でターゲット表にロードするには、互換性のあるターゲット表を作成し、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;
    /

ステップ4: RAWまたは拒否されたデータのオブジェクト・ストレージへのアーカイブ

RAWデータおよび拒否データには、content BLOB列を含めることができます。これらの行は、自動保存によって削除される前に、BLOBコンテンツを含む全行を保持する形式を使用してエクスポートします。IoTデータベース表をアーカイブするには、Autonomous AI Databaseからオブジェクト・ストアまたは他のOracle Databasesへのデータのエクスポートを使用します。

  1. 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. 拒否されたデータのエクスポート:

    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;
    /
Note

DBMS_CLOUD.EXPORT_DATAによって生成されたダンプ・ファイルは、Oracle Data Pump impdpでインポートできません。Autonomous AI Databaseでは、これらのファイルに対してDBMS_CLOUD.COPY_DATAまたはサポートされている外部表プロシージャを使用します。その他のOracleデータベースについては、DBMS_CLOUDサブプログラムおよびREST APIのORACLE_DATAPUMPアクセス・ドライバのガイダンスを参照してください。

ステップ5: アーカイブ・オブジェクトの検証

oci os object list Object Storage CLIコマンドを使用して、アーカイブ・ファイルがオブジェクト・ストレージ・バケットに書き込まれたかどうかを確認します。詳細は、オブジェクト・ストレージ・バケットのリストおよびバケット内のオブジェクト・ストレージ・オブジェクトのリストを参照してください。

oci os object list \
  --namespace <namespace> \
  --bucket-name <bucket> \
  --prefix iot-archive/
ノート

依存する前に、完全なエクスポートを確認してください。Data Pump出力には、ゼロバイトのプライマリ・オブジェクトと個別のデータ・チャンクを含めることができます。そのプライマリ・オブジェクトのみをダウンロードしても、ダンプは取得されません。DBMS_CLOUDサブプログラムおよびREST APIの完全なダウンロード・ガイダンスに従います。

オプションのステップ6: Data Pumpアーカイブの表へのロード

このコピー・プロシージャは、調査、検証またはターゲット・リストアのために、アーカイブされたRAWまたは拒否された行をオブジェクト・ストレージからAutonomous AI Database表に読み戻す必要がある場合に使用します。このプロシージャは、Data Pumpダンプ・ファイルをオブジェクト・ストレージから読み取り、指定されたターゲット表にロードします。アーカイブはライブIoT取込みパスの一部にはなりません。これらの問合せエクスポートは、impdpリストアのフルスキーマ・バックアップまたは入力ではありません。

オブジェクト・ストレージからターゲット・アーカイブ表にダンプ・ファイルをロードします:

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;
/ 

FAQ

このFAQでは、このシナリオのオブジェクト・ストレージ・アーカイブのユーザー・ストーリーについて説明します。

ライブIoTデータベース・スキーマにはどのようなデータを保持する必要がありますか。
低レイテンシのアクセスに必要なアプリケーション、ダッシュボード、運用分析およびトラブルシューティング・ワークフローのデータを保持します。古いレコードが、「ステップ1: プラン・データ保存およびアーカイブ」で定義した保存期間外になる前にアーカイブします。
IoT表ごとに同じアーカイブ形式を使用する必要がありますか。
番号ライブ環境外の古いレコードを検査または分析する場合は、履歴データにParquetなどの問合せに適したテキスト形式を使用します。content BLOB列を含む全行を保持する必要がある場合は、RAWデータまたは拒否データにData Pump形式を使用します。
アーカイブされたIoTデータを後で問い合せることはできますか。
はい。Parquet、CSV、JSONまたはXMLアーカイブの場合は、DBMS_CLOUD.COPY_DATAを使用してオブジェクトを互換性のあるターゲット表にロードするか、エクスポートされた形式を読み取ることができるレポート・ワークフローを使用します。DBMS_CLOUD.EXPORT_DATAによって生成されたダンプ・ファイルの場合、データベース表内のアーカイブされた行を検査する必要がある場合は、「オプションのステップ6: Data Pumpアーカイブの表へのロード」に示すコピー手順を使用します。
アーカイブ・セットごとに何を記録しますか。
ソース表、保存期限、時間範囲、オブジェクト・ストレージ・バケット、オブジェクト接頭辞、エクスポート形式、資格証明名および検証結果を記録します。このメタデータは、正しいアーカイブ・オブジェクトを見つけ、後でデータを再ロードするのに役立ちます。
オプションのリストア・ステップでDBMS_CLOUD.COPY_DATAが使用されるのはなぜですか。
検証、調査または部分リストアのためにオブジェクト・ストレージ・アーカイブからデータベース表へのターゲット・ロードが必要な場合は、DBMS_CLOUD.COPY_DATAを使用します。このプロシージャは、expdp/impdpのエクスポートおよびインポート・ワークフローとは異なります。

次のステップ

IoTデータをアーカイブして検証した後、環境の保存およびリストア・タスクを続行します。

データ転送の場合、これらの例では、年齢フィルタとは関係なく、その転送に必要なすべてのレコードを選択します。このシナリオでは、すべてのIoTリソースまたはその構成がエクスポートされるわけではありません。この例では、選択された履歴化レコード、RAWレコードおよび拒否レコードについて説明しています。