Amazon Athena Federated QueryでGoogle Big Queryにクエリをかける
はじめに
現代のデータ分析では、企業が複数のクラウドサービスやデータプラットフォームを活用することが一般的です。しかし、これらの分散したデータを統合し一元的に分析することは、非常に手間がかかる技術的な課題です。
前回のブログでは、Amazon Athena Federated Queryで、AWS内に散らばったデータソースへのクエリ/統合について解説しました。
本記事では、Amazon Athena Federated Queryを活用し、Google BigQueryに保存されたデータをAWS環境で直接クエリする方法を解説します。また、BigQueryから取得したデータとAWS内のS3に保存されたデータを統合する検証を行い、ハイブリッド環境におけるデータ分析の可能性を探ります。
Athena Federated Queryを利用することで、AWS外部のデータソースにSQLクエリを実行し、データを移動させることなく統合分析が可能となります。この技術を活用して、効率的かつ柔軟なデータ基盤構築の一助になれば幸いです。
目次
- Athena Federated Queryの概要と外部サービスとの連携の価値
- BigQueryとの連携
- BigQueryとS3のデータ統合
1. Athena Federated Queryの概要と外部サービスとの連携の価値
Athena Federated Queryとは
Amazon Athena Federated Queryは、AWSのサーバーレスなデータクエリサービスであるAthenaの機能を拡張し、AWS内外にある複数のデータソースに対してSQLクエリを直接実行できるようにする技術です。通常、異なるデータソースを統合して分析するには、データを移動したり、ETL処理を行う必要があります。しかし、Athena Federated Queryを利用すれば、こうしたプロセスを省略し、データが存在する場所にそのままクエリを実行できます。
Athena Federated Queryでは、データコネクタを通じて様々なデータソースにアクセスします。これにより、例えばAmazon S3に保存されたログデータ、RDSに格納されたリレーショナルデータ、さらには外部クラウドサービス(例: Google BigQuery、Google Cloud Storage)に保存されたデータを統合的にクエリすることが可能になります。
外部サービスとの連携がもたらす価値
Athena Federated Queryを用いてGoogle BigQueryやGoogle Cloud StorageのようなAWS外部のデータソースをクエリできることには、いくつかの重要な価値があります。
-
データ移動の削減
外部サービスに保存されているデータをAWSに移行せず、直接クエリを実行できるため、データ転送コストや移動にかかる時間を大幅に削減できます。
特に、大量のデータを扱う場合や一時的な分析のニーズに応じて、迅速に結果を得られるのは大きなメリットです。 -
ハイブリッド環境のサポート
多くの企業では、複数のクラウドサービスを併用する「マルチクラウド戦略」を採用しています。Athena Federated Queryを利用することで、AWSを中心に据えつつ、他のクラウドサービスとのデータ連携が容易になります。
これにより、企業は既存のクラウドサービスのメリットを活かしながら、新たな分析基盤をAWS上で構築できます。 -
分析の一元化
Athenaをハブとして、異なるデータソースを統合することで、分散したデータを一元的に管理し、統合的な分析が可能になります。これにより、従来のように複数のツールやサービスを切り替える必要がなくなり、業務効率が向上します。
例えば、Google BigQueryに保存されている顧客データとGoogle Cloud Storageに保存された売上データをAthenaでクエリすれば、AWS内のデータと組み合わせた統合分析が可能です。このように、Athena Federated Queryを利用することで、異なるクラウドサービスにまたがるデータを活用した高度なデータ分析が実現できます。
2. BigQueryとの連携
TerraformでBigQuery構築(GCP側操作)
// bq.tf
※projectには、自身のGCPプロジェクトIDを入力してください。
provider "google" {
project = "※GCPプロジェクトID"
region = "asia-northeast1"
}
resource "google_bigquery_dataset" "customer_data" {
dataset_id = "customer_dataset"
location = "asia-northeast1"
}
resource "google_bigquery_table" "customer_table" {
dataset_id = google_bigquery_dataset.customer_data.dataset_id
table_id = "customer_data"
schema = jsonencode([
{
"name" = "CustomerId"
"type" = "STRING"
"mode" = "REQUIRED"
},
{
"name" = "Name"
"type" = "STRING"
"mode" = "REQUIRED"
},
{
"name" = "Region"
"type" = "STRING"
"mode" = "NULLABLE"
},
{
"name" = "JoinDate"
"type" = "DATE"
"mode" = "NULLABLE"
}
])
}
上記が今回利用するBigQueryリソースのテンプレートです。
データ生成と挿入(GCP側操作)
bq query --use_legacy_sql=false '
INSERT INTO `[※プロジェクトID].customer_dataset.customer_data` (CustomerId, Name, Region, JoinDate)
VALUES
("C001", "Taro Yamada", "Asia", "2024-11-24"),
("C002", "Sato Daisuke", "Asia", "2022-07-20"),
("C003", "Tom Brown", "North America", "2020-02-25"),
("C004", "Alice Clerk", "Europe", "2021-05-15"),
("C005", "John Smith", "North America", "2019-06-10"),
("C006", "Hanako Tanaka", "Asia", "2023-03-12"),
("C007", "David Johnson", "Europe", "2022-01-05"),
("C008", "Sophia Williams", "South America", "2020-08-18"),
("C009", "Michael Wilson", "Oceania", "2021-09-25"),
("C010", "Olivia Taylor", "Africa", "2023-12-03");
'
上記クエリを実行し、顧客データをBigQueryに挿入します。
SELECT * FROM `xxxxxxxxxxxx.customer_dataset.customer_data`
WHERE Region = 'Asia'
LIMIT 10
GCP側で正常にクエリ結果が返ってくることを確認します。
データソース設定(AWS側操作)
Athenaコンソールにアクセスします。
サイドメニューから「Data sources and catalogs」を選択し、「Create data source」をクリック。
利用可能なデータソースリストから「Amazon Athena BigQuery Connector」を選択します。
データソース一覧から「Google Big Query」を選択。
設定は下記です。
- Data Source: GCP-Connect-bq
- Project ID: ※GCP側のプロジェクトIDを入力
- Spill location in Amazon S3: ※任意のS3バケットを指定
- Secrets: ※Secrets Managerで新しいシークレットを作成。Secret Typeで「Other type of secret」を選択し、PlaintextとしてサービスアカウントのJSONを貼る。
- Network Settings: VPC/プライベートサブネット/セキュリティグループの指定
Athenaでのクエリ(AWS側操作)
SELECT
CustomerId,
Name,
Region,
JoinDate
FROM "GCP-Connect-bq".customer_dataset.customer_data
WHERE Region = 'Asia';
無事クエリが実行できました。
3. BigQueryとS3のデータ統合
S3格納用のデータの準備 & アップロード
// sales_data.csv
TransactionId,CustomerId,Amount,TransactionDate
T001,C001,150.00,2024-12-17
T002,C002,200.00,2024-12-18
T003,C003,300.00,2024-12-19
T004,C004,120.00,2024-12-20
T005,C005,450.00,2024-12-21
T006,C006,220.00,2024-12-22
T007,C007,180.00,2024-12-23
T008,C008,320.00,2024-12-24
T009,C009,400.00,2024-12-25
T010,C010,500.00,2024-12-26
CSVファイルをS3バケットにアップロードします。
GlueデータカタログでS3をクロール
- Glueコンソールに移動して、再度メニューから「Crawlers」を選択。
- 「Create crawler」を選択
- Name: 任意のクローラー名を入力
- Data Sourceで、S3パスを指定
- ロールの新規作成と指定
- ターゲットデータベースの指定
- テーブル名の指定
上記でクローラーを作成し、実行します。
Athenaで統合クエリを実行
SELECT
c.CustomerId,
c.Name,
c.Region,
s.TransactionId,
s.Amount,
s.TransactionDate
FROM "GCP-Connect-bq".customer_dataset.customer_data AS c
JOIN "AwsDataCatalog"."xxx"."xxxxxxxxxx" AS s
ON c.CustomerId = s.CustomerId
WHERE s.Amount > 200;
おわりに
今回の記事では、Amazon Athena Federated Queryを活用して、Google BigQueryに保存されたデータをAWS環境で直接クエリする方法を解説しました。また、BigQueryのデータとAWS内のS3に保存されたデータを統合する検証を行い、ハイブリッド環境におけるデータ分析の可能性を探りました。
Athena Federated Queryを活用することで、AWS内外に分散するデータソースを移動することなく統合し、効率的なデータ分析が可能となります。
ここまで御覧いただきありがとうございました。
Discussion