BigQuery Remote Functions
リモート関数の戻り値は変動すると常に想定されるため、リモート関数を呼び出したクエリの結果はキャッシュに保存されません。
BigQuery からの再試行を最小限に抑えるには、失敗したレスポンスに 408、429、500、503、504 以外の HTTP レスポンス コードを使用し、関数のコード内ですべての例外をキャッチします。それ以外の場合、HTTP サービス フレームワークは、キャッチされない例外に対して自動的に 500 を返します。
やってみる
適当な Cloud Functions を作る
RemoteFunctions のちょうどいい struct ないのかな
ぱっとない
ほう
何個 Calls が来るかよくわからんな
max_batching_rows
一旦指定しないとどうなるのか見てみる
code:ddl.sql
CREATE FUNCTION pokutuna-playground.gomibako.REMOTE_LEN(s STRING) RETURNS INT64
REMOTE WITH CONNECTION pokutuna-playground.asia-northeast1.remote-function-example
OPTIONS (
)
480 行ぐらいなら1回の function 実行で来る
100000行ぐらい渡してみるか
code:call_many.sql
SELECT
*,
pokutuna-playground.gomibako.REMOTE_LEN(CAST(num AS STRING)) AS len
FROM UNNEST(GENERATE_ARRAY(1, 100000)) AS num
値はちゃんと入っていそうだけど Functions 側のログがおかしくなるな
fmt で log 書いてるのが悪かろうと log でもだめだなあ
入力まるごとでかい payload で書いているからおかしいのかも
10万行入力して4回ぐらいのリクエストに分かれてやってくる
nil 返したら NULL になる?
なる
関数で並列数制限して外部 API を叩いてみる
まあできた
semaphore で並列数3ぐらい & Cloud Functions の max-instance 1 にする
スケールさせるにはデカくすればいいのだが
max_batching_rows はいいかなあ
BQ --> Functions --*--> API
制御したいのはこっちなので
max_batching_rows はなしで、逆に calls がでかすぎるときにエラー返すようにすればちょっと安全か?