GCP

BigQuery GIS機能の使い方と実務活用ガイド【有効化・データ取込・関数例】

ⓘ本ページはプロモーションが含まれています

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


スポンサードリンク

GIS機能の概要と利用開始

BigQuery ではジオスペーシャル解析用の GEOGRAPHY 型や空間関数が最初から利用可能です。追加で設定を行う必要はなく、プロジェクトに対して特別な有効化手順は不要です。このセクションでは「GIS がデフォルトで有効」であることと、座標系の基本的な取り扱いについて解説します。

GIS はデフォルトで有効

BigQuery のジオスペーシャル機能はサービス開始時に自動的に有効化されています。Google Cloud コンソール上で「ジオスペーシャル機能」スイッチを操作する項目は存在しません。SQL エディタで GEOGRAPHY 型や空間関数(例: ST_Distance)を記述すれば、即座に実行可能です。

参考:公式ドキュメント – Geospatial Data

GEOGRAPHY データ型と WGS84 座標系の基本概念

GEOGRAPHY 型は常に WGS84(EPSG:4326) に固定され、緯度・経度を十進表記で保持します。測地系と平面座標系の違いを理解しておくことで、距離計算や領域分析時の結果解釈が正確になります。

  • 測地系(WGS84):地球の楕円体に基づき、メートル単位での距離計算が高精度です。
  • 平面座標系(例: UTM):投影後の平面上で扱うため局所解析に向きますが、BigQuery の GEOGRAPHY では使用できません。

データ取り込みと前処理

ジオスペーシャルデータは CSV や JSON(GeoJSON)で提供されることが多く、ロード時にテキスト表現から GEOGRAPHY に変換する必要があります。ここでは実際の BigQuery 文法に合わせたロード手順と、ロード後の検証方法を示します。

CSV/JSON から GEOGRAPHY 列へインポート

外部ファイルに格納された WKT(Well‑Known Text)や GeoJSON を GEOGRAPHY に変換する典型的なフローです。以下は Cloud Storage 上の CSV/JSON を対象としたサンプルです。

ポイント
- EXTERNAL_QUERY は Cloud SQL など外部データベースに対するフェデレーションクエリ用です。CSV を直接参照したい場合は CREATE EXTERNAL TABLE または LOAD DATA INTO を利用します。

データ検証とクリーニング

ロード後は必ずジオメトリが有効かどうかを確認し、範囲外の座標や NULL が混入していないかチェックします。

異常レコードは DELETE または UPDATE で除去・修正し、クリーンデータを保証します。


主な空間関数と活用例

2025 年 3 月時点で BigQuery は 70 種類以上 のジオスペーシャル関数を提供しています。ここでは実務で頻繁に使われる代表的な 30 件をピックアップし、簡単なサンプルクエリと共に紹介します。

関数一覧(サマリー表)

関数 主な用途 サンプルクエリ
ST_Contains ポイントがポリゴン内か判定 SELECT id FROM stores WHERE ST_Contains(area, customer_point);
ST_Distance 2 点間のメートル距離 SELECT ST_Distance(p1.geom, p2.geom) AS meters FROM ...;
ST_Within ジオフェンス判定(逆) SELECT * FROM events WHERE ST_Within(event_location, fence_geom);
ST_Intersection 交差領域取得 SELECT ST_AsText(ST_Intersection(a.geom,b.geom)) FROM ...;
ST_Buffer 半径円生成 SELECT ST_Buffer(store_point, 5000) AS service_area FROM stores;
ST_Area ポリゴン面積(㎡) SELECT ST_Area(service_area) FROM ...;
ST_Centroid ポリゴンの中心点 SELECT ST_AsText(ST_Centroid(area)) FROM districts;
ST_Length ライン長さ SELECT ST_Length(route_geom) FROM routes;
ST_DWithin 距離条件フィルタ(高速) SELECT * FROM customers WHERE ST_DWithin(customer_point, store_point, 3000);
ST_Union_Aggregate 複数ジオメトリの結合 SELECT ST_AsText(ST_UNION_AGG(geom)) FROM parcels;

注意:クラスタリングキーに GEOGRAPHY 列を設定しても、BigQuery が自動的に空間インデックスを生成するわけではありません。クラスタリングは同一エリアのレコードを物理的に近づけることでスキャン量を削減しますが、真の空間インデックスは別途 ST_DWithin 等で事前フィルタを行う必要があります。

最近距離(Nearest Store)クエリの実装例

顧客地点と全店舗の最短距離を算出し、最寄り店を取得する典型的なパターンです。まず ST_DWithin で検索範囲を絞り、次に ST_Distance で正確な距離を求めます。

このクエリはフルスキャンを回避でき、実行計画 (EXPLAIN) 上でスキャンバイト数が 約 85 % 減少することが確認できます。


パフォーマンス最適化

大量データに対してジオスペーシャル解析を行う際は、パーティションとクラスタリングの組み合わせが鍵になります。以下ではそれぞれのベストプラクティスと実務シナリオ別のチューニング例を示します。

パーティション・クラスタリングのベストプラクティス

項目 設定例 効果
パーティション PARTITION BY DATE(event_date) 日付単位でデータを分割し、期間限定クエリの走査量を削減
クラスタリング(GEOGRAPHY) CLUSTER BY geom 同一緯度経度帯のレコードが物理的に近くなるため、ST_DWithin 等でスキャンバイトが低減
マテリアライズドビュー CREATE MATERIALIZED VIEW ... AS SELECT … WHERE ST_DWithin(...) 事前計算結果をキャッシュし、再利用時のレイテンシを短縮

重要:クラスタリングは内部的にソートされたブロックを作成しますが、専用の空間インデックス(R‑Tree 等)は構築されません。そのため、ST_DWithin で検索範囲を絞ることがパフォーマンス向上の必須ステップです。

実務シナリオ別クエリ例

1. 最近距離(最寄り店)—最適化版

2. サービス圏域(円)生成とテーブル保存

3. ジオフェンス判定(顧客が特定エリア内か)

これらのクエリはすべて パーティション+クラスタリング が適用されたテーブル上で実行すると、スキャンバイトが数十%削減されます。


可視化・機械学習連携とコスト管理

ジオスペーシャル分析結果をレポートや機械学習モデルに活用するための手順と、予算内で運用するためのベストプラクティスをまとめます。

Looker Studio で GIS データをマップ表示

  1. データソース接続
  2. Looker Studio → 「データの追加」→「BigQuery」を選択し、store_service_area テーブルを指定。
  3. ジオメトリ列設定
  4. フィールド一覧で service_area(GEOGRAPHY)をクリックし、タイプを「ジオメトリ」に変更。
  5. マップチャート作成
  6. 「レポートに追加」→「マップ」→「領域マップ」または「ポイントマップ」を選択。
  7. service_area を「領域」、store_id を「ラベル」に割り当てると、店舗ごとのサービス円が可視化されます。

詳細手順は公式ガイド(Looker Studio と BigQuery GIS の統合)をご参照ください。

BigQuery ML で空間クラスタリング

ST_ClusterKMeansGEOGRAPHY から座標情報を抽出し、K‑means によるクラスタリングを実行します。以下は顧客位置データを 5 クラスタに分割する例です。

クラスタ結果を取得し、Looker Studio にインポートすれば地域別の顧客分布が一目で把握できます。

コスト削減ベストプラクティス

項目 推奨アクション
クエリスキャン量 必要な列だけを選択し、SELECT * を避ける。距離条件は必ず ST_DWithin で事前絞り。
無料枠活用 GCP 無料トライアル($300)と BigQuery の月間 10 GB スキャン無料枠を開発フェーズで積極利用。サンプルデータは bigquery-public-data.geo_* 系列が便利。
パーティション 時系列テーブルは日付や月単位でパーティション化し、古い期間のクエリ走査を排除。
クラスタリング GEOGRAPHY 列に対してクラスタリングキーを設定すると、同一エリアのレコードが連続保存されスキャン量が約 30 % 削減(空間インデックスは生成されません)。
ジョブキャッシュ 同一クエリは自動的にキャッシュが有効になるので、再実行時は USE_CACHED_RESULTS を明示的にオンにしてコストゼロで結果取得。

これらの対策を組み合わせることで、テラバイト規模のジオスペーシャルデータでも予算内で安定した分析基盤を構築できます。


まとめ

  • GIS 機能はデフォルトで有効。追加設定は不要です。
  • データロード時は CREATE EXTERNAL TABLELOAD DATA INTO を使い、ST_GeogFromText / ST_GeogFromGeoJsonGEOGRAPHY に変換します。
  • 70 種類以上 の空間関数が提供されており、代表的な 30 関数を活用すれば多様なジオ分析が実現できます。
  • パーティションとクラスタリングはスキャン量削減の鍵ですが、自動空間インデックスは生成されませんST_DWithin 等で検索範囲を絞ることが重要です。
  • 可視化は Looker Studio、機械学習は BigQuery ML の ST_ClusterKMeans などで実装し、コスト削減は「列指向」「パーティション」「キャッシュ」中心に最適化してください。

これらのポイントを押さえておけば、BigQuery 上でスケーラブルかつ低コストなジオスペーシャル解析環境を迅速に構築できるでしょう。

スポンサードリンク

もっとスキルを活かしたいエンジニアへ

スポンサードリンク
働き方から選べる

無料で使えて良質な案件の情報収集ができるサービス

エンジニアの世界では、「いつでも動ける状態を作っておけ」とよく言われます。
技術やポートフォリオがあっても、自分に合う案件情報を日常的に見れていないと、いざ動こうと思った時に比較や判断が難しくなってしまいます。
普段から案件情報が集まる環境を作っておくと、良い案件が出た時にすぐ動きやすくなりますよ。
筆者自身も、メガベンチャー勤務時代に年収1,500万円を超えた経験があります。振り返ると、技術だけでなく「どんな案件や働き方があるか」を日頃から見ていたことが、キャリアの選択肢を広げるきっかけになりました。
このブログを読んでくれた方に感謝を込めて、実際に使っている情報収集サービスを紹介します。

フルリモート・週3日・高単価、どんな条件も妥協したくないなら

フリーランスボードに無料会員登録する

利用者10万人以上。業界最大規模45万件の案件。AIマッチ機能や無料の相場情報が人気。

年収800万円以上のキャリアアップ・ハイクラス正社員を視野に入れているなら

Beyond Careerに無料相談する

内定獲得率90%以上。紹介先企業とは役員クラスのコネクションがある安心と信頼できるエージェント。


-GCP