(最終回)Autonomous Databaseにデータをロード

(最終回)Autonomous Databaseにデータをロード

目次

前回の作業と今回の作業について
バケットからデータをロード
ロードした結果の確認
最後に

前回の作業と今回の作業について

前回は、Autonomous Data Warehouseにテーブルを作成し、ロード用のバケットを作成、ロード用のデータを準備しました。

今回は、実際にデータをロードします。アカウント作成から続いた環境構築編ですが、今回が最終回となります。

バケットからデータをロード

前回作成したバケット内のファイルからDBにデータをロードします。今回は、このような簡単なテーブルを作りました。

CREATE TABLE adwc_user.BAND (
    id             NUMBER             NOT NULL,
    name             VARCHAR2(20)           NOT NULL,
    inst             VARCHAR2(20)           NOT NULL );

このテーブルにバケットからデータをコピーします。まずは、公式のドキュメントに倣って「|」区切りでデータを作成しました。

1|"Anthony"|"vocal"|
2|"Flea"|"bass"|
3|"Chad"|"dram"|
4|"Frusciante"|"guitar"|

dbms_cloudパッケージのcopy_dataプロシージャを使用します。前回、資格情報を格納するために使用したcreate_credentialと同じパッケージです。

begin
 dbms_cloud.copy_data(
    table_name =>'BAND',
    credential_name =>'OBJ_STORE_CRED',
    file_uri_list =>'https://swiftobjectstorage.[region name].oraclecloud.com/v1/[tenant name]/[backet_name]/[file_name]',
    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')
 );
end;
/

まずここで、「Authorization failed for URI」のエラーで詰まりました。バケットにアクセスする際に認証のエラーが出ているようで、原因としては、前回作成した認証情報(’OBJ_STORE_CRED’)のユーザ名を間違えていました。

begin
  DBMS_CLOUD.create_credential (
    credential_name => 'OBJ_STORE_CRED',
    username => '[name]',
    password => '[Auth Token]'
  ) ;
end;
/

この部分で「name」に入れるのは、[adwc_user]でもなく、[admin]でもなく、テナントの下の「ユーザ名」でした。アカウントを登録した際のメールアドレスになっている方が大半かと思います。落ち着いて考えると当たり前なのですが、注意が必要かと思います。

ロードした結果の確認

早速、select すると値が格納されていることが確認できました。

        ID NAME                 INST                
---------- -------------------- --------------------
         1 Anthony              vocal               
         2 Flea                 bass                
         3 Chad                 dram                
         4 Frusciante           guitar    

続いて、カンマ区切りにしてみました。

1,"Neville","key",
2,"Porter","bass",
3,"Nocentelli","gutar",
4,"Joe","perc",

そのまま試すと「Reject limit reached」とエラーが出ました。そこで、formatの引数を変更しました。
※format => json_object(‘type’ value ‘csv’)に変更

        ID NAME                 INST                
---------- -------------------- --------------------
         1 Neville              key                 
         2 Porter               bass                
         3 Nocentelli           gutar               
         4 Joe                  perc                

無事に格納されました。

    format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true')

この部分を取り込みたいファイルの形式に合わせていく形です。記述の仕方は、下のリンクを参照ください。

最後に

全9回を通して、「アカウント登録→Autonomous Data Warehouseのインスタンス作成→データのロード」という一連の流れをご紹介しました。大幅に横道に逸れたり、詰まったりしたため9回という長尺になってしまいましたが、ADWCの環境構築編については、この回で終了したいと思います。読んでいただき誠にありがとうございました。次回連載は、Oracle CloudのComputeの部分から、インフラ構築編をお送りします。その際は、AWSとの比較なども入れつつ検証を行いたいと思います。