Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

クエリ実行エラー予防に便利な関数3選【Sexy Tech for You #7】

データサイエンティストの阿部です。読書の秋ですね。今年読んだ教養書では『統計学を哲学する』『サピエンスの未来』の2冊が印象深いです。

さて、明日から使いたくなるデータハンドリング術を紹介する "Sexy Tech for You" の第7話を配信しました。魂を込めたクエリやシステム運用するクエリが、ゼロ徐算エラーや型変換エラーで停止してしまったことが、皆さんにもあるかと思います。

BigQueryで、そうしたエラーを乗り越えてクエリ結果を得るために、個人的に愛用している関数を紹介しました。エラーを握りつぶしていいかどうか、というのは別議論としてありますが、取り急ぎクエリ結果が必要な局面を想定しています。

動画中に記載したクエリや補足事項を本ブログに掲載しますので、少しでも皆様のお役に立てたら幸いです。

Youtube

BigQuery クエリ

NULLIF 関数:ゼロ徐算エラー対策

WITH sample AS (
  SELECT 10 AS A, 20 AS B UNION ALL
  SELECT 50,       0      UNION ALL
  SELECT 60,      60 
)

-- エラー発生
SELECT A / B FROM sample

-- エラーなし
SELECT SAFE_DIVIDE(A, B) FROM sample
SELECT A / NULLIF(B, 0) FROM sample

SAFE_* 関数:型変換エラー対策

WITH sample AS (
  SELECT "2000-01-01" AS A UNION ALL
  SELECT "2000-01-01"      UNION ALL
  SELECT "-" 
)

-- エラー発生
SELECT CAST(A AS DATE) FROM sample

-- エラーなし
SELECT SAFE_CAST(A AS DATE)FROM sample

IGNORE NULLS オプション:NULL対策

WITH sample AS (
  SELECT A / NULLIF(B,0) AS C
FROM(
  SELECT 10 AS A, 20 AS B UNION ALL
  SELECT 50,       0      UNION ALL
  SELECT 60,      60 
))

-- NULL含めて計算する
SELECT C, FIRST_VALUE(C)OVER(ORDER BY C) FROM sample

-- NULL除外して計算する
SELECT C, FIRST_VALUE(C IGNORE NULLS)OVER(ORDER BY C) FROM sample

補足

僕はよく、NULLIF関数とIFNULL関数を混同します。IGNORE NULLSの反対に、明示的にNULLを含めるRESPECT NULLSというオプションもあります。IGNOREの反対はRESPECTだったのかと勉強になりました。

以上、Moblie Tech for All のヤプリがお送りする Sexy Tech for You でした!次回またお会いしましょう。