Amazon Redshift 新たにカラムナファイルフォーマット(Parquet、ORC)からのデータロードに対応しました
はじめに
Amazon Redshift は、新たにカラムナファイルフォーマットであるParquetとORCからデータロードが可能になりました。クラスタバージョン1.0.2369
は、本日東京リージョンで利用可能になりましたので早速検証してみます。
データのロードの例
Parquet 形式のデータはformat as parquet
、ORC 形式のデータはformat as orc
とオプション指定します。下記は、Parquet 形式のデータの例です。
copy listing from 's3://mybucket/data/listings/parquet/' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' format as parquet;
データのロード
では、実際にParquet、ORCのファイルをロードしてみます。データはAWSが公開しているサンプルデータファイルを用いて検証します。
Parquet 形式の列指向データを使用したデータのロード
cmdb=# CREATE TABLE elb_parquet( cmdb(# request_timestamp varchar(128), cmdb(# elb_name varchar(128), cmdb(# request_ip varchar(128), cmdb(# request_port int, cmdb(# backend_ip varchar(128), cmdb(# backend_port int, cmdb(# request_processing_time double precision, cmdb(# backend_processing_time double precision, cmdb(# client_response_time double precision, cmdb(# elb_response_code varchar(128), cmdb(# backend_response_code varchar(128), cmdb(# received_bytes bigint, cmdb(# sent_bytes bigint, cmdb(# request_verb varchar(128), cmdb(# url varchar(128), cmdb(# protocol varchar(128), cmdb(# user_agent varchar(1024), cmdb(# ssl_cipher varchar(128), cmdb(# ssl_protocol varchar(128) cmdb(# ) cmdb-# DISTSTYLE EVEN cmdb-# SORTKEY (request_timestamp); CREATE TABLE Time: 176.370 ms cmdb=# copy elb_parquet cmdb-# from 's3://athena-examples-ap-northeast-1/elb/parquet/year=2015/month=1/day=1' cmdb-# iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' cmdb-# format as parquet; INFO: Load into table 'elb_parquet' completed, 10491958 record(s) loaded successfully. COPY Time: 73480.061 ms cmdb=# select count(*) from elb_parquet; -[ RECORD 1 ]--- count | 10491958 Time: 2662.041 ms cmdb=# select * from elb_parquet limit 1; -[ RECORD 1 ]-----------+---------------------------------------------------------------------------------------------------------------- request_timestamp | 2015-01-01T00:00:00.022719Z elb_name | elb_demo_005 request_ip | 244.218.91.244 request_port | 2255 backend_ip | 172.36.231.239 backend_port | 443 request_processing_time | 0.000878 backend_processing_time | 0.000803 client_response_time | 0.000891 elb_response_code | 200 backend_response_code | 200 received_bytes | 0 sent_bytes | 1886 request_verb | GET url | https://www.example.com/jobs/376 protocol | HTTP/1.1 user_agent | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36" ssl_cipher | DHE-RSA-AES128-SHA ssl_protocol | TLSv1.2 Time: 3205.028 ms
ORC 形式の列指向データを使用したデータのロード
cmdb=# CREATE TABLE elb_orc( cmdb(# request_timestamp varchar(128), cmdb(# elb_name varchar(128), cmdb(# request_ip varchar(128), cmdb(# request_port int, cmdb(# backend_ip varchar(128), cmdb(# backend_port int, cmdb(# request_processing_time double precision, cmdb(# backend_processing_time double precision, cmdb(# client_response_time double precision, cmdb(# elb_response_code varchar(128), cmdb(# backend_response_code varchar(128), cmdb(# received_bytes bigint, cmdb(# sent_bytes bigint, cmdb(# request_verb varchar(128), cmdb(# url varchar(128), cmdb(# protocol varchar(128), cmdb(# user_agent varchar(1024), cmdb(# ssl_cipher varchar(128), cmdb(# ssl_protocol varchar(128) cmdb(# ) cmdb-# DISTSTYLE EVEN cmdb-# SORTKEY (request_timestamp); CREATE TABLE Time: 170.317 ms cmdb=# copy elb_orc cmdb-# from 's3://athena-examples-ap-northeast-1/elb/orc/year=2015/month=01/day=01' cmdb-# iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' cmdb-# format as orc; INFO: Load into table 'elb_orc' completed, 198313 record(s) loaded successfully. COPY Time: 3420.535 ms cmdb=# select count(*) from elb_orc; -[ RECORD 1 ]- count | 198313 Time: 12.709 ms cmdb=# select * from elb_orc limit 1; -[ RECORD 1 ]-----------+------------------------------------------------------------------------------------------------------------------------ request_timestamp | 2015-01-01T00:00:00.902953Z elb_name | elb_demo_007 request_ip | 248.114.157.51 request_port | 22272 backend_ip | 172.46.130.226 backend_port | 8888 request_processing_time | 0.000653 backend_processing_time | 0.000953 client_response_time | 0.000761 elb_response_code | 200 backend_response_code | 200 received_bytes | 0 sent_bytes | 2922 request_verb | GET url | https://www.example.com/images/536 protocol | HTTP/1.1 user_agent | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50" ssl_cipher | DHE-RSA-AES128-SHA ssl_protocol | TLSv1.2 Time: 11.873 ms
最後に
Aamazon Redshiftは、2大カラムナファイルフォーマットである Parquet と ORCのロードをサポートしました。これらはデータの読み取りサイズを最適化し、データレイクのデータソースとして最も理想的なフォーマットのファイルです。カラムナファイルフォーマットは本来であればエスケープしなければならない文字列の取扱もシンプルになります。
これまでは、Redshiftのロード用途にはCSVファイルなどのデータを用意し、Redshift Spectrum/Athena用途にはカラムナファイルフォーマットを別に用意する必要がありました。今後はデータレイク用のカラムナファイルフォーマットのファイルに統一するという選択肢が増えたと言えるでしょう。