10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Object Storage 上の Iceberg テーブルを Autonomous AI Database の外部表にする

Last updated at Posted at 2025-12-06

はじめに

Iceberg テーブルを Apache Spark & OCI Data Flow で操作する」 と題した前回の記事の最後に予告していた Autonomous AI Database から Apache Iceberg テーブルにアクセスする話です。

前回の投稿では、Apache Spark や OCI Data Flow で Iceberg テーブルを操作しました。
Warehouse ディレクトリを Object Storage の spark バケットの中の iceberg ディレクトリに設定し、そこに db.test という Iceberg テーブルを作成しました。

今回は、この Iceberg テーブルを Autonomous AI Database 26ai の外部表にしてみます。
パート1 では SQLcl を使ってコマンドラインから、パート2 では Data Studio を使って GUI から外部表を作成します。

パート1: SQLcl 編

SQLcl を使って、コマンドラインから外部表を作成します。SQL*Plus でも同様です。
SQLcl のインストールは こちら を参照して下さい。

Autonomous AI Database への接続は以下のようになります。

USER="ユーザー名"
PASSWORD="パスワード"
CONNECT_STR="ADBの接続文字列"

export TNS_ADMIN="ダウンロードしたウォレットの場所"

sql "$USER/$PASSWORD@$CONNECT_STR"

admin ユーザで作業

admin でログインして作業します。

  • ユーザー TESTUSER を作成して、一通り必要な権限を付与
SQL> CREATE USER TESTUSER IDENTIFIED BY ******;

User TESTUSER created.

SQL> GRANT CONNECT, RESOURCE TO TESTUSER;

Grant succeeded.

SQL> GRANT UNLIMITED TABLESPACE TO TESTUSER;

Grant succeeded.

SQL> GRANT EXECUTE on DBMS_CLOUD to TESTUSER;

Grant succeeded.
  • オブジェクトストレージにアクセスするためのネットワークアクセス権限を TESTUSER に付与
SQL> BEGIN
  2      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
  3          host => '*.oraclecloud.com',
  4          ace  => xs$ace_type(
  5              privilege_list => xs$name_list('http', 'connect', 'resolve'),
  6              principal_name => 'TESTUSER',
  7              principal_type => xs_acl.ptype_db
  8          )
  9      );
 10  END;
 11* /

PL/SQL procedure successfully completed.
  • DATA_PUMP_DIR へのREAD/WRITE権限を TESTUSER に付与
SQL> GRANT READ, WRITE ON DIRECTORY DATA_PUMP_DIR TO TESTUSER;

Grant succeeded.

TESTUSER ユーザーで作業

TESTUSER で接続し直して下さい。

  • クレデンシャルを作成

Autonomous AI Database がオブジェクト・ストレージにアクセスするために必要なクレデンシャルを登録します。
リソース・プリンシパルを使う方法もありますが、今回は Object Storage にユーザー名/パスワードで接続する方式でやってみます。

ユーザー名は、コンソールの右上のアイコンをクリックするとプロファイルのすぐ下にユーザ名が出てきますので、そこをクリックすると
アイデンティティ > ユーザー > ユーザーの詳細 ページにジャンプします。

image.png

フェデレーションしている場合もあるので、ここの冒頭に出てくるユーザー名を使って下さい。
image.png

パスワードには、認証トークンを使います。持っていない場合は、このページの 認証トークン に進んで、認証トークンを作成して下さい。

ここでは、OS_CRED という名前のクレデンシャルを作成します。

SQL> BEGIN
  2    DBMS_CLOUD.CREATE_CREDENTIAL(
  3      credential_name => 'OS_CRED',
  4      username => 'ユーザ名',
  5      password => 'パスワード'
  6    );
  7  END;
  8* /

PL/SQL procedure successfully completed.

クレデンシャルを使って、Object Storage にアクセスできるか、確認してみます。
DBMS_CLOUD.LIST_OBJECTS('クレデンシャル名', 'バケットのURI')
を使うと、指定したクレデンシャルを使って、指定したバケットにあるオブジェクトをリストできます。

SQL> SELECT OBJECT_NAME FROM DBMS_CLOUD.LIST_OBJECTS('OS_CRED', 'https://objectstorage.us-ashburn-1.oraclecloud.com/n/NAMESPACE/b/spark/') where OBJECT_NAME like 'iceberg%';

OBJECT_NAME                                                                          
____________________________________________________________________________________ 
iceberg/                                                                             
iceberg/db/                                                                          
iceberg/db/test/                                                                     
iceberg/db/test/data/                            
...
(以降省略)
  • 外部表を作成

DBMS_CLOUD.CREATE_EXTERNAL_TABLE() を使って外部表を作成します。

table_name credential_name iceberg_warehouse iceberg_table_path を適切な値に設定します。

SQL> BEGIN
  2  DBMS_CLOUD.CREATE_EXTERNAL_TABLE (
  3      table_name       => 'iceberg_db_test',
  4      credential_name  => 'OS_CRED',
  5      file_uri_list    => '',
  6      format           => '
  7          {
  8              "access_protocol" : {
  9                  "protocol_type" : "iceberg",
 10                  "protocol_config": {
 11                      "iceberg_catalog_type" : "hadoop",
 12                      "iceberg_warehouse" : "https://objectstorage.us-ashburn-1.oraclecloud.com/n/NAMESPACE/b/spark/o/iceberg",
 13                      "iceberg_table_path" : "db.test"
 14                  }
 15              }
 16          }'
 17  );
 18  END;
 19* /

PL/SQL procedure successfully completed.

これで外部表が作成されました。SELECT してみましょう。

SQL> select * from iceberg_db_test;

   ID DATA    
_____ _______ 
    5 df2     
    0 mod3    
    1 df1     
    6 mod3    
    2 df1     
    7 df2     
    3 mod3    
    4 df1     
    8 df2     
    9 mod3    

10 rows selected.

OKですね。

パート2: Data Studio 編

Autonomous AI Database では GUI で外部表を作成することができます。
以降 Data Studio で作業しますが、パート1 で設定した TESTUSER への権限が効いている前提で話を進めます。

admin ユーザで作業

  • TESTUSER の Web アクセスを有効化して DWROLE 権限を付与

データベース・アクションデータベース・ユーザー で設定します。

image.png

image.png

TESTUSER ユーザで作業

一旦ログアウトして、TESTUSER でログインし直して下さい。

image.png

Data Studio の データ・ロード を開きます。

image.png

データのリンク を選択します。

image.png

クラウド・ストアは現在何もない状態です。

image.png

「クラウド・ストアの場所の作成」をクリックして、新規作成します。
資格証明は、SQLcl ですでに OS_CRED を作っていたので、それをそのまま使います。
バケット URI を指定します。
https://objectstorage.us-ashburn-1.oraclecloud.com/n/NAMESPACE/b/spark/o

image.png

「次」を押して、バケットにアクセスできていることを確認して下さい。

image.png

「作成」ボタンを押します。

image.png

左側のディレクトリから、地球マークになっている Icebergテーブルを右側のペインにドラッグ&ドロップすると、自動的に内容を分析して外部表を作成する準備をしてくれます。

「開始」ボタンを押します。

image.png

外部表ができました!
SELECT して確認しておきましょう。

image.png

まとめ

SQLcl と Data Studio の2種類の方法で、Iceberg テーブルから外部表を作成してみました。特に Data Studio では簡単な操作で外部表があっさり作れてしまいましたね...。
権限まわりで躓かなかったら、スムースに行くと思います。

参考

10
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?