【BigQuery】BigQueryはじめまして
こんにちは。 業務にてBigQueryを用いる機会があり、学習の記録として残しています。
BigQueryとは?
BigQueryは、Google Cloud のペタバイト規模の費用対効果に優れたフルマネージド型の分析データ ウェアハウスであり、膨大な量のデータに対してほぼリアルタイムで分析を行うことができます。BigQuery には、設定や管理を必要とするインフラストラクチャが存在しないため、標準 SQL を使用し、オンデマンドと定額料金のオプション全般にわたるフレキシブルな料金モデルのメリットを活用することで、有意な分析情報を見つけることに集中できます。
( by 公式ドキュメント )
とのことですが、この文章を読んでまず押さえておこうと思ったのは「フルマネージド」で「大量のデータに対してめっちゃ早く分析できる」ということです。
また料金体系を調べてみたところ、ストレージに対してかかる料金とクエリの処理に対してかかる料金の2種類があり、クエリ料金では、実際に使用した分だけを支払うオンデマンド料金、容量を購入する定額料金のどちらかもしくはどちらも組み合わせた支払い方法があるようです。 詳しくは公式のサイトを確認してみてください。
標準SQLの関数
たくさん用意されていますが、実際に使用したものの一部を載せています。
日付関数
- DATE_TRUNC(date_expression, date_part)
- date_partに入る単位に値を切り詰める
- 値は常に丸められて、date_partの先頭の値になる
SELECT DATE_TRUNC(DATE('1982-12-19'), MONTH) AS month; -- 1982-12-01
- DATE_ADD(date_expression, INTERVAL int64_expression date_part)
- 指定した時間をDATEに追加する
- DATE_TRUNCと組み合わせて、期間の指定などに使っていた
SELECT DATE_ADD(DATE('1982-12-19'), INTERVAL 5 DAY) AS five_days_later; -- 1982-12-24 SELECT DATE_TRUNC(DATE_ADD(DATE('1982-12-19'), INTERVAL 6 MONTH), MONTH) AS six_months_later_first; -- 1983-06-01
- LAST_DAY(date_expression[, date_part])
- date_partに指定された単位の最終日を返す
- デフォルトではdate_partはMONTH
SELECT LAST_DAY(DATE('1962-07-03'), MONTH) AS last_day -- 1962-07-31 SELECT LAST_DAY(DATE('1962-07-03')) AS last_day -- 1962-07-31 SELECT LAST_DAY(DATE('1962-07-03'), YEAR) AS last_day -- 1962-12-31
数学関数
- SAFE_DIVIDE(X, Y)
- おこなう処理は除算だが、0で割った場合などエラーがあるとNULLを返す
- 式のIFNULLと組み合わせて使っていた
SELECT SAFE_DIVIDE(4 / 2) AS result -- 2 SELECT SAFE_DIVIDE(0 / 2) AS result -- 0 SELECT SAFE_DIVIDE(4 / 0) AS result -- NULL SELECT 4 / 0 AS result -- エラー
式
条件式
- IFNULL(expr, null_result)
- exprがNULLだった時に、null_resultに設定した値を返す
SELECT IFNULL(SAFE_DIVIDE(4 / 2), 0) AS result -- 2 SELECT IFNULL(SAFE_DIVIDE(0 / 2), 1) AS result -- 0 SELECT IFNULL(SAFE_DIVIDE(4 / 0), 0) AS result -- 0
使ってみた感想
最初はBigQueryってなんか難しそうだな大丈夫かな〜と思っていましたが、いざ実装をしてみるとわりと一般的なSQLと同じような感覚で記述することができました。(どちらもまだまだなので磨いていきます)
また別の関数など使用する機会があれば随時追記していきます。
参考文献
https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators?hl=ja