DBMS_CLOUDを使って数百万件のデータを Autonomous Database(ADB) にインポート (2022/11/30)
DBMS_CLOUDを使って数百万件のデータを Autonomous Database(ADB) にインポート (2022/11/30)
投稿者: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/
詳細な実装を調べていただきありがとうございます。
コメント
コメントを投稿