2017-09-25〜10-01 やったことと振り返り

ソシャゲ

担当変更後のゲームをやった。 いろいろ情報を集めて10日間プレイした結果、Lvだけは全体の10%くらいの高ランク帯になっていたのでとりあえずはよかった。 ソーシャル要素がなくて育成がとても大変だったのと、まだまだ最低限の育成ができていない実感がある。

5ch

担当変更後のスレを眺めているんだけど、2chじゃなくなったので違和感がある。まぁ慣れるだろう。

BigQuery

担当変更後もBigQueryを扱うのだけど、構造が複雑なのでstandardSQLでがんばろうとしている。

JSON

複雑な要因の1つ。log生成時にschema気にしなくていいので利点もあるが、Railsのassociationが連なったものがjsonに変換されていて辛い。id/table_name_xxxsとなっていることから勝手にそうだろうなぁと思っているだけで確証はない。 standardSQLで JSON_EXTRACT 系が使えないという記事を昔に見たのだけど、どうやら今は使える。

関数と演算子  |  BigQuery のドキュメント  |  Google Cloud Platform

  • JSON_EXTRACT 系は、stringのjsonからjson_path_string_literal を用いて値を抽出する
  • 対応するkeyがないと1階層では null が返ってくる(もっと深い部分の抽出時にErrorになるかは試してない)
  • 対応するkeyは string中のkeyが "key" になっていないと対象にならないので注意
  • {"x": "str"} からx に対応する値を抽出すると "str"が抽出されるのでquoted状態になり邪魔である
  • JSON_EXTRACT_SCALAR であれば上記をnon quotedな文字列を抽出できる

UDF

UDFをJavaScriptで定義するときにJSON.parse がなぜか使えなかったので、あとで要検証。 またUDFではINT64が返せなくて辛い。SQL UDFではどうなるか試していないので、要検証 or documentを見る。 STRUCTを返すのもめんどうであるのと、UDFを使うと処理が重くなりそう。withで作った疑似テーブルでしか試していないので実テーブルで要検証。

timestamp

  • date_adddateに使えるので、timestamp_addのようにtimestamp専用関数を使う
  • ほかにもいろいろあるけど、それはそれでまとめる

array

配列の操作  |  BigQuery のドキュメント  |  Google Cloud Platform

  • postgresqlのように気軽に配列にアクセスできなかった。offset or ordinal を用いての参照が必要
  • UNNESTに慣れてJSONに含まれる配列を縦持ちにした
  • 上記をCROSS JOINと一緒に使って他のカラムを保ったまま縦持ちにすることに慣れたい
  • ARRAY_CONCAT, ARRAY_CONCAT_AGGを用いた縦→カラム化(横持ちではない)にも慣れたい

日付テーブルと日付分割テーブル

  • 前者はtable名のsuffixにyyyymmddがついてるアレ
    • standardではtable_name_* と `table suffixという特殊カラムを使っていろいろできる
    • legacyのfrom句で使っていたのをよく見るけど、対応はdocumentに詳しく書いてあるので大丈夫そう
  • 日付分割はpartitionを利用。データを入れるときに注意する必要があることもdocumentに詳しく書いてあるので大丈夫そう

運用でいろいろ変わりそう、というのが感想。クエリ叩く側としては、どちらになっているかを意識して金を溶かさないようにする。

yukicoder

level1.5は他の参考書を見て学んだ後に身についたかのテストとしてやるのがよいと思ったので保留。やはり解説がついているatcoderはすごい。 ということでlevel1.0をひたすら解いて頭の体操をしていた。

  • 繰り下がり/上がり系に弱いときがある
  • 文字列系に弱く、indexをうまく使わずに無理やりparseしているときがある

だいたいはすぐに解法浮かんで次に進めるのでcommit logが雑になっている。上記の浮かばなかったときのcommit logをきちんと残しておきたい。

まとめ

なんか特にない