BigQueryにはUDFという、ユーザ定義関数を実行することができます
また、StandardSQLでは外部jsをインクルードできるようになりました
今回、jsの統計ライブラリであるjstatsを読み込んで、BigQueryで統計量の計算をすることにしました
手順
- jstat.jsをGoogle Cloud Storageにアップする
- 以下のクエリをBigQueryで実行する
twoSidedDifferenceOfProportions
jStat.fn.twoSidedDifferenceOfProportions(.5, 134, .51, 101);
=> 0.879357522092445
CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 FLOAT64, p2 FLOAT64, n2 FLOAT64)
RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);
SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)
=> 0.879357522092445
注意
以下のように最初FLOAT64の箇所をINT64としていて、数字が全く違うものが返ってきていました。
型はしっかり確認して利用しましょう。
CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 INT64, p2 FLOAT64, n2 INT64)
RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);
SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)CREATE TEMPORARY FUNCTION twoSidedDifferenceOfProportions(p1 FLOAT64, n1 INT64, p2 FLOAT64, n2 INT64)
RETURNS FLOAT64
LANGUAGE js AS """
return jStat.fn.twoSidedDifferenceOfProportions( p1, n1, p2, n2);
"""
OPTIONS (
library="gs://#{project_name}/jstat.js"
);
SELECT
twoSidedDifferenceOfProportions(0.5, 134, 0.51, 101)
=> 0.0106513479995477