どうやってデータをとっているのかと疑問になり調べたところ、
主に3つのデータの取り方があるようです。
上記のような方法で取得したデータをデータベースへ保存後
BIツールでデータを分析し、可視化しているようです。
コーディングなしでフォーマットを整えてひとつのデータベースにまとめることできるのはEAIツールの強みです。
前置きが長くなってしましたが今回はデータ分析に適するDWH(データウェアハウス)サービス Amazon RedshiftへSkyOnDemandからのデータロードを行なうことができるAmazon Redshiftアダプタを紹介します。
このアダプタはAmazon RedshiftへのCOPYコマンドを自由に実行することが可能です。
自由って具体的にどういうコマンド!?
ということで今回はデータロード時に基本の構文とよく使うオプションをご紹介します。
COPYコマンド紹介
(データソースはS3を前提)
1.基本構文
基本的な構文は以下になります。
S3のCSVファイルをRedshiftにCOPYを行なうコマンドとなります。
COPY table_name FROM 's3://aws-bucket/testdata.csv' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' CSV;
■行ごとに解説します。
ⅰ COPYコマンドを使用しますので COPYとその後ろに格納するテーブル名を指定します。
ⅱ FROM 行では対象のデータソースを指定します。例ではS3のCSVファイルを指定しています。
データソースのCSVファイルの順序は指定したテーブルの定義と列を合わせる必要があります。
ⅲ FROM の後はオプションを指定します。
オプションパラメータの中で必須なCREDENTIALSを指定します。
FROMで指定したデータソースを読み取るためのクレデンシャル情報を入力します。
・シークレットアクセスキー
ⅳ データソースがCSVファイルのため、CSVオプションを指定することで
CSV形式で読み取ります。
2.よく使うオプション
コマンド |
説明
|
記述例 |
MANIFEST |
FROMにマニフェストファイルを指定します。
データファイルやソースを直接指定するとは別にマニフェストファイルを指定し、 マニフェストファイルに記載されている複数のデータソースを指定することが可能です。
マニフェストファイル例 { "entries": [ {"url":"s3://bucket-usa/datas/data.1","mandatory":true}, {"url":"s3://bucket-japan/datas/data.1","mandatory":true}, {"url":"s3://bucket-japan/datas/data.2","mandatory":false} ] }
|
COPY table_name FROM 's3://aws-bucket/manifest/copy_from_s3_manifest_file' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' MANIFEST; |
JSON |
データソースにJSONファイルの場合指定します。
また JSONPathファイルを指定します。
これはテーブルとデータソースの紐付け定義ファイルとなります。
JSONデータファイル例
{ "id": 0001, "name": [ "テラ", "スカオ"], "age": 25 } { "id": 0002, "name": [ "鈴木", "花子"], "age": 26 } { "id": 0003, "name": [ "田中", "太郎"], "age": 27 } JSONPathファイル例
{ "jsonpaths": [ $['id'], $['name'][0], $['name'][1], $['age'] ] } |
COPY table_name
FROM 's3://aws-bucket/file.json' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' JSON 's3://aws-bucket/mapping/jasonpath.json'; |
FIXEDWIDTH |
データソースが固定長ファイルの場合の固定長の定義を指定します。
名:長さ
列A:10、列B:100
|
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' FIXEDWIDTH 'id:3,name:25,city:12,state:2,seats:6'; |
DELIMITER |
データソースのデリミタ文字(区切り文字)を指定します。
|
COPY table_name |
REGION | データソースがRedshiftと別のリージョンにある場合リージョンを指定します。 |
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' REGION 'us-east-1'; |
ENCRYPTED |
データソースが暗号化されている場合に指定します。
暗号化のマスターキーはクレデンシャルで指定します。 |
COPY table_name
FROM 's3://aws-bucket/symmetricdata.csv' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY;master_symmetric_key=ZZZ' ENCRYPTED; |
ENCODING |
データソースのエンコードを指定します。
デフォルトはUTF-8です。 |
COPY table_name
FROM 's3://aws-bucket/utf-16_file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' ENCODING 'utf-16'; |
GZIP またはLZOP |
データソースがgzipファイルまたはlzopファイルをロード時に解凍します。
|
COPY table_name
FROM 's3://aws-bucket/file.gzip' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' GZIP; |
MAXERROR |
データソースからロード時エラーとなる件数を指定します。
エラーデータがあっても指定した数よりエラーレコード数が少ない場合は正常終了となります。
デフォルトは0です。
※記述例の場合は9件以下の場合は正常終了となります。
|
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' MAXERROR 10; |
DATEFORMAT またはTIMEFORMAT |
データソースのDATE型、TIMESTAMP 型データのフォーマットを指定します。
|
COPY table_name
FROM 's3://aws-bucket/date.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' DATEFORMAT 'YYYY-MM-DD'; |
IGNOREHEADER | 指定された行数をヘッダーとして扱い、読み取り対象外とします。 |
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' IGNOREHEADER 1; |
IGNOREBLANKLINES | データソースの空行は読み取りません。 |
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' IGNOREBLANKLINES; |
NOLOAD | データソースのロードは行わずに、データソースの検証を行ないます。 ※データを検証したい場合にMAXERRORオプションと組み合わせて使うことで 効率よくデータチェックが行えます。 すべてデータが正常になってからロードが行うことができます。 |
COPY table_name
FROM 's3://aws-bucket/file.txt' NOLOAD MAXERROR 100; |
COMPUPDATE | 自動圧縮エンコードを自動的に適用するかどうかを制御します。 デフォルトはONです。 |
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' COMPUPDATE ON; |
STATUPDATE |
テーブルの統計を最新のものにします。
データロードごとに統計を最新のものにすることが推奨されています。
|
COPY table_name
FROM 's3://aws-bucket/file.txt' CREDENTIALS 'aws_access_key_id=XXX;aws_secret_access_key=YYY' STATUPDATE ON; |
3.エラー時の対応について
Amazon Redshiftへのデータロード時の桁数あふれまたはデータ型エラーとなった場合は通常であれば、
専用のテーブルにエラーが出力されていないかいちいち確認しないといけません。
Amazon Redshiftアダプタなら処理後エラーデータを取得しますので、
エラー時の対応も簡潔に作成可能です。