AWS CloudFormation スタックを起動して Amazon S3 内のデータにクエリを実行する
Amazon Redshift クラスターを作成してクラスターに接続したら、Redshift Spectrum DataLake の AWS CloudFormation テンプレートをインストールし、データをクエリできるようになります。
CloudFormation は、Redshift Spectrum Getting Started DataLake テンプレートをインストールし、以下を含むスタックを作成します。
Redshift クラスターに関連付けられている、
myspectrum_role
という名前のロールmyspectrum_schema
という名前の外部スキーマAmazon S3 バケット内の、
sales
という名前の外部テーブルデータがロードされた、
event
という名前の Redshift テーブル
Redshift Spectrum Getting Started DataLake で CloudFormation スタックを起動するには
[Launch CFN stack] (CFN スタックを起動する)
をクリックします。DataLake.yml テンプレートが選択された状態で、CloudFormation コンソールが開きます。 また、Redshift Spectrum Getting Started DataLake CloudFormation の CFN テンプレート
をダウンロードしてカスタマイズし、CloudFormation コンソール (https://console.aws.amazon.com/cloudformation ) を開いて、カスタマイズしたテンプレートでスタックを作成することもできます。 [Next] を選択します。
[Parameters] (パラメータ)で、Amazon Redshift クラスター名、データベース名、およびデータベースのユーザー名を入力します。
[Next] を選択します。
スタックに関するオプションが表示されます。
[Next] (次へ) をクリックして、デフォルト設定を受け入れます。
情報を確認し、[機能] で、[AWS CloudFormation によって IAM リソースが作成される場合があることを承認します] を選択します。
[スタックの作成] を選択します。
スタックの作成中にエラーが発生した場合は、以下の情報をご確認ください。
エラーの解決に役立つ情報については、CloudFormation の [Events] (イベント) タブを開きます。
オペレーションを再試行する前に DataLake の CloudFormation スタックを削除します。
Amazon Redshift データベースに接続されていることを確認します。
Amazon Redshift クラスター名、データベース名、およびデータベースのユーザー名に関する情報を、正確に入力しているか確認します。
Amazon S3 内のデータへのクエリ
他の Amazon Redshift テーブルにクエリを実行する際に使用するものと同じ SELECT ステートメントで、外部テーブルでもクエリを実行できます。これらの SELECT ステートメントクエリには、テーブルの結合、データの集計、および述語のフィルタリングが含まれます。
次のクエリは、外部テーブル myspectrum_schema.sales
内の行数を返します。
select count(*) from myspectrum_schema.sales;
count ------ 172462
外部テーブルとローカルテーブルの結合
次の例では、外部テーブル myspectrum_schema.sales
をローカルテーブルである event
と結合し、トップ 10 イベントの合計セールスを検出しています。
select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
eventid | sum --------+--------- 289 | 51846.00 7895 | 51049.00 1602 | 50301.00 851 | 49956.00 7315 | 49823.00 6471 | 47997.00 2118 | 47863.00 984 | 46780.00 7851 | 46661.00 5638 | 46280.00
クエリプランの表示
前のクエリのクエリプランを表示します。Amazon S3 のデータに対して実行された S3 Seq Scan
、S3 HashAggregate
、および S3 Query Scan
のステップをメモします。
explain select top 10 myspectrum_schema.sales.eventid, sum(myspectrum_schema.sales.pricepaid) from myspectrum_schema.sales, event where myspectrum_schema.sales.eventid = event.eventid and myspectrum_schema.sales.pricepaid > 30 group by myspectrum_schema.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)