📘

Amazon Athena Federated QueryでGoogle Big Queryにクエリをかける

2024/12/20に公開

はじめに

現代のデータ分析では、企業が複数のクラウドサービスやデータプラットフォームを活用することが一般的です。しかし、これらの分散したデータを統合し一元的に分析することは、非常に手間がかかる技術的な課題です。

前回のブログでは、Amazon Athena Federated Queryで、AWS内に散らばったデータソースへのクエリ/統合について解説しました。

本記事では、Amazon Athena Federated Queryを活用し、Google BigQueryに保存されたデータをAWS環境で直接クエリする方法を解説します。また、BigQueryから取得したデータとAWS内のS3に保存されたデータを統合する検証を行い、ハイブリッド環境におけるデータ分析の可能性を探ります。

Athena Federated Queryを利用することで、AWS外部のデータソースにSQLクエリを実行し、データを移動させることなく統合分析が可能となります。この技術を活用して、効率的かつ柔軟なデータ基盤構築の一助になれば幸いです。

目次

  1. Athena Federated Queryの概要と外部サービスとの連携の価値
  2. BigQueryとの連携
  3. 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外部のデータソースをクエリできることには、いくつかの重要な価値があります。

  1. データ移動の削減
    外部サービスに保存されているデータをAWSに移行せず、直接クエリを実行できるため、データ転送コストや移動にかかる時間を大幅に削減できます。
    特に、大量のデータを扱う場合や一時的な分析のニーズに応じて、迅速に結果を得られるのは大きなメリットです。

  2. ハイブリッド環境のサポート
    多くの企業では、複数のクラウドサービスを併用する「マルチクラウド戦略」を採用しています。Athena Federated Queryを利用することで、AWSを中心に据えつつ、他のクラウドサービスとのデータ連携が容易になります。
    これにより、企業は既存のクラウドサービスのメリットを活かしながら、新たな分析基盤をAWS上で構築できます。

  3. 分析の一元化
    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"
    }
  ])
}

https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/bigquery_dataset
https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/bigquery_table

上記が今回利用する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内外に分散するデータソースを移動することなく統合し、効率的なデータ分析が可能となります。

ここまで御覧いただきありがとうございました。

MEGAZONE株式会社 Tech Blog

Discussion