[新機能] Amazon Redshiftの「Data Lake Export」でParquet形式へのUNLOADを試してみた #reinvent

2019.12.04

DA事業本部の川崎です。

re:Invent2019の2日目のキーノートでAmazon Redshift の新機能「Data Lake Export」が発表されました。

早速試してみます。

また、AWSブログにも日本語訳の記事がアップされていますので、参考にしながら進めていきます。

Amazon Redshift の新機能 – データレイクエクスポートとフェデレーテッドクエリー | Amazon Web Services ブログ

前提条件

クラスタバージョンは、現時点での最新バージョンである1.0.11420で試しています。

データの投入

公式ブログでも利用されている、Redshiftのサンプルデータから、salesテーブルを用意して、テーブルの内容をエクスポートしてみます。

--salesテーブル作成
create table sales(
	salesid integer not null,
	listid integer not null distkey,
	sellerid integer not null,
	buyerid integer not null,
	eventid integer not null,
	dateid smallint not null sortkey,
	qtysold smallint not null,
	pricepaid decimal(8,2),
	commission decimal(8,2),
	saletime timestamp
);

続いて、Redshift用のサンプルデータが格納されたS3バケットから、先ほど作成したテーブルにCOPYします。なお、このS3バケットは「us-west-2」(米国西部 (オレゴン))にあります。

--salesテーブルにロード
copy sales from 's3://awssampledbuswest2/tickit/sales_tab.txt'
credentials 'aws_iam_role=arn:aws:iam::XXXXXXXXXXXX:role/myRedshiftRole'
delimiter '\t' timeformat 'MM/DD/YYYY HH:MI:SS' region 'us-west-2';

エクスポートしてみる

データがロードできたので、エクスポートを試してみます。

UNLOAD ('SELECT * FROM sales')
TO 's3://[MY-BUCKET]/DataLake/Sales/'
FORMAT AS PARQUET
CREDENTIALS 'aws_iam_role=arn:aws:iam::XXXXXXXXXXXX::role/myRedshiftRole';

エクスポートできました。CLIから出力されたファイルの一覧を確認します。

$ aws s3 ls s3://[MY-BUCKET]/DataLake/Sales/
2019-12-04 00:00:37    1459768 0000_part_00.parquet
2019-12-04 00:00:37    1456821 0001_part_00.parquet
2019-12-04 00:00:37    1446840 0002_part_00.parquet
2019-12-04 00:00:37    1466740 0003_part_00.parquet

続いて、S3 SELECTを使って、Parquetファイルの中身を参照してみます。

マネジメントコンソールからS3を開いて、出力先のバケット、出力先のパスを確認します。

S3 SELECTの「ファイルプレビューの表示」ボタンをクリックして、内容を確認します。

確認できました!

まとめ

これまで、Redshift上のデータをデータレイクで利用するためには、 CSVフォーマットで出力したものを利用するか、 Glueを用いてCSVをParquetに変換する必要がありました。

今後は、データレイクへの入出力が可能になり、データレイクとの親和性がより高まりました。 データレイクの構築を、より効率的に進めることができます。

データレイク構築の際に、ご利用していただけたら幸いです。