シナリオ: 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 => '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; /
ステップ1: データの保存とアーカイブの計画
データ保持では、IoTレコードがライブIoTドメイン・データベース・スキーマに保持される期間を定義します。アプリケーション、ダッシュボード、運用分析またはトラブルシューティング・ワークフローに低レイテンシ・アクセスが必要な場合、最新データをライブに保ちます。レコードが保存ウィンドウの外にある場合は、ライブ・スキーマから削除する前に、それらをオブジェクト・ストレージにアーカイブします。このアプローチにより、運用データベースの増加が制限され、監査、調査、オフライン分析またはリストア用の古いテレメトリ、RAWペイロードおよび拒否メッセージが引き続き保持されます。詳細は、IoTドメインのデータ保持の更新を参照してください。
ビジネス、レポート、コンプライアンスの要件から定着率のカットオフを選択します。アーカイブ境界が明確になるように、エクスポート問合せおよび後のクリーンアップ・プロセスで同じカットオフを使用します。履歴化されたデータのタイムスタンプ列(time_observed、RAWまたは拒否されたデータのtime_receivedなど)は、一般的な保存キーです。各アーカイブ・セットのバケット、オブジェクト接頭辞、エクスポート形式、資格証明名、ソース表および時間範囲を記録して、後でデータを検索して再ロードできるようにします。
ステップ2: アーカイブ形式の選択
保存カットオフを定義した後、アーカイブするIoTドメイン・データベース表およびBLOBデータを保持する必要があるかどうかに基づいて、エクスポート形式を選択します。
- 履歴化データ
- Parquet、CSV、JSON、XMLなどのテキスト書式で
DBMS_CLOUD.EXPORT_DATAを使用します。Parquetは、ライブIoT環境以外で古いデータを問合せ可能なままにする必要がある場合に役立ちます。 - 生データまたは拒否データ
- 表に
contentBLOB列が含まれ、元のペイロード全体を保持する必要がある場合は、Data Pump形式のDBMS_CLOUD.EXPORT_DATAを使用します。
ステップ3: 履歴化されたデータのオブジェクト・ストレージへのアーカイブ
履歴データはすでにIoTプラットフォームによって解釈されています。レポートまたはオフライン分析がオブジェクト・ストレージからアーカイブを読み取ることができるように、ライブ保持ウィンドウからエージ・アウトされた履歴行を問合せに適した形式でエクスポートします。
この例では、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; /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コンテンツを含む完全な行を保持する必要がある場合は、Data Pumpエクスポートを使用します。IoTデータベース表をアーカイブするには、Autonomous AI Databaseからオブジェクト・ストアまたは他のOracle Databasesへのデータのエクスポートを使用します。
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; /拒否されたデータのエクスポート:
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; /
Parquet、CSV、JSON、XMLなどのテキスト形式には、
DBMS_CLOUD.COPY_DATAを使用します。Data Pumpダンプ・ファイルの場合、アーカイブされたデータをリストアする必要がある場合は、Data Pump Importを使用します。ステップ5: アーカイブ・オブジェクトの検証
oci os object list Object Storage CLIコマンドを使用して、アーカイブ・ファイルがオブジェクト・ストレージ・バケットに書き込まれたかどうかを確認します。詳細は、オブジェクト・ストレージ・バケットのリストおよびバケット内のオブジェクト・ストレージ・オブジェクトのリストを参照してください。
oci os object list \
--namespace <namespace> \
--bucket-name <bucket> \
--prefix iot-archive/
アーカイブ・ファイルを検証した後、承認済保持クリーンアップ・プロセスに従って、ライブIoTスキーマからアーカイブ時間範囲を削除します。
オプションのステップ6: Data Pumpアーカイブの表へのロード
このコピー・プロシージャは、調査、検証またはターゲット・リストアのために、アーカイブされたRAWまたは拒否された行をオブジェクト・ストレージからAutonomous AI Database表に読み戻す必要がある場合に使用します。このプロシージャは、Data Pumpダンプ・ファイルをオブジェクト・ストレージから読み取り、指定されたターゲット表にロードします。アーカイブはライブIoT取込みパスの一部にはなりません。完全なスキーマ・レベルのリストアには、Data Pump Importを使用します。詳細は、ダンプ・ファイルのダウンロード、Data Pump Importの実行、およびオブジェクト・ストアのクリーン・アップに関する項を参照してください。
オブジェクト・ストレージからターゲット・アーカイブ表にダンプ・ファイルをロードします:
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などの問合せに適したテキスト形式を使用します。
contentBLOB列を含む全行を保持する必要がある場合は、RAWデータまたは拒否データにData Pump形式を使用します。 - アーカイブされたIoTデータを後で問い合せることはできますか。
- はい。Parquet、CSV、JSONまたはXMLアーカイブの場合は、
DBMS_CLOUD.COPY_DATAを使用してオブジェクトを互換性のあるターゲット表にロードするか、エクスポートされた形式を読み取ることができるレポート・ワークフローを使用します。Data Pumpダンプ・ファイルの場合、データベース表内のアーカイブされた行を検査する必要がある場合は、Data Pump Importまたはオプション・ステップ6: Data Pumpアーカイブの表へのロードに示すコピー・プロシージャを使用します。 - アーカイブ・セットごとに何を記録しますか。
- ソース表、保存期限、時間範囲、オブジェクト・ストレージ・バケット、オブジェクト接頭辞、エクスポート形式、資格証明名および検証結果を記録します。このメタデータは、正しいアーカイブ・オブジェクトを見つけ、後でデータを再ロードするのに役立ちます。
- オプションのリストア・ステップで
DBMS_CLOUD.COPY_DATAが使用されるのはなぜですか。 - 検証、調査または部分リストアのためにオブジェクト・ストレージ・アーカイブからデータベース表へのターゲット・ロードが必要な場合は、
DBMS_CLOUD.COPY_DATAを使用します。完全なData Pumpリストア・ワークフローが必要な場合は、Data Pump Importを使用します。
次のステップ
IoTデータをアーカイブして検証した後、環境の保存およびリストア・タスクを続行します。
- IoTドメインのデータ保存設定またはクリーンアップ・プロセスを更新して、ライブ・スキーマが必要な操作ウィンドウのみを保持するようにします。
- オブジェクト・ストレージの保持、ライフサイクルおよびアクセス制御の要件を、アーカイブ・バケットおよび接頭辞に適用します。
- 今後の監査またはリストア・リクエストについて、アーカイブの場所、ソース表、時間範囲、形式および検証結果を文書化します。
- 古いレコードを検査またはリストアする必要がある場合は、
DBMS_CLOUD.COPY_DATAまたはData Pump Importを使用して、アーカイブ済データをリロードします。