dely Tech Blog

クラシル・TRILLを運営するdely株式会社の開発ブログです

Athena(Presto) × Redash で湯婆婆を実装してみる

f:id:ogenchang:20201126101653p:plain

こんにちは! 今年、dely株式会社に新卒入社した開発本部のGENです。

この記事は「dely #2 Advent Calendar 2020」の3日目の記事です。

「dely #1 Advent Calendar 2020」はこちら↓

昨日はisidaさんの「Swiftで1+1が何故2になるのか調べてみた」という記事でした。 swiftの加算演算子をアセンブリまで深掘りしている面白い記事です!

今回は今流行りの〇〇で湯婆婆を実装してみるの Athena(Presto) × Redash 版です。

↓こちらに記事がまとまっています。  

コード

コードの解説

湯婆婆から渡される契約書にサインする処理は Redash のパラメータで実現しています。 

var_orig_name AS (
  SELECT
    '{{ 契約書だよ。そこに名前を書きな。}}' AS orig_name
)

名前を奪う処理は、元の名前からランダムに一文字取ってくることで実現しています。

var_name_given_by_yubaba AS (
  SELECT
    SUBSTR(
      (SELECT orig_name FROM var_orig_name)
      , CAST(FLOOR(RAND() * LENGTH((SELECT orig_name FROM var_orig_name))) + 1 AS INTEGER)
      , 1
    ) AS name_given_by_yubaba
)

まず、ランダムに 0 ~ 1 の小数を返すRAND()関数と元の名前の文字数を返すLENGTH(元の名前)関数をかけ、0 ~ length(文字数)の小数を生成します。それを床関数FLOOR()で切り捨てすることで何番目の文字を取ってくるかを決定しています。Prestoの添字は1から始まるため、最後に1足してあげる処理が必要になります。

何番目の文字を取ってくるかが決まったら、次は実際に取ってくる処理です。SUBSTR()関数に元の名前、先ほどの何番目の文字を取ってくるかの数値、何文字取ってくるか(今回、湯婆婆は一文字残してすべて奪ってしまうので 1)を入れてあげます。 以上の処理で、名前を奪う(= 元の名前から一文字だけ抽出する)処理が完成します。

おまけ

Redash は HTML を出力に適用することができるので、サインしたときの名前と名前を奪われた後の新しい名前をそれぞれ青と赤にしました。

実行結果

f:id:ogenchang:20201125175202p:plain

さいごに

明日はen.さんの「マジで助かった、新卒1年目デザイナーの教科書的noteや便利なサービス8選」です。 就活生の役にもたちそうな記事になるので、お楽しみに!

また、dely ではエンジニアを絶賛募集中です! ご興味あればこちらのリンクからお気軽にエントリーください!

社内のメンバーがテーマ毎に話すイベントもやってます!