Athena で UNION したビューを QuickSight で表示してみた
QuickSight では、異なる 2 つのデータソースのデータセットを UNION で結合する方法がブログ執筆時点(2025/9)ではサポートされていません。
一方で、QuickSight Community にて Athena を用いる方法が紹介されていましたため、今回はこちらの「① Athena 上に Union したビューを作成し、QuickSight からそのビューを参照する」方法をやってみました。
以下は同サイトからの引用です。
S3 上にある異なるスキーマのファイルや、1,000を超えるファイルを連結し、同一データセットとして扱いたい場合、Athena を利用することで柔軟な指定が可能です。QuickSight コンソールでは、Union を容易に実現することができませんが、Athena を利用することで Union を使ったファイル連結が可能です。
代表的な方法として、以下 2 通りの方法を紹介します。① Athena 上に Union したビューを作成し、QuickSight からそのビューを参照する
...
② Union を QuickSight 上のカスタム SQL で実現する
今回試す構成は以下です。
ファイルアップロードからS3/Athena 利用へのベストプラクティス より画像を引用
やってみた
サンプルデータ準備
以下 2 つのサンプルデータを準備します。
Name,Age,Role
Kishi,20,Consultant
Sagawa,30,Director
Nakamura,40,Auditor
Name,Age,Role,salary
Shima,50,Manager,1000
Satou,60,Adviser,2000
Harada,70,Chairman,3000
S3 バケットを2つ作成します。
前述のサンプルデータをそれぞれのバケットへアップロードします。
保存したパスは以下です。
# バケット1
s3://devio-bucket-1/folder_hoge/sample_data_1.csv
# バケット2
s3://devio-bucket-2/folder_fuga/sample_data_2.csv
Athena テーブル作成
- S3 バケット devio-bucket-1 についてテーブル作成
CREATE EXTERNAL TABLE IF NOT EXISTS `default`.`test_table_1` (
`Name` string,
`Age` int,
`Role` string
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim' = ',')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://devio-bucket-1/'
TBLPROPERTIES (
'classification' = 'csv',
'skip.header.line.count' = '1'
);
- S3 バケット devio-bucket-2 についてテーブル作成
CREATE EXTERNAL TABLE IF NOT EXISTS `default`.`test_table_2` (
`Name` string,
`Age` int,
`Role` string,
`salary` int
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES ('field.delim' = ',')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://devio-bucket-2/'
TBLPROPERTIES (
'classification' = 'csv',
'skip.header.line.count' = '1'
);
Athena テーブルが作成できました。
Athena ビュー作成
以下クエリを実行し、Athena ビューを作成します。
CREATE VIEW test_view AS (
SELECT Name,Age,Role FROM test_table_1
UNION ALL
SELECT Name,Age,Role FROM test_table_2
);
ビューを作成できました。
作成したビュー test_view をクエリすると以下の通り、2つのサンプルデータを結合した結果(salary カラムは除いた)が取得できているので OK です。
SELECT * FROM "default"."test_view";
QuickSight 権限設定
まず、QuickSight から前述の S3 バケット(devio-bucket-1, devio-bucket-2)へアクセスできるよう権限設定をします。
「QuickSight 右上のプロフィールアイコン -> QuickSight を管理 -> セキュリティとアクセス許可」の画面に進み、以下のように「管理」を選択します。
「S3 バケットを選択する」を選びます。
画面上にポップアップが表示されるので、作成済みの S3 バケット(devio-bucket-1, devio-bucket-2)にチェックを入れます。
QuickSight データセット作成
続いて、QuickSight データセット作成画面から Athena をソースとしたデータセットを作成します。
先ほど作成した Athena ビューである test_view を選びます。
「Visualize」を選び、分析を作成します。
テーブルをビジュアルとして選び、表示できるか確認します。
以下の通り、Athena で UNION したデータがきちんと表示できているので、想定通りの動作になっています。
終わりに
今回は、Athena 上でデータを UNION 結合し、それを QuickSight で表示してみました。QuickSight コンソールで UNION 処理をせずとも、S3 と QuickSight の間に Athena をかませることで、容易に UNION データを表示できることがわかりました。
なお、今回は Athena を使っていますが、過去には計算フィールドを使って擬似的に UNION をやってみた記事もありますため、適宜ご参照ください。
QuickSight Community 記事にはたくさんの QuickSight に関する Tips があり、とても学びになります。
今後も気になった部分があれば手を動かしてやってみようと思います。
本記事がどなたかのお役に立てば幸いです。
参考情報