2
2

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]S3バケット内に追加されるCSVファイルを一定の間隔でAutonomous Databseに自動的にロードしてみた

Posted at

はじめに

Autonomous Databaseに用意されているDBMS_CLOUD_PIPELINEパッケージを使用して、S3バケットに追加されるCSVファイルをAutonomous Database内の表に自動的にロードしてみました。

1. AWS側の事前準備

S3バケットを作成し、以下のような内容のCSVファイルemployee1.csvをアップロードしました。

employee1.csv
鈴木さん,38,1000000
田中さん,51,2500000

スクリーンショット 2023-10-24 14.50.31.png

2. データのロード先となる表の作成

S3バケット内にあるCSVファイルのロード先となる表を作成します。
ここでは表の名前をemployeeとしています。

15:08:59 SQL> CREATE TABLE EMPLOYEE(
  2      name   VARCHAR2(128),
  3      age    NUMBER,
  4      salary NUMBER
  5* );

Table EMPLOYEEは作成されました。

15:09:19 SQL> 

3. S3にアクセスするためのクレデンシャルの作成

こちらの記事の手順を参考にして、S3バケットにアクセスするためのクレデンシャルを作成します。
ここではクレデンシャルの名前をS3_CREDとして作成しています。

15:09:19 SQL> BEGIN
  2    DBMS_CLOUD.CREATE_CREDENTIAL(
  3      credential_name => 'S3_CRED',
  4      params =>
  5          JSON_OBJECT('aws_role_arn' value 'arn:aws:iam::XXXXXXXXXX:role/<role_name>',          
  6                      'external_id_type' value 'database_ocid')
  7    );
  8  END;
  9* /

PL/SQLプロシージャが正常に完了しました。

15:10:12 SQL>

クレデンシャルの確認のために、DBMS_CLOUD.LIST_OBJECTファンクションを使用して、S3バケット内のオブジェクトの一覧を取得してみます。

15:10:12 SQL> SELECT object_name
  2  FROM DBMS_CLOUD.LIST_OBJECTS(
  3           credential_name => 'S3_CRED',
  4           location_uri    => 'https://s3.ap-northeast-1.amazonaws.com/バケット名/'
  5* );

OBJECT_NAME      
________________ 
employee1.csv    

15:11:19 SQL> 

S3バケット内のオブジェクトのリストが表示されましたので、クレデンシャルS3_CREDを使用してS3バケットにアクセスできることが確認できました。

4. データロードのためのパイプラインの作成

DBMS_CLOUD_PIPELINE.CREATE_PIPELINEプロシージャを使用して、S3バケット内のファイルを継続的に表にロードするパイプラインを作成します。
ここでは、S3バケット内のCSVファイルを表employeeに5分間隔で継続的にロードするパイプラインをS3_LOAD_PIPELINEという名前で作成しています。

15:12:55 SQL> BEGIN
  2      DBMS_CLOUD_PIPELINE.CREATE_PIPELINE(
  3          pipeline_name => 'S3_LOAD_PIPELINE',
  4          pipeline_type => 'LOAD',
  5          attributes    => JSON_OBJECT(
  6                               'credential_name' VALUE 'S3_CRED',
  7                               'location' VALUE 'https://s3.ap-northeast-1.amazonaws.com/s3pipelinebucket/',
  8                               'table_name' VALUE 'employee',
  9                               'format' VALUE '{"type": "csv"}',
 10                               'priority' VALUE 'MEDIUM',
 11                               'interval' VALUE '5')
 12      );
 13  END;
 14* /

PL/SQLプロシージャが正常に完了しました。

15:12:55 SQL> 

5. 作成したパイプラインの開始

DBMS_CLOUD_PIPELINE.START_PIPELINEプロシージャを使用して、パイプラインS3_LOAD_PIPELINEを開始します。

15:13:48 SQL> EXEC DBMS_CLOUD_PIPELINE.START_PIPELINE('S3_LOAD_PIPELINE');

PL/SQLプロシージャが正常に完了しました。

15:13:49 SQL> 

6. 動作確認

パイプラインs3_load_pipelineの動作を確認するために、表employeeのデータを確認してみます。

15:14:16 SQL> SELECT * FROM employee;

NAME       AGE     SALARY 
_______ ______ __________ 
鈴木さん        38    1000000 
田中さん        51    2500000 

15:14:16 SQL>

S3バケット内にあるemployee1.csvの内容が表employeeにロードされていることが確認できました。

S3バケットに以下のような内容のCSVファイルemployee2.csvをアップロードします。

employee2.csv
渡辺さん,22,1000000
松本さん,41,3000000

スクリーンショット 2023-10-24 15.15.07.png

5分ほど待って、表employeeのデータを確認してみます。

15:19:01 SQL> SELECT * FROM employee;

NAME       AGE     SALARY 
_______ ______ __________ 
鈴木さん        38    1000000 
田中さん        51    2500000 
渡辺さん        22    1000000 
松本さん        41    3000000 

15:19:01 SQL>

S3バケット内に追加されたemployee2.csvの内容が表employeeにロードされていることが確認できました。

S3バケットに以下のような内容のCSVファイルemployee3.csvをアップロードします。

employee3.csv
高橋さん,28,1800000
山口さん,33,3300000

スクリーンショット 2023-10-24 15.20.45.png

5分ほど待って、表employeeのデータを確認してみます。

15:24:58 SQL> SELECT * FROM employee;

NAME       AGE     SALARY 
_______ ______ __________ 
鈴木さん        38    1000000 
田中さん        51    2500000 
渡辺さん        22    1000000 
松本さん        41    3000000 
高橋さん        28    1800000 
山口さん        33    3300000 

6行が選択されました。 

15:24:59 SQL>

S3バケット内に追加されたemployee2.csvの内容が表employeeにロードされていることが確認できました。

まとめ

DBMS_CLOUD_PIPELINEパッケージを使用して、S3バケット内に追加されるファイルをAutonomous Databseに自動的にロードできることが確認できました。

参考情報

[OCI]Autonomous Databaseのデータ・パイプライン機能(DBMS_CLOUD_PIPELINE)を試してみた(データ・ロード編)
[OCI]Autonomous DatabaseからAmazon S3にARNを用いたロールベースの認証でアクセスしてデータ連携してみた

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?