DBMS_CLOUDを使って数百万件のデータを Autonomous Database(ADB) にインポート (2022/11/30)

DBMS_CLOUDを使って数百万件のデータを Autonomous Database(ADB) にインポート (2022/11/30)

https://medium.com/@bimands/how-to-import-millions-of-data-into-autonomous-database-adb-using-dbms-cloud-24449edfcc98

投稿者:Bimands


大量のデータをデータベースにインポートするには、まずADBがObject Storageにあるファイルを読み込めるようにAuth Tokenを作成する必要があります。APIキーとAuth Tokenのどちらを作成してもかまいません。Auth Tokenを作成する場合は、接続を作成するためのパスワードを忘れないようにしてください。

作成された認証トークンのサンプル


データベースにAdminユーザでログインし、以下の権限が付与されていることを確認します。クラウドコンソールからSQL Developerを使用するか、SQL Developerクライアントを使用するかのどちらかです。


grant dwrole, oml_developer, create table, create view to <user>;
grant read, write on directory data_pump_dir to <user>;
grant execute on dbms_cloud to <user>;
alter user <user> quota unlimited on data;


以下のいずれかのSQL(必要な情報を含む)を実行して、Object Storageにクレデンシャルを確立することができます。


BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL(
credential_name => 'api_token',
username => '<cloud userid>',
password => '<generated auth token password>'
);
END;
/

BEGIN
DBMS_CLOUD.CREATE_CREDENTIAL (
credential_name => 'api_token',
user_ocid => 'user_ocid',
tenancy_ocid => 'tenancy_ocid',
private_key => 'private_key',
fingerprint => 'fingerprint'
);
END;
/



SQL Developer を使用した接続作成サンプル


DBMS_CLOUS.LIST_OBJECTS を実行して、必要な Bucket にあるすべてのデータを確認することで、接続が正しく確立されているかどうかを確認できます。

DBMS_CLOUS.LIST_OBJECTS の詳細


ここで、10万件のダミーデータを含むファイルemployee_$Date.csvを作成し、Object Storageに保存してみます。これをデータベースにロードしてみます。



あとは、以下のDBMS_CLOUD.CREATE_EXTERNAL_TABLEを実行するだけです。CREATE_EXTERNAL_TABLEを実行すると、このファイルからデータが読み込まれ、一瞬でステージテーブルにロードされます。


BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
table_name =>'Temp_Employee_Stg',
credential_name =>'Auth_Token',
file_uri_list =>'<object storage file URI>',
format => json_object('delimiter' value ',', 'removequotes' value 'true','ignoremissingcolumns' value 'true','blankasnull' value 'true','skipheaders' value '1'),
column_list => 'USERID VARCHAR2(200),FIRSTNAME VARCHAR2(200),LASTNAME VARCHAR2(200),EMAILID VARCHAR2(200),AGE NUMBER');
END;


以下のブロックがミリ秒単位で実行され、ステージテーブルに全データがロードされます。

ステージテーブルにすべてのレコードを挿入するのに0.096秒かかりました。

すべてのデータが正常に読み込まれました


時には、ADBに大量のデータを処理するために、OICに制限がある場合があります。そのような場合、OICでDBMS_CLOUDの異なる機能を持つカスタムパッケージを作成し、OIC統合から同じものを実行することができます。PFBサンプルOIC統合 :


  •     統合では、オブジェクトストレージからファイルをリストアップします。
  •     そして、ATP DBにロードするファイル名を取得します。
  •     その後、OICはステージテーブルにデータをロードするプロシージャでファイル名を渡す必要があります。


新しいレコードと既存のレコードをマージするプロシージャを作成するために別のブログを作成しました。

Object StorageからADBにバルクデータをロードするための統合サンプル


参考文献


https://docs.oracle.com/en/cloud/paas/autonomous-database/adbsa/dbms-cloud-subprograms.html


https://cloud-code-innovate.github.io/dbms_cloud/


詳細な実装を調べていただきありがとうございます。


コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)