【BigQuery】全角半角変換もこれで簡単!NORMALIZE関数の使い方について

20230822_BigQuery クラウドとインフラ

文字が全角・半角バラバラでデータベースに登録していませんか?

全角・半角が統一されていないとDISTINCTGROUP BYを使ってもレコードが一意になりませんよね。文字を検索しても2レコード表示されてしまいます。

BigQueryであればNORMALIZE関数を使うと簡単に全角から半角に直すことができます

今回は全角を半角に直すNORMALIZE関数について紹介します。

NORMALIZE関数について

NORMALIZE関数は文字列を正規化するための関数です。
正規化するためのオプションが4つあります。

オプション名正式名称意訳
NFCNormalization Form Canonical Composition対象の文字と同等な文字で正規化する
NFKCNormalization Form Compatibility Composition対象の文字と互換性ある文字で正規化する
NFD
Normalization Form Canonical Decomposition
対象の文字と同等な文字で正規化し、複数の結合文字は指定する順番で組み立てる
NFKDNormalization Form Compatibility Decomposition対象の文字と互換性ある文字で正規化し、複数の結合文字は指定する順番で組み立てる
NORMALIZE Description|Google Cloud BigQuery

結構難しい英語を使っていたのが意味が通じそうなレベルまで意訳してみました。
基本的には同じような文字で正規化するか互換性がある文字で正規化するか2通りみたいですね。

詳しくは意味や使い方はリファレンスをご確認ください。

String functions  |  BigQuery  |  Google Cloud

全角を半角にしたいときはNFKCオプションを使います。
テストデータを使って処理を確認してみましょう。

テストデータ 〜全角文字列を半角に変換する〜

ここに全角・半角が統一されていないテストデータがありました。
本来であれば3行表示されてほしいですが、GROUP BYしても6行ですね。

クリックして拡大できます

NORMALIZE関数NFKCオプションを使って半角に統一しましょう。

クリックして拡大できます
SELECT
  NORMALIZE(menu, NFKC) AS fixed_menu
FROM
  `sql-book-384011.sample.20230822_training_menu`
GROUP BY
  fixed_menu

3行に統一できました!

カタカナは半角から全角になりアルファベットと数字は全角から半角になりましたね
カタカナも半角で統一されるのかな?と思いましたが全角で統一されると分かりました。

アルファベットと数字だけ全角から半角になるのは使いやすいですね!

まとめ

今回は全角文字列を半角に変換するNORMALIZE関数とNFKCオプションについて紹介しました。

数字とアルファベットは全角から半角に変換し、かな文字やカタカナ・漢字は全角に統一してくれるので使いやすいですね。

他にもいくつかオプションがありました。
今回は紹介しきれませんでしたまた試してみたいと思います。

全角・半角を統一する機会があれば是非NORMALIZE関数を使ってみましょう!