2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[OCI]Autonomous DatabaseにアタッチしたNFS共有上にあるファイルからデータをロードしたり外部表を作ったりしてみた

Last updated at Posted at 2023-03-14

はじめに

先日のAutonomous Databaseの機能アップデートで、ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルからのデータロード(DBMS_CLOUD.COPY_DATA)や、ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルを元にした外部表の作成(DBMS_CLOUD.CREATE_EXTERNAL_TABLE)が可能になったので、早速試してみました。

今回は、プライベート・エンドポイントでデプロイされたAutonomous Databaseと同じサブネット上に、NFS共有としてOCI File Storageを作成して検証しました。

<OCI File Storageの情報>
スクリーンショット 2023-03-14 10.36.42.png
スクリーンショット 2023-03-14 10.36.53.png
スクリーンショット 2023-03-14 10.37.05.png
スクリーンショット 2023-03-14 10.37.16.png
<Autonomous Databaseのネットワーク情報>
スクリーンショット 2023-03-14 13.39.26.png

1.事前準備

まずは、ComputeインスタンスでOCI File Storageをマウントして、内容を確認します。
マウントポイントを作成します。

[opc@testvm ~]$ sudo mkdir -p /mnt/MyFileSystem

mountコマンドで作成したマウントポイントにOCI File Storageをマウントします。

[opc@testvm ~]$ sudo mount myfss.myprivatesubnet.myvcn.oraclevcn.com:/MyFileSystem /mnt/MyFileSystem

lsコマンドで、マウントしたOCI File Storageの内容を確認します。

[opc@testvm ~]$ ls /mnt/MyFileSystem/
dept.csv  test.txt

catコマンドで、OCI File Storage内にあるdept.csvファイルの内容を確認します

[opc@testvm ~]$ cat /mnt/MyFileSystem/dept.csv
10,ACCOUNTING,NEW YORK
20,RESEARCH,DALLAS
30,SALES,CHICAGO
40,OPERATIONS,BOSTON

umaountコマンドでOCI File Storageをアンマウントします。

[opc@testvm ~]$ sudo umount /mnt//MyFileSystemu[opc@testvm ~]$ 

2. Autonomous DatabaseへのNFS共有のアタッチ

SQL*PlusでadminユーザとしてAutonomous Databaseに接続します。

[opc@testvm ~]$ sqlplus admin/Demo#1Demo#1@(description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1521)(host=myadw.adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=jym1f5owgdmcult_myadw_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=no)))

SQL*Plus: Release 21.0.0.0.0 - Production on Tue Mar 14 04:32:44 2023
Version 21.9.0.0.0

Copyright (c) 1982, 2022, Oracle.  All rights reserved.

Last Successful login time: Tue Mar 14 2023 04:32:30 +00:00

Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.18.0.1.0

SQL>

ディレクトリ・オブジェクト「MY_FSS_DIR」を作成します。

SQL> CREATE DIRECTORY MY_FSS_DIR AS 'FSS';

Directory created.

SQL> 

ファイルシステム名を「MYFSS」として、作成したディレクトリ・オブジェクト「MY_FSS_DIR」にNFS共有(OCI File Storage)をアタッチします。

SQL> BEGIN
  2  	 DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEM(
  3  	  file_system_name	    => 'MYFSS',
  4  	  file_system_location	=> 'myfss.myprivatesubnet.myvcn.oraclevcn.com:/MyFileSystem',
  5  	  directory_name	    => 'MY_FSS_DIR',
  6  	  description		    => 'Mounting MyFileSystem'
  7  	 );
  8  END;
  9  /

PL/SQL procedure successfully completed.

SQL> 

DBMS_CLOUD.LIST_FILESファンクションを使用して、ディレクトリ「MY_FSS_DIR」内のファイルを確認します。

SQL> SELECT object_name FROM DBMS_CLOUD.LIST_FILES('MY_FSS_DIR');

OBJECT_NAME
--------------------------------------------------------------------------------
test.txt
dept.csv

SQL> 

OCI File Storageがディレクトリ・オブジェクトにアタッチされ、NFS共有(OCI File Storage)にあるファイルがディレクトリ「MY_FSS_DIR」から参照できることが確認できました。

3.ディレクトリ・オブジェクトにアタッチしたNFS共有からのデータロード

データのロード先となる表「dept」を作成します。

SQL> CREATE TABLE dept
  2   (DEPTNO NUMBER(2),
  3   DNAME VARCHAR2(14),
  4   LOC VARCHAR2(13)
  5  );

Table created.

SQL> 

DBMS_CLOUD.COPY_DATAプロシージャを使用して、NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルの内容を表deptにロードします。
file_uri_listは「ディレクトリ名:ファイル名」の形式で指定します。

SQL> BEGIN
  2    DBMS_CLOUD.COPY_DATA(
  3  	  table_name => 'DEPT',
  4  	  file_uri_list => 'MY_FSS_DIR:dept.csv',
  5  	  format => JSON_OBJECT('type' value 'csv')  );
  6  END;
  7  /

PL/SQL procedure successfully completed.

SQL> 

表deptの内容を確認します。

SQL> SELECT * FROM dept;

    DEPTNO DNAME	      LOC
---------- -------------- -------------
	    10 ACCOUNTING	  NEW YORK
	    20 RESEARCH	      DALLAS
	    30 SALES	      CHICAGO
	    40 OPERATIONS	  BOSTON

SQL> 

NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルの内容が、表deptにロードできました。

4.ディレクトリ・オブジェクトにアタッチしたNFS共有にあるファイルを元にした外部表の作成

次に、DBMS_CLOUD.CREATE_EXTERNAL_TABLEプロシージャを使用して、NFS共有(OCI File Storage)をアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルを元にした外部表「dept_ext」を作成します。
file_uri_listは「ディレクトリ名:ファイル名」の形式で指定します。

SQL> BEGIN
  2  	DBMS_CLOUD.CREATE_EXTERNAL_TABLE(
  3  	   table_name    => 'DEPT_EXT',
  4  	   file_uri_list => 'MY_FSS_DIR:dept.csv',
  5  	   format        => json_object('type' value 'csv', 'skipheaders' value '0'),
  6  	   field_list    => 'DEPTNO,
  7  			             DNAME,
  8  			             LOC',
  9  	   column_list   => 'DEPTNO NUMBER,
 10  			             DNAME  VARCHAR2(14),
 11  			             LOC    VARCHAR2(13)'
 12     );
 13  END;
 14  /

PL/SQL procedure successfully completed.

SQL> 

表dept_extの内容を確認します。

SQL> SELECT * FROM dept_ext;

    DEPTNO DNAME	      LOC
---------- -------------- -------------
	    10 ACCOUNTING	  NEW YORK
	    20 RESEARCH	      DALLAS
	    30 SALES	      CHICAGO
	    40 OPERATIONS	  BOSTON

SQL> 

OCI File Storageをアタッチしたディレクトリ「MY_FSS_DIR」内にあるdept.csvファイルを元にした外部表「dept_ext」が作成できました。

まとめ

Autonomous Databaseで、NFS共有(OCI File Storage)にあるファイルからのデータのロード、NFS共有(OCI File Storage)にあるファイルを元にした外部表の作成が可能であることが確認できました。

参考資料

Access Network File System from Autonomous Database
How to Attach a File System to your Autonomous Database
Load Data from Directories in Autonomous Database
SQL言語リファレンス CREATE DIRECTORY
DBMS_CLOUD_ADMIN.ATTACH_FILE_SYSTEM
DBMS_CLOUD.COPY_DATA
DBMS_CLOUD.CREATE_EXTERNAL_TABLE

2
0
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
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?