はじめに
CData Virtualityは、エンタープライズグレードのデータ仮想化プラットフォームです。データ仮想化によるリアルタイムデータアクセスとデータレプリケーションのバイモーダルによるデータ連携を提供します。本記事では、Amazon S3のバケットに格納されているCSVファイルを仮想統合して活用する手順をご紹介します。
事前準備
CData Virtualityには、インストール版とフルマネージドクラウド(SaaS)版がございます。入手および初期設定方法は以下の記事をご参照ください。
- CData Virtuality - 製品のインストール、および、初期設定方法 (Windows版)
- CData Virtuality - 無償トライアル、および、初期設定方法 (SaaS版)
Amazon S3への接続
CData Virtuality WebInterfaceにて「Connections > Source」メニューより「+New Connection」でAmazon S3への接続を追加します。
Amazon S3 への接続情報を設定する画面が開きます。
以下の項目をセットして「Connect」ボタンをクリックします。
- Datasouce name : 任意(本例では「amazonS3_cdv_test1」)
- Bucket name : Amazon S3のバケット名 (本例では「cdv-test1」)
- Region : Amazon S3のリージョン(本例ではTOKYOの「ap-northeast-1」)
- API Key : AWSユーザのアクセスキーID
- API Secret : AWSユーザのシークレットアクセスキー
※ 接続に失敗する場合は弊社テクニカルサポートにお問い合わせください。
Amazon S3への接続に成功した旨のメッセージダイアログが表示されれば成功です。「Model and Manage Your Data」内の「Go to Code Editior」ボタンをクリックしてCode Editor画面を開きます。
コードエディタからの確認
Code Editorを開き、Data Sources内に上記手順で作成したS3のデータソース(本例では「amazonS3_cdv_test1」)が追加されていることを確認します。
本データソースをクリックすると中に下記5つのストアドプロシージャがあることを確認できます。
- deleteFiles
- getFiles
- getTextFiles
- listFiles
- saveFile
各ストアドプロシージャの仕様については、Amazon S3固有ではなくファイル系コネクタ共有であり、以下の製品ドキュメントより参照可能です。
Stored Procedures Shared by All File-based Connectors
ファイルリストの取得
バケット内のファイルのリストを取得してみます。「listFiles」ストアドプロシージャを選択して右の縦三点をクリックして「Generate Statement」を選択します。
Editorに以下のSQLが生成されます。
SELECT * FROM "amazonS3_cdv_test1.getFiles"(
"pathAndPattern" => 'string' /* Optional */) result;;
まずは、バケット内の全ファイルを取得してみます。「Optional」になっている「pathAndPattern」パラメータを削除します。
SELECT * FROM "amazonS3_cdv_test1.getFiles"(
) result;;
「▶︎(Run Script)」ボタンをクリックしてSQLを実行します。バケット内のファイルをリストとして取得できることを確認します。なお、フォルダパス、および、ファイル名は「filePath」フィールドで参照することが可能です。
次にパラメータ「"pathAndPattern" => '*.csv'」を指定してCSVファイルだけを絞り込んで取得してみます。
SELECT * FROM "amazonS3_cdv_test1.getFiles"(
"pathAndPattern" => '*.csv' /* Optional */) result;;
ResultsにCSVファイルだけが絞り込まれたリストが表示されることを確認します。
CSVファイル内のレコードデータの取得
CSVファイル内のレコードデータを取得してみます。まずはじめに「getTextFiles」ストアドプロシージャを選択してGenerate Statementしてみます。以下のSQLが生成されます。「Optional」になっている「pathAndPattern」パラメータに「"pathAndPattern" => '*.csv'」を指定します。「encoding」パラメータにはCSVファイルのエンコーディング、本例では「"encoding" => 'utf-8'」を指定します。
SELECT * FROM "amazonS3_cdv_test1.getTextFiles"(
"pathAndPattern" => '*.csv' /* Optional */,
"encoding" => 'utf-8' /* Optional */) result;;
Resultsのfileフィールドで取得できた値をクリックして内容を参照してみます。
以下のようなCSVファイル内のレコードデータが取得できることを確認できます。
name,description,created_date,number
test1,test_description1,2024-12-11,1
test2,test_description2,2024-12-12,2
test3,test_description3,2024-12-13,3
次に、上記1つのCSVファイルをテーブルデータとして取得するSQLをご紹介します。
SELECT
"csv_table".*
FROM (CALL "amazonS3_cdv_test1".getFiles('testfolder1/sample1.csv')) f,
TEXTTABLE(to_chars(f.file,'utf-8')
COLUMNS
"name" STRING
, "description" STRING
, "created_date" DATE
, "number" INTEGER
ROW DELIMITER E'\n'
HEADER
)
"csv_table";;
上記SQLを解説します。まずはじめに「getFiles」でファイルデータをバイナリ(BLOB)で取得します。
CALL "amazonS3_cdv_test1".getFiles('testfolder1/sample1.csv')
取得したBLOBデータ(f.file)をTEXTTABLE関数を用いてカンマを区切り文字(DELIMITERE)にCOLUMNSのフィールドに区切っていきます。なお、フィールドの型も指定可能です。HEADERについては同CSVファイルにはヘッダー行が含まれていることを示します。
TEXTTABLE(to_chars(f.file,'utf-8')
COLUMNS
"name" STRING
, "description" STRING
, "created_date" DATE
, "number" INTEGER
ROW DELIMITER E'\n'
HEADER
TEXTTABLE関数について以下の製品ドキュメントより参照可能です。
TEXTTABLE
SQLを「▶︎(Run Script)」で実行するとCSVファイル内のデータをテーブルデータとして取得可能です。
まとめ
本記事では、Amazon S3のバケットに格納されているCSVファイルを仮想統合して活用する手順をご紹介しました。CData Virtualityはフルマネージドクラウド(SaaS)版、および、インストール版で無償トライアルを提供しています。無償トライアルを始められたい方や設定を進める中でご不明な点が出てきた際には弊社テクニカルサポートまでお問い合わせください。
関連コンテンツ