Athena で UNION したビューを QuickSight で表示してみた

Athena で UNION したビューを QuickSight で表示してみた

2025.09.24

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 利用へのベストプラクティス

今回試す構成は以下です。

スクリーンショット 2025-09-24 11.46.50
ファイルアップロードからS3/Athena 利用へのベストプラクティス より画像を引用

やってみた

サンプルデータ準備

以下 2 つのサンプルデータを準備します。

sample_data_1.csv
			
			Name,Age,Role
Kishi,20,Consultant
Sagawa,30,Director
Nakamura,40,Auditor

		
sample_data_2.csv
			
			Name,Age,Role,salary
Shima,50,Manager,1000
Satou,60,Adviser,2000
Harada,70,Chairman,3000

		

S3 バケットを2つ作成します。
スクリーンショット 2025-09-23 11.36.43

前述のサンプルデータをそれぞれのバケットへアップロードします。
保存したパスは以下です。

			
			# バケット1
s3://devio-bucket-1/folder_hoge/sample_data_1.csv

# バケット2
s3://devio-bucket-2/folder_fuga/sample_data_2.csv

		

スクリーンショット 2025-09-23 11.47.04

スクリーンショット 2025-09-23 11.47.52

Athena テーブル作成

  • S3 バケット devio-bucket-1 についてテーブル作成
テーブル test_table_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 についてテーブル作成
テーブル test_table_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 テーブルが作成できました。
スクリーンショット 2025-09-23 12.03.10

Athena ビュー作成

以下クエリを実行し、Athena ビューを作成します。

ビュー test_view を作成
			
			CREATE VIEW test_view AS (
    SELECT Name,Age,Role FROM test_table_1
    UNION ALL
    SELECT Name,Age,Role FROM test_table_2
);

		

ビューを作成できました。
スクリーンショット 2025-09-23 12.13.12

作成したビュー test_view をクエリすると以下の通り、2つのサンプルデータを結合した結果(salary カラムは除いた)が取得できているので OK です。

			
			SELECT * FROM "default"."test_view";

		

スクリーンショット 2025-09-24 10.06.36

QuickSight 権限設定

まず、QuickSight から前述の S3 バケット(devio-bucket-1, devio-bucket-2)へアクセスできるよう権限設定をします。

「QuickSight 右上のプロフィールアイコン -> QuickSight を管理 -> セキュリティとアクセス許可」の画面に進み、以下のように「管理」を選択します。
スクリーンショット 2025-09-24 10.43.20

「S3 バケットを選択する」を選びます。
スクリーンショット 2025-09-24 10.44.47

画面上にポップアップが表示されるので、作成済みの S3 バケット(devio-bucket-1, devio-bucket-2)にチェックを入れます。
スクリーンショット 2025-09-24 10.37.05

QuickSight データセット作成

続いて、QuickSight データセット作成画面から Athena をソースとしたデータセットを作成します。
スクリーンショット 2025-09-24 11.21.20

先ほど作成した Athena ビューである test_view を選びます。
スクリーンショット 2025-09-24 11.24.52

「Visualize」を選び、分析を作成します。
スクリーンショット 2025-09-24 11.42.39

テーブルをビジュアルとして選び、表示できるか確認します。
以下の通り、Athena で UNION したデータがきちんと表示できているので、想定通りの動作になっています。
スクリーンショット 2025-09-24 11.45.22

終わりに

今回は、Athena 上でデータを UNION 結合し、それを QuickSight で表示してみました。QuickSight コンソールで UNION 処理をせずとも、S3 と QuickSight の間に Athena をかませることで、容易に UNION データを表示できることがわかりました。

なお、今回は Athena を使っていますが、過去には計算フィールドを使って擬似的に UNION をやってみた記事もありますため、適宜ご参照ください。
https://dev.classmethod.jp/articles/union-using-quicksight-calculated-fields/

QuickSight Community 記事にはたくさんの QuickSight に関する Tips があり、とても学びになります。
今後も気になった部分があれば手を動かしてやってみようと思います。

本記事がどなたかのお役に立てば幸いです。

参考情報

https://community.amazonquicksight.com/t/s3-athena-upload-a-file-to-s3-athena-best-practice-japanese/27406
https://dev.classmethod.jp/articles/union-using-quicksight-calculated-fields/

この記事をシェアする

FacebookHatena blogX

関連記事

Athena で UNION したビューを QuickSight で表示してみた | DevelopersIO