最近Webのコンソールでクエリを書くときに気をつけようかなと思ったことをメモしておく
- クエリにStandard SQLを使っているかLegacy SQLを使っているかを明記する
- パラメータの定数はできるだけわかりやすくまとめておく
- 何をするクエリか最初にコメントを書いておく
- WITH句を使ってできるだけ共通部分をまとめておく
クエリにStandard SQLを使っているかLegacy SQLを使っているかを明記する
クエリの1行目に#standardSQL
や#legacySQL
などと書くことでどちらの種類のSQLを使うか指定できる
これを指定しておかないとコピペして実行するときなどに、違う方で動いてエラーになったりするのでできるだけ書いておく
パラメータの定数はできるだけわかりやすくまとめておく
クエリ中に含まれる条件などの定数は後から変えたくなったりすることも多い。普通にクエリ中に書いているとどれを変えればよいかわからなくなる
また同じ定数が複数回クエリに登場するときにそれぞれをリテラルとして書いておくと一括して修正するのが大変だったり漏れが発生したりしてしまいます
以下の記事でも書いたがUDFの関数として定数を定義してしまうとわかりやすい
雑な例を書くと以下のようにパラメータの定数をUDFとして定義してコメントを書いておくとあとから見てもわかりやすいしどこを変えればよいかは一目瞭然だと思う
#standardSQL #集計の開始日 CREATE TEMPORARY FUNCTION START_DATE() AS ('20170701'); #集計の終了日 CREATE TEMPORARY FUNCTION END_DATE() AS ('20170731'); SELECT * FROM `foo.bar*` WHERE _TABLE_SUFFIX BETWEEN START_DATE() AND END_DATE()
何をするクエリか最初にコメントを書いておく
1行目にStandard SQLかLegacy SQLを書いた次の行にクエリの説明を書いておくとよいと思います
説明を書いておくとクエリの履歴の画面を見たときにわかりやすくなります
また検索でも探しやすくなります。たとえば日付を書いておけば日付で検索したりもできます
後から必要なクエリは名前をつけて保存しておけばよい話ですが、使いまわす予定のないクエリを後から使いたくなったりもするので検索しやすくなっていると便利です
WITH句を使ってできるだけ共通部分をまとめておく
共通の処理がクエリ中の複数箇所にコピペされていると修正するときに大変になるのでできるだけWITH句を使ってまとめる