OpenText Analytics Database 旧Vertica

技術情報サイト

Analytics Database

S3のデータをVerticaにロードする/外部テーブルを使用してS3内のデータファイルを検索する

公開日:
更新日:
データロード
#AWS

はじめに

VerticaをAWS上で利用している場合、以下のS3ダイレクト連携機能を利用することが可能です。

①S3内のデータファイルをVerticaにロードする

②外部テーブルを使用してS3内のデータファイルを検索する

事前準備

事前に以下の準備を実施します。

IAMロールの割り当て

対象のS3のバケットに対するアクセス権限を持ったIAMロールをAWS上で作成し、VerticaがインストールされているEC2インスタンスに割り当てます。

対象ファイルの配置

Verticaで利用したいファイルをS3上に配置します。
なお、VerticaのS3ダイレクト連携機能で利用可能なファイルフォーマットは以下の通りです。

・テキストデータ(.csv、.txt等)
・Parquet
・ORC

※ParquetまたはORCを外部テーブル(②の方法)で参照する場合、外部ファイルのサイズが
 課金対象となります。
 外部テーブル用のライセンスもあるため、利用を検討したい方は、本ぺージの一番下にある
 お問い合わせ先へご連絡ください。
※上記以外のファイルフォーマットを利用したい場合は、UDSourceを利用してください。

①S3内のデータファイルをVerticaにロードする

S3内に保管されているデータをCOPYコマンドを利用して、ダイレクトにVerticaにロードすることが可能です。

コマンド構文

dbadmin=> SELECT SET_CONFIG_PARAMETER('AWSRegion','S3バケットのリージョン');

dbadmin=> COPY テーブル名 FROM 's3://ロード対象ファイル' オプション;

利用例

table1にap-northeast-1リーションのS3の「/kka/parquet/table1.parq」というparquetファイルをロードする場合

dbadmin=> SELECT SET_CONFIG_PARAMETER('AWSRegion','ap-northeast-1');

dbadmin=> COPY table1 FROM 's3://kka/parquet/table1.parq' PARQUET;
 Rows Loaded
-------------
           9
(1 row)

②Verticaの外部テーブルを使用してS3内のデータファイルを検索する

S3内に保管されているデータをデータソースとする外部テーブルをVertica上に作成しておくことで、S3のデータをVerticaのSELECT文でダイレクトに検索することが可能です。

コマンド構文

dbadmin=> SELECT SET_CONFIG_PARAMETER('AWSRegion','S3バケットのリージョン');

dbadmin=> CREATE EXTERNAL TABLE テーブル名(テーブル定義)
       -> AS COPY FROM 's3://検索対象ファイル' オプション;

利用例

table1にap-northeast-1リーションのS3の「/kka/parquet/table1.parq」というparquetファイルをデータソースとする外部テーブルを作成する場合

dbadmin=> SELECT SET_CONFIG_PARAMETER('AWSRegion','ap-northeast-1');

dbadmin=> CREATE EXTERNAL TABLE table1_parquet(
       -> 日付 varchar(8),
       -> ID int,
       -> 店舗 varchar(10),
       -> エリア varchar(10),
       -> 売上 int)
       -> AS COPY FROM 's3://kka/parquet/table1.parq' PARQUET;
CREATE TABLE

dbadmin=> select * from table1_parquet;
  日付    |  ID   | 店舗   |  エリア | 売上
----------+-------+--------+--------+--------
 20130701 | 10001 | 新宿   | 東京   |    100
 20140701 | 10002 | 新宿   | 東京   |   1000
 20150702 | 10003 | 名古屋 | 名古屋 |  10000
 20130703 | 10004 | 梅田   | 大阪   |   2400
 20140703 | 10005 | 池袋   | 東京   |   1600
 20150703 | 10006 | 新宿   | 東京   |   6400
 20130705 | 10007 | 品川   | 東京   |   1000
 20140706 | 10008 | 梅田   | 大阪   |   1100
 20150706 | 10009 | 名古屋 | 名古屋 |   1300
(9 rows)

なお、以下のように「*」を利用することで指定ディレクトリ配下のすべてのファイルを検索の対象にすることが可能です。

dbadmin=> CREATE EXTERNAL TABLE table1_parquet(
       -> 日付 varchar(8),
       -> ID int,
       -> 店舗 varchar(10),
       -> エリア varchar(10),
       -> 売上 int)
       -> AS COPY FROM 's3://kka/parquet/*' PARQUET;

参考情報

Loading Data from an S3 Bucket
https://my.vertica.com/docs/9.0.x/HTML/index.htm#Authoring/Eon/LoadingDataFromS3.htm

Verticaのデータロードの基本
https://www.ashisuto.co.jp/cm/analytics-database/dataload_overview.html

検証バージョンについて

この記事の内容はVertica 9.0.2で確認しています。

更新履歴

2019/04/05 ParquetまたはORCを外部テーブルで参照する場合の課金について補足説明を追加
2018/05/02 本記事を公開