Contents
環境構築の概要と前提条件
このハンズオンでは、2026 年時点の Google Cloud Platform(GCP)コンソール UI をベースに手順を示します。実務でデータエンジニアリングや GIS 分析を行う担当者が、最小限の権限と設定だけでスムーズに作業を開始できるよう設計しています。
対象読者と必要な権限
本資料は データエンジニア、GIS アナリスト、データサイエンティスト、IT 部門の実務担当者 を想定しています。作業に最低限必要な IAM ロールは次の通りです。
- BigQuery Admin – テーブル作成・データロード・クエリ実行が可能
- Viewer – プロジェクト全体の設定確認や UI 操作ができる
これらは GCP コンソールの「IAM と管理」→「ロール」から対象ユーザーに付与します。権限不足の場合、API の有効化やデータロード時にエラーが発生するため、事前に担当者へ確認してください。
BigQuery API の有効化とプロジェクト設定
BigQuery を利用する第一歩は、対象プロジェクトで API を有効化し、適切な IAM ロールを付与することです。ここでは UI 操作とコマンドラインの両方を簡潔に紹介します。
手順:API の有効化
以下の手順で「BigQuery API」を有効化できます。画面構成が将来変更される可能性がありますので、公式ドキュメント(Google Cloud)も併せて確認してください。
- GCP コンソール左上の ナビゲーションメニュー をクリック
- 「APIs とサービス」→「ライブラリ」を選択
- 検索バーに BigQuery API と入力し、表示された項目を開く
- 有効化 ボタンを押して API を有効化
手順:IAM ロールの付与方法
API が有効になったら、作業ユーザーに BigQuery Admin 権限を付与します。
- コンソール左側メニューから「IAM と管理」→「IAM」を選択
- 「ロールの追加」ボタンで対象ユーザー(またはサービスアカウント)を指定し、
BigQuery > BigQuery Adminを選ぶ
以上で、コンソール上だけでデータ操作が完結できる環境が整います。
地理空間データのロード手順
GEOGRAPHY 型列を持つテーブルへ GeoJSON や CSV データをインライン変換・ストリーミングで取り込む方法を解説します。ここではスキーマ定義から実際のロード例まで一連の流れを示します。
テーブルスキーマと GEOGRAPHY 列の定義
まずはテーブル作成時に GEOGRAPHY 型列を明示的に設定します。コンソールの「テーブル作成」画面で以下のように入力してください。
| 列名 | データ型 |
|---|---|
| id | STRING |
| name | STRING |
| geom | GEOGRAPHY |
この構成により、後続の空間関数(ST_Contains など)をそのまま利用できます。
インライン変換でのデータ挿入例
SQL 文だけで GeoJSON を GEOGRAPHY に変換し、テーブルへレコードを追加するサンプルです。小規模なポイントデータの投入に便利です。
|
1 2 3 4 5 6 |
INSERT INTO `my_project.my_dataset.places` (id, name, geom) SELECT 'p01' AS id, 'Park A' AS name, ST_GeogFromGeoJson('{"type":"Point","coordinates":[139.6917,35.6895]}') AS geom; |
ストリーミングロード(bq コマンド)
大量データやバッチ処理には bq load が有効です。NEWLINE_DELIMITED_JSON 形式で GEOGRAPHY を文字列として保持します。
|
1 2 3 4 5 |
bq load \ --source_format=NEWLINE_DELIMITED_JSON \ my_project:my_dataset.places \ ./data/places.json |
places.json の各行例
|
1 2 |
{"id":"p02","name":"Lake B","geom":"{\"type\":\"Point\",\"coordinates\":[138.2529,36.2048]}"} |
この形式でロードすれば、スキーマ不一致エラーを回避しながら高速に取り込みが可能です。
基本的なクエリフローと主要空間関数
BigQuery コンソールのクエリエディタを使った基本操作手順と、代表的な地理空間関数のサンプルを紹介します。初心者でも UI に沿って実行できるよう構成しています。
クエリエディタでの操作手順
- コンソール左側メニューから「BigQuery」→「クエリエディタ」を開く
- 実行したい SELECT 文を入力(例は次節)
- 画面上部の 実行 ボタンをクリック
- 完了後に表示される 結果 タブでデータを確認し、必要なら CSV ダウンロードや別テーブルへの保存を行う
代表的空間関数とサンプルクエリ
以下は分析シナリオで頻出する関数と、その使用例です。すべて GoogleSQL 標準構文です。
| 関数 | 用途 | サンプルクエリ |
|---|---|---|
ST_Contains(geom1, geom2) |
あるジオメトリが別のジオメトリに含まれるか | SELECT name FROM my_dataset.places WHERE ST_Contains(ST_GeogFromText('POLYGON((...))'), geom); |
ST_Distance(geom1, geom2) |
2 点間の距離(メートル) | SELECT id, ST_Distance(geom, ST_GeogPoint(139.7,35.6)) AS dist_m FROM my_dataset.places ORDER BY dist_m LIMIT 5; |
ST_Union(geom_array) |
複数ジオメトリの結合(多辺形) | SELECT ST_Union(ARRAY_AGG(geom)) AS merged FROM my_dataset.parcels; |
結果はコンソール上で簡単に可視化でき、必要に応じて他サービスへエクスポートできます。
コスト最適化とトラブルシューティング
スキャン量を抑えるテーブル設計と、実務でよく遭遇するエラーの対処法をまとめます。コスト削減と障害復旧の両面から、運用効率を高めるポイントを解説します。
パーティショニングとクラスタリング活用例
GEOGRAPHY 列はクラスタリングキーとして有効です。日時でパーティションしつつ、地域情報でクラスタリングするとクエリ対象データが大幅に限定されます。
|
1 2 3 4 5 6 7 8 9 |
CREATE TABLE `my_project.my_dataset.events` ( event_id STRING, event_ts TIMESTAMP, region GEOGRAPHY, metric FLOAT64 ) PARTITION BY DATE(event_ts) -- 日付でパーティション CLUSTER BY region; -- GEOGRAPHY 列でクラスタリング |
上記テーブルに対し、特定の日付と地域だけを対象としたクエリはスキャンデータが 10 % 以下 に削減されます。
よくあるエラーと対処法
| エラー | 主な原因 | 推奨対処 |
|---|---|---|
Invalid geospatial data |
GeoJSON の座標順序が逆(lat,lon → lon,lat) | データ投入前に ST_GeogFromGeoJson で座標順序を確認・修正 |
Type mismatch: expected GEOGRAPHY but got STRING |
スキーマ定義とロードデータの型不一致 | テーブル作成時に GEOGRAPHY を明示、または bq load --schema で正確に指定 |
Access denied; user does not have permission |
必要ロールが付与されていない | IAM コンソールで BigQuery Admin または対象権限を追加 |
エラーメッセージはコンソール上部に表示されるため、指摘された項目を順に確認すれば迅速に復旧できます。
可視化と次のステップ
クエリ結果を Looker Studio に接続し、インタラクティブな地図ウィジェットで可視化する手順を示します。レポート作成の基本フローだけ把握すれば、社内共有が格段に楽になります。
Looker Studio への接続手順
- Looker Studio のホーム画面で データソースを作成 → BigQuery を選択
- プロジェクト・データセット・テーブル(クエリ結果)を指定し、接続 ボタンをクリック
- 必要に応じてカスタムフィールド(例:距離カテゴリ)を追加
この接続はネイティブで GEOGRAPHY 列を地図レイヤーとして認識します。
簡易地図レポート作成例
- レポート編集画面の チャート → マップ を選択
- データソースに先ほど作成した BigQuery 接続を指定
- ジオメトリ フィールドに GEOGRAPHY 列(例:
region)を割り当て - 色分けは「測定値」や「ディメンション」に基づく条件付き書式で設定
以上の操作だけで、地域別売上や施設配置などの空間情報が一目で把握できるダッシュボードが完成します。作成したレポートは URL 共有や埋め込みコードで社内外に配布可能です。