はじめに
OCI Autonomous Database(ADB)にファイルをインポートするには
いくつか方法があるかと思いますが、今回はオブジェクトストレージ上に
アップロードされた複数のファイルをDate Integrationを使って
一括インポートする方法をご紹介したいと思います。
■Data Integrationとは?
そもそもData Integrationはどのようなものなのかというとデータの
ETL(抽出、変換、ロード)プロセスを簡素化するマネージドサービスとなります。
様々なソースからデータを抽出し、必要に応じて変換して目的のデータベースや
データウェアハウスにロードする作業を効率化します。
コーディング無しでデータパイプラインを構築できるため、
比較的簡単にデータ連携することが可能です。
Data Integrationについては、基本的に以下チュートリアルを見れば
詳しく手順が書いてあるので理解できるかと思いますが、
少しボリュームが多いため、本ブログではもう少し簡素化した形で
ご紹介したいと思います。
■参考
https://oracle-japan.github.io/ocitutorials/intermediates/ocidi-tutorials/
今回検証してみる環境はローカルPCからオブジェクトストレージに
アップロードしたjsonファイルをパブリックサブネットに作成した
Data Integrationを使ってADW(Autonomous Data Warehouse)に
インポートする構成となります。
※本来ADWはVCN上のプライべートサブネットに作成するのが望ましいですが、
今回はローカルPCからアクセスできるように
「アクセス・タイプ: すべての場所からのセキュア・アクセスを許可」
としています。
■事前準備
・アカウント
Data Integration, ADW, オブジェクトストレージが使用できるOCIアカウントを準備
(ポリシーを細かく設定したい場合はチュートリアルを参考にしてください)
・ネットワークの設定
VCN、プライベートサブネットを作成しておきます。
(NAT Gateway, Service Gatewayを設定し、外部及びオラクルネットワークに
アクセスできるように構成しておきます)
ネットワークの作成方法についてはこちらを参考にします。
https://oracle-japan.github.io/ocitutorials/beginners/creating-vcn/
◆目次
1.オブジェクトストレージのバケット作成
2.jsonファイルのアップロード
3.ADWのインスタンス作成
4.スキーマ/テーブル作成
5.Data Integration設定
6.データ・フローの実行テスト
1.オブジェクトストレージのバケット作成
最初にバケットの作成をしていきます。
バケット名に任意の名前を入力して作成を選択
※ここではbucketDIという名前にしています。
バケット内に遷移すると下の方にアップロードボタンがあるので
ここからファイルをアップロード
以上でオブジェクトストレージのバケット作成は終了です。
2.jsonファイルのアップロード
続いてADWにjsonファイルをインポートするために
①~③のテストデータを準備します。
①data01.json
[
{"id": 1, "col1": "a"},
{"id": 2, "col1": "b"},
{"id": 3, "col1": "c"},
{"id": 4, "col1": "d"},
{"id": 5, "col1": "e"}
]
②data02.json
[
{"id": 6, "col1": "f"},
{"id": 7, "col1": "g"},
{"id": 8, "col1": "h"},
{"id": 9, "col1": "i"},
{"id": 10, "col1": "j"}
]
③data03.json
[
{"id": 11, "col1": "k"},
{"id": 12, "col1": "l"},
{"id": 13, "col1": "m"},
{"id": 14, "col1": "n"},
{"id": 15, "col1": "o"}
]
作成したファイルをアップロードするため、バケット内のアップロードを選択し、
「ファイルをここにドロップします」のエリアにファイルをドラッグ&ドロップし
アップロード
一覧に戻るとファイルがアップロードされていることが確認できる
以上でjsonファイルのアップロードは終了です。
3.ADWのインスタンス作成
次はjsonファイルのインポート先のADWインスタンスを作成します。
左上メニュー[Ξ]からOracle Database → Autonomous Data Warehouseを選択
表示名: adw01(任意)
データベース名: adw01(任意)
ワークロード・タイプの選択: データ・ウェアハウス
デプロイメント・タイプの選択: サーバーレス
データベース・バージョンの選択: 19c
ECPU数: 2
ストレージ(TB): 1
パスワード: *****(任意)
ネットワーク・アクセスの選択: すべての場所からのセキュア・アクセス
他の項目について特に必要ないため、
そのままAutonomous Databaseの作成を選択
正常に作成されると以下一覧にADWインスタンスが表示されるので
名前のリンクを選択
最後にADWに接続するためのウォレットを予めダウンロードしておくので
データベース接続を選択し、インスタンス・ウォレットを選択後、
ウォレットのダウンロードを実行
※この後の手順でパスワードの入力を聞かれるので任意の値を設定
以上でADWのインスタンス作成は終了です。
4.スキーマ/テーブル作成
続いてスキーマ/テーブルを作成しますので、
ADWの詳細ページからデータベース・アクションのSQLを選択
SQLが実行可能なワークシートが表示されるので
ADMINでスキーマ(diuser)を作成
・スキーマ(ユーザ)作成SQL
CREATE USER diuser IDENTIFIED BY "<パスワード>";
GRANT CREATE SESSION TO diuser;
GRANT CREATE TABLE TO diuser;
GRANT UNLIMITED TABLESPACE TO diuser;
・テーブル作成SQL
create table diuser.tblDI
(
id number(10) primary key,
col1 varchar2(50)
);
以上でスキーマ/テーブル作成は終了です。
5.Data Integration設定
ここではData Integrationの設定を説明したいと思いますが、
その前に構成がどうなっているかを図で表すと以下のような
イメージとなります。
■機能概要
・ワークスペース
Data Integration全体を管理する仮想スペース
・プロジェクト
タスク(データフロー等)の設計のまとまり
※プログラムのソースコードのようなもの
・アプリケーション
タスクの実行環境
※プログラムの実行ファイルのようなもの
・データアセット
データソース、ターゲットに対する接続ポイント
・手順の流れ
[1] ワークスペースの作成
[2] アプリケーションの作成
[3] データアセットの作成
- データソース[オブジェクトストレージ]の接続ポイント作成
- ターゲット[ADW]の接続ポイント作成
[4] プロジェクトの作成
- データフローの作成
- タスクの作成
[5] プロジェクトタスクのアプリケーションへのPublish(公開)
[1] ワークスペースの作成
左上メニュー[Ξ]からアナリティクスとAI → データ統合を選択
名前(任意)、VCN、プライベートサブネットを選択し、作成を選択
[2] アプリケーションの作成
ワークスペースが作成されると一覧の表示されるので
名前のリンクを選択
[3] データアセットの作成
- データソース[オブジェクトストレージ]の接続ポイント作成
- ターゲット[ADW]の接続ポイント作成
任意の名前をつけて、タイプがOracle Autonomous Data Warehouseに
なっていることを確認
ここではDA_ConADW01
ユーザ名 [admin] /パスワードを入力し、TNSを選択
下記の項目を入力・選択し、接続テストで問題がないことを確認して
作成を選択
オブジェクト・ストレージ・データ・アセット: 前段で設定したアセット (DA_ConOS01)
接続: デフォルト
コンパートメント: 任意
バケット: 先程設定したバケット(bucketDI)
[4] プロジェクトの作成
- データフローの作成
データ・フロー作成画面が表示されたら左のツールボックスから
ソースとターゲットのアイコンをそれぞれ中央エリアにドラッグ&ドロップ
ソースをマウスオーバーすると紐づけするための線が引っ張れるようになるので
ターゲットへドラッグ&ドロップしてリンク
リンクできたら、ソースを選択し、
下のプロパティ欄にあるデータ・アセットを選択
先程作成したオブジェクトストレージのデータ・アセット(DA_ConOS01)を選択
ここまでくるとバケットが選択できるようになるので
予めて作成しておいたバケット(bucktDI)を選択
パターン入力欄があるので今回はdataで始まるファイルを
対象するという意味で[data*]を入力し、パターンを選択
先程作成したADWのデータ・アセット(DA_ConADW01)を選択
オブジェクトストレージと同様にここまで来るとスキーマが選択可能となる
データ・エンティティは予め作成しておいたテーブル(tblDI)を選択
マップタブでカラムのマッピングができているか確認
今回はカラムが同じなので自動でマッピングされている
そこまで終わったら検証ボタンで問題がないことを確認して作成を選択
プロジェクトのデータ・フローを見ると作成されていることが確認できる
- タスクの作成
任意の名前を付けて、先ほど作成したデータ・フローを選択して作成
[5] プロジェクトタスクのアプリケーションへのPublish(公開)
タスク一覧に作成できていることが確認できるので
右端のプロパティからアプリケーションに公開を選択
以上でData Integration設定は終了です。
6.データ・フローの実行テスト
最後にjsonファイルの一括インポートを実行してみたいと思います。
di_ap01内にタスクが作成されているので右プロパティから実行
SQLで確認するとjsonファイル3つ全てがインポートされていることが確認できる
※スケジュール登録すれば定期的にタスクを実行することも可能です。
おわり
以上、Data Integrationを使って簡単にデータ連携をすることができました。