Google Cloud Platform

BigQuery GIS による天文データのクエリ

QueryTheStars
多くの組織は、アナリティクスや販売数、業績評価指標などのデータで満たされた大規模なデータ ウェアハウスを運用しています。ただ、データはこうしたものに限られるわけではなく、たとえば星でいっぱいの夜空というような自然界も膨大なデータセットの供給源です。BigQuery GIS は、もともとは地球上の地理空間データを利用するユーザーのニーズに応えるために設計されたものですが、その球面座標系と組み込みの変換関数は、球面座標を使用するもう 1 つの分野、天文学にも非常に適しています。

BigQuery が天文データセットの分析に適した優れたプラットフォームである理由は次のとおりです。
  • BigQuery はオンライン分析(OLAP)向けに作られており、非トランザクショナルな膨大なデータセットの処理に最適化されています。毎年という周期(プロジェクトによって異なります)で発行される天文カタログの操作の大半は、これに当てはまります。
  • BigQuery は、BigQuery GIS を使った球面幾何学でのクエリをサポートします。天球上にオブジェクトを配置するには球面幾何学が必要です。
  • BigQuery GIS は専用のデータベース プラットフォームとほぼ同じスピードで天文データのクエリを実行できるほか、フルテーブル スキャンに使用すると、もっと高速になることがあります。

探求すべき天文データが足りなくなることはありません。たとえば、カタログ データは望遠鏡による観測結果を巨大なテーブルにまとめたものです。大規模なカタログ データセットのなかには数十億もの天体のさまざまな観測値を集めたものがあり、一部のデータセットには数時間とか数年といったスパンの観測値も含まれています。

人工衛星に搭載された望遠鏡である WISE や Gaia は、高解像度のイメージ データを地球に送ってきます。地上に新しく設置される巨大望遠鏡の LSST もまもなく稼働します。LSST は、観測データのカタログを 10 年間にわたって公開することが義務づけられています。この投稿記事の後半では、この種のカタログ データを BigQuery GIS で処理する方法を探ります。

天球座標系の基礎

BigQuery による天文カタログ データのクエリ例を示す前に、GIS のニーズをサポートするため BigQuery GIS に実装されている幅広い関数群について簡単に説明しましょう。

少しの間、地球を見下ろしてみる

地球は球体ですが、地球上の位置が GPS(全地球測位システム)で簡単に得られる緯度と経度の 2 次元情報で表現されることについて考えてみましょう。GPS は「緯度と経度」の座標であなたの位置を特定し、あなたが行きたい場所に案内してくれます。

移動距離を知りたいとしましょう。高校で習った幾何学を覚えている方なら、ピタゴラスの定理で移動距離を計算できると考えるかもしれません。近距離であればうまくいきそうな気がしますが、距離が長くなると話がややこしくなります。

移動距離を計算するには、出発点と目的地の緯度および経度をユークリッド平面上のデカルト座標に変換し、角度をメートルまたはマイルに変換する必要があります。ところが、ユークリッド距離は平面幾何学の問題ですが、あいにく地球の表面は平面ではなく球面なのでピタゴラスの定理は使えません。数学的な問題の大半は古代ギリシャやイスラムの数学者たちが 1000 年前に解決していますが、この変換が大変なことは今でも変わりありません。

幸いなことに、BigQuery GIS はこの種の計算を実行できる Google の S2 Geometry ライブラリを利用しており、上記の複雑な幾何学計算を単純な標準 SQL で実行できます。地球上の地点間の距離だけでなく、領域やポリゴンなどを使った複雑な計算にも対応可能です。BigQuery GIS は非常に強力で、非常に使いやすいものなのです。

再び天空に向かって

地球表面の幾何学を理解したところで、もう一度星空を見上げてみましょう。BigQuery GIS は、地球上の物体の移動とまったく同じ基本概念に沿って天体の移動を追跡します。つまり、夜空における星の位置を指定するときには、地球上の物体の位置を指定する場合と同じように、緯度経度のような座標を割り当てます。宇宙空間内での星の位置は、この座標によって正確に指し示すことができます。

とはいえ、宇宙空間は球体ではありません。宇宙は、恒星、銀河、ブラックホール、惑星、クエーサー、パルサー、星雲などが、文字どおり完全かつ 3 次元的に無限に広がっている空間です。それらは何光年も離れたところに散らばっており、地球上の自宅から最寄りの Google オフィスへの行き方を GPS で調べるのとはまったく異なります。

面白いのはここからです。上で挙げた天体は非常に遠いところにあるため、私たち人間は、近くにある天体と遠くにある天体を簡単に区別することができません。夜空を見上げたときの星のように、地球を中心とする大きな黒い球体の表面で光る点のようなものです。この投稿では天文学の歴史に深入りするつもりはありませんが、科学史に詳しい方であれば、古代ギリシャの科学者、そして彼らの知的後継者が天体を記述するときのモデルはまさにこのようなものだったことを思い出されるでしょう。興味のある方には Thomas S Kuhn の著書『The Structure of Scientific Revolutions』(科学革命の構造)をお勧めします。

天空に戻りましょう。夜空とすべての天体が、地球を中心とする大きな球と区別がつかないなら、天体に緯度経度を与えるという先ほどの提案も合理的に見えてきます。実際、天文学者はそうしています。彼らの座標は赤経(ra)および赤緯(dec)と呼ばれ、緯度や経度と同じように機能します。赤経は、時分秒を使った古い記法で表現されることがあります。

を見てみましょう。ベガ(映画『コンタクト』で有名な星)は、赤経 18h 36m 56s、赤緯 +38° 47′ 1″ にあります。幸いなことに、現代の天文学データは、地理学データと同様に度を単位とする小数表現で座標を格納しており、その最近の記法によれば、ベガの赤緯(+39°)は米国カンザスシティの緯度(北緯 39 度)と同じです。これは、カンザスシティでは毎日 1 回ずつベガが真上に見えるということです(夜であればの話ですが)。赤経が歴史的に 24 時間記法で表現されてきたのは、明らかにこの自転に由来します。
celestial_coordinate_system
ご覧のように、天文学では空を見上げるのに対して、地理学では地面を見下ろすという違いはあるものの、天球座標系と地理座標系はよく似ています。

そこで、地球上の物体の位置を示すために緯度経度を使用するのと同じように、天球上の天体の位置を示すために ra と dec の球面座標を使用することは、有効な方法として確立されています(緩やかな形で)。ただし、次の点に注意することが重要です。

  1. 天球は、その主旨からして真球なので、地球が少し平べったいこと(楕円体になっていること)による GIS システムの補正機能は無効にする必要があります。好都合なことに、BigQuery GIS はデフォルトで真球を使用しています。
  2. 天球の極は、地球の地理学的な極と一致します。星の位置を示す座標(ra、dec)は固定されたままです。

天文学者が実行すべきクエリにはさまざまなものがありますが、LSST の例がこちらにいくつか示されています。この投稿では WISE データでの例を示します。

例とデータセット

WISE データセットには、天体のマルチエポック(または時系列)データをまとめたテーブルが含まれています。なかでも面白い例が、食変光星である「こと座ベータ星」の光度曲線です。BigQuery AllWise データセットに含まれるこの光度曲線データにアクセスするためのクエリは次のとおりです。
  SELECT
  w1mpro_ep,
  mjd,
  load_id,
  frame_id
FROM
  `bigquery-public-data.wise_all_sky_data_release.mep_wise`
WHERE
  source_id_mf='3425p651_ac51-032187'
ORDER BY
  mjd ASC

返されたデータを Data Studio でプロットすると、次のようになります。

data studio plot
ベンチマークとして使用できる数値を得るため、私たちは天文学者が興味を持つような現実的なクエリを試してみることにしました。そして、未加工のテーブルがロードされた状態での初期テスト実行後、次に示す 4 つの重要な最適化を施しました。

  • テーブルを分割しました。
  • 天体を三角測量するレベル 7 HTM 空間インデックスキーの整数値でデータをクラスタ化しました。
  • ジオメトリ型の POINT を使用して天体の位置を事前に計算しました。
  • ST_WITHIN の代わりに ST_CONTAINS を使用して、空間のリージョンを制限し、データセットのサイズを小さくしました。


最終的なクエリは次のとおりです。このクエリは、予想される天文データ クエリのタイプに最も近いクエリのなかで代表的なものです。

  CREATE TEMP FUNCTION
  ArcSecondDistance(p1 GEOGRAPHY, p2 GEOGRAPHY,
    d FLOAT64) AS (ST_DISTANCE(p1,p2) < d * 30.8874796235);
SELECT
  source_id_mf,
  point
FROM
  `bigquery-public-data.wise_all_sky_data_release.mep_wise`
WHERE
  ArcSecondDistance(point,
    ST_GEOGPOINT(201.5, -2.6),60)
  AND ST_CONTAINS(
   ST_GEOGFROMTEXT('Polygon((201.00 -3.10,201.00 -2.10,202.00 -2.10,202.00 -3.10, 201.00 -3.10))'),point)
上記 4 つの最適化の組み合わせにより、17 TB のテーブルのクエリに要する時間の中央値は 60 秒から 4 秒に下がりました。これによって、単一の天文データソースから関連情報を迅速に取得するよう最適化されたデータベース プラットフォームに匹敵する性能が、BigQuery からも得られるようになりました。さらに、フルテーブル スキャンに関しては、BigQuery は大きく優位に立つ可能性があります。

何よりも素晴らしいのは、BigQuery GIS と天文データセットがまだ開発初期の段階にあることです。私たちはもっと多くの天文カタログを BigQuery の一般公開データセットに追加していきます。WISE データセットは、いくつか計画しているうちの最初のものに過ぎません。

BigQuery GIS の初心者は、こちらのドキュメントを読むことで、地球上の地理データを分析する方法を学べます。BigQuery を使って自然現象を記録することに興味のある方は、BigQuery GIS を使用したハリケーン進路のプロットに関するこちらの優れたチュートリアルをご覧ください。ビジネス ユースで地上の GIS データのアナリティクスを実行する方法については、ニューヨーク市でのシティ バイクの移動データに関するチュートリアルが役に立ちます。地理空間(または天文)データを使用するにあたって何か発見がありましたら、ぜひ私たちにお知らせください。

- By Ross Thomson, Cloud Solutions Architect