はじめに
以前に本ブログ記事(OCI Autonomous Databaseチュートリアルを実践してみた~ADBインスタンス作成からローカルファイルのデータロードまで~)内にて、手元のPCからCSVデータをロードする手順を紹介させていただきました
実際の業務においては、日次や月次で生成されるファイルを定期的にデータベースへロードするような作業もあるかと思われます
Database Actions には、 フィード という機能が存在し、時間ベースでの定期実行や通知サービスと連携してのデータロード機能が存在しています
そこで本記事では、オブジェクト・ストレージに格納したCSVファイルを自動的にデータベースへロードする手法をご紹介したいと思います
前提 & 準備
- ADB は作成済みで Database Actions へアクセスできること
- ロードするデータ
- 気象庁のサイトからダウンロードできる、気象データを使用します
- 地点: 東京
- 項目: 日平均気温、日最高気温、日最低気温
- 期間: 2024年01月から2024年02月29日までの日別
上記データを月毎のデータに編集し、列は年、月、日、平均気温(℃)、日最高気温(℃)、日最低気温(℃)とします
文字コードはUTF-8としておきます(Shift_JISなど他の文字コードにも対応しております)
- Object Storage のバケット
- 気象データを格納するバケットとして
WEATHER_DATA
を用意し、1月のデータを格納しておきます
- 気象データを格納するバケットとして
- 資格証明のための認証トークン
- アイデンティティ・ドメインを使用しないIAMのドキュメントとなりますが、 認証トークンを作成するには を参考に作成しておきます
手順
1. 気象データを登録するスキーマを用意します
気象データを登録するスキーマとして、 WEATHER
を作成します
作成するユーザーには、以下のロール及びRESTの有効化が必要となります
- DWROLE ロールを付与する
- REST を有効にする
WEATHER スキーマの作成
以前の記事に記載があるため割愛させていただきます
DWROLE ロールを付与する
以前の記事に記載があるため割愛させていただきます
REST を有効化する
2. Database Actions に接続
REST を有効にすると、 Database Actions の URL が作成されるので、その URL にアクセスします
3. 気象データを登録するテーブルを作成します
以下の SQL を実行し、気象データを登録するテーブルを作成します
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE TABLE WEATHER.WEATHER_DATA ( OBSERVATION_YEAR NUMBER(4) NOT NULL, OBSERVATION_MONTH NUMBER(2) NOT NULL, OBSERVATION_DAY NUMBER(2) NOT NULL, AVERAGE_TEMPERATURE NUMBER(5,2) NOT NULL, MAX_TEMPERATURE NUMBER(5,2) NOT NULL, MIN_TEMPERATURE NUMBER(5,2) NOT NULL, FILENAME VARCHAR2(4000), UPDATED_TIMESTAMP TIMESTAMP WITH TIME ZONE, PRIMARY KEY (OBSERVATION_YEAR, OBSERVATION_MONTH, OBSERVATION_DAY) ); |
4. クラウド・ストアの作成
データ・ロードツールからオブジェクト・ストレージにアクセスするために、認証情報を登録します
a. 左上のハンバーガーメニューより、 Data Studio -> データ・ロードを選択します
- 資格証明種別: 今回はクラウドのユーザー名とパスワードを選択します
- クラウド・ストア: OCI Object Storage を対象とするため、 Oracle を選択します
- 資格証明名: 任意の名前を入力します
- Oracle Cloud Infrastructure ユーザー名: 事前準備で認証トークンを作成したユーザー名を入力します
- 認証トークン: 事前準備で作成した認証トークンを入力します
クラウド・ストアは、Oracle, Microsoft Azure, Amazon S3, Google, その他(Swift互換)が選択可能です
- 名前: 任意の名前を入力(今回はバケット名としています)
- 説明: クラウド・ストアの場所の説明を入力します
- バケットへのアクセス: 今回は資格証明を使用してアクセスするため、資格証明の選択を選び、先ほど作成した資格証明を選択します
- バケットURI: https://objectstorage.ap-tokyo-1.oraclecloud.com/n/<ネームスペース>/b/<バケット名>/o の形式で入力します
5. ライブ表・フィードの作成
クラウド・ストレージから実際のテーブルにデータをロードするための定義を作成します
a. 左上のハンバーガーメニューより、 Data Studio -> データ・ロードを選択します
- クラウド・ストアの場所: 先ほど作成したクラウド・ストアを選択します
- オブジェクト・フィルタ: 複数パターンのファイル名が混在するバケットやプレフィクスでフィルタリングしたい場合には、フィルタ条件を入力します(ワイルド・カードは使用可能)
フィルタに一致したファイルがリストアップされ、内容の一部が表示されます
内容の表示はShift_JISでは文字化けしましたので、ここで正確に確認したい場合はファイルの文字コードはUTF-8にしておくことを推奨します
- ターゲット表名: データを登録するテーブル名を入力します
- プロパティ: データ・ファイルの各種属性を設定します
- エンコーディング: AL32UTF8を選択します(デフォルト値)
- テキスト囲み: " (ダブルクォーテーション)を選択します(デフォルト値)
- フィールド・デリミタ: カンマを選択します(デフォルト値)
- 列ヘッダー行: チェックを入れ、1 を入力します(デフォルト値)
- 無効な値をNULLに変換: チェックを外します(デフォルト値)
- データ値に改行を含む: チェックを外します(デフォルト値)
- マッピング
- 含む: すべてにチェックを入れます(デフォルト値)
- ターゲット列: 事前に作成したテーブルの列名を入力します
このマッピングで、データ・ファイル中の不要な列を捨てたり、登録するカラム名を指定することができます
- ライブ表フィード名: 任意の名前を入力(今回は WEATHER_DATA_FEED としています)
- 通知に対して有効: チェックを外します(デフォルト値)
バケットへオブジェクトがアップロードされたことをトリガーとして取り込みたい場合は、チェックを入れ設定を行いますが、今回は時間ベースで設定を行うため無効とします - スケジューリングに対して有効化: チェックを入れます(デフォルト値)
- 間隔: 1分毎(分、時間、日、週から選択可能)
- 曜日: 毎日(すべての曜日、月曜から金曜、日曜から木曜、カスタムから選択可能)
- 開始日: チェックを入れ、スケジュール実行の開始時刻を入力します
チェックを外すこともできますが、自動的に作成した日時が設定されます - 終了日: チェックを入れ、スケジュール実行の終了時刻を入力します
チェックを外すことも可能で、その場合にはスケジュール実行の終了日が未設定(= 永久的に実行)となります
- コンシューマ・グループ: HIGH を選択(デフォルト値)
h. 今すぐ実行の確認
スケジュール実行の開始時刻を待たずに実行する場合は、はいをクリックします
i. 実行結果確認
31行のデータがロードされ、拒否された行は無いことが確認できます
1月のデータをロードしていますので、正常に登録できていることとなります
実際のデータからも、正常に登録されていることが確認できます
6. 2月以降のファイルをアップロード
b. スケジュール間隔が経過し、フィードが実行されたことを確認します
29行のデータがロードされ、拒否された行は無いことが確認できます
2月のデータをロードしていますので、正常に登録できていることとなります
実際のデータからも、正常に登録されていることが確認できます
まとめ
特に難しい設定などもなく、オブジェクト・ストレージに格納されているファイルをロードすることができました
CSV以外にもAVRO、JSON、GeoJSON、Parquet、ORC、TSVなどのファイル形式にも対応していますし、対応するクラウド・ストレージもAmazon S3やMicrosoft Azure Blob Storage、Google Cloud Storageなど多岐にわたります
そのため、Database Actions の Feed を用いれば、様々なプラットフォームに存在しているデータを ADW に蓄積していき、 Oracle Analytics Cloud やデータサイエンス・サービスで分析を行うなど、データ活用をより簡単に行うことが可能になるのではないでしょうか