メモ:BigQueryで2点間の距離を計算する


この記事は

BigQueryで距離系の関数使ったのでメモです。

やりたかったこと

  • ownersというテーブルと、shopsというテーブルがそれぞれ緯度・経度を持っているとします
    • イメージは店舗の場所と、オーナー自宅の場所の距離を出す感じ
  • BigQueryで2点間の距離を取得したかったです

やり方

  • id=100のオーナーの情報を出すとしたらこんな感じです
  • パラメータがlatlngではなく、lnglatの順なのだけ注意
select
  owners.name as owner_name,
  shops.name as shop_name,
  st_distance(
    st_geogpoint(owners.longitude, owners.latitude),
    st_geogpoint(shops.longitude, shops.latitude)
  ) as distance
from
  owners inner join places on owners.id = shops.owner_id
where
  owners.id = 100

実行結果

  • こんな表になります。距離はm。
owner_name shop_name distance
山田オーナー 江戸川支店 123
山田オーナー 世田谷支店 456
山田オーナー 東京支店 789

終わりに

  • この値で集計関数で平均とか出せるので便利です
  • BQひいてはSQLってすごいな(今更)