yu/logs/*

技術メモ など

BigQuery(GoogleSQL)でπを扱いたい

題の通りです。

BigQuery は、GoogleSQL とレガシー SQL の 2 つの SQL 言語をサポートしています。*1

とのことなのですが、GoogleSQLの方だとPI()が実装されていないようで、円周率を使った計算で少し手間取ったためメモを残します。

PIを代替する方法

ACOS(-1) を使用する

cos π = -1なので、両辺に逆関数をかけてπ = arccos(-1)ということみたいです。(多分)

一応確認

#standardSQL, #legacySQLのいずれかを先頭行に付与すると切り替えられるようなので*2、PI()とACOS(-1)をそれぞれ確認してみます。

レガシーSQL

レガシーSQL

標準SQL(GoogleSQL)

標準SQL(エラー)

標準SQL

少なくともレガシーSQLでPI()を使用した時と同等の精度は出るみたいでした。

参考