アクセス解析担当者のBigQuery日記

普段はアクセス解析やウェブ広告の運用をしています。主にBigQueryについて、記録していきます。

BigQueryでフィボナッチ数列を継ぎ足すUDFを作成する(クイズ形式)

概要

ネタがないので柔らかめな内容。興味のある方はクイズだと思って解いてみてください。

問題

ARRAYを受け取ったら、ARRAYの最後の要素と、最後から1つ前の要素を合計し、それを継ぎ足したARRAYを作るようなUDFを作ってください。UDFについてはこちらを参照。
cloud.google.com
javaScriptでUDFを書くと任意の長さのフィボナッチ数列も作成出来ますが、ほぼjavaScriptの問題になるのでそれはしない。

[1,1,2,3,5] を引数として渡されたら、3+5を計算して、[1,1,2,3,5,8] を返す。

今回のキーワード

  1. UDF
  2. ARRAYを操作する関数に慣れる

回答フォーマット

CREATE TEMP FUNCTION fib(x ARRAY<INT64>) AS (
--------------------------------
--ここにUDFを書いてください--
--------------------------------
);
SELECT
--コメントの値が帰ってくれば正解です
fib([1,1]), --[1,1,2]
fib(fib([1,1])), --[1,1,2,3]
fib(fib(fib(fib(fib([1,1]))))) --[1,1,2,3,5,8,13]

参考
cloud.google.com



回答例はページ下部にあります。

















回答例

CREATE TEMP FUNCTION fib(x ARRAY<INT64>) AS (
ARRAY_CONCAT(x,[(x[ORDINAL(ARRAY_LENGTH(x))]) +x[ORDINAL(ARRAY_LENGTH(x) - 1)]])
);
SELECT
fib([1,1]), --[1,1,2]
fib(fib([1,1])), --[1,1,2,3]
fib(fib(fib(fib(fib([1,1]))))) --[1,1,2,3,5,8,13]

以上です。