Amazon Redshift:文字のバイト数を算出できる「OCTET_LENGTH」関数が使えるようになりました

2017.09.13

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

小ネタです。

Amazon Redshiftの文字列のサイズを求める方法としてバイト数を計算するPythonのUDFを作成して利用する方法を下記エントリで紹介していましたが、

Amazon Redshiftの純正関数としてOCTET_LENGTH関数が使えるようになっていました。リファレンスページは以下となります。

まずはLEN関数で任意の文字列を計算してみましょう。こちらの関数は「文字数」を算出するものとなっています。半角文字も全角文字も絵文字も「1文字」で計算されています。

# SELECT LEN('sushi');
 len 
-----
   5
(1 row)

# SELECT LEN('寿司');
 len 
-----
   2
(1 row)

# SELECT LEN('?');
 len 
-----
   1
(1 row)

OCTET_LENGTH関数で上記と同じ文字列に対して実行してみます。半角文字は1文字1バイト、全角文字は1文字3バイト(日本語の場合)、絵文字は1文字4バイトとして計算されている事が確認出来ました。

# SELECT OCTET_LENGTH('sushi');
 octet_length 
--------------
            5
(1 row)

# SELECT OCTET_LENGTH('寿司');
 octet_length 
--------------
            6
(1 row)

# SELECT OCTET_LENGTH('?');
 octet_length 
--------------
            4
(1 row)

Amazon Redshiftではテーブルの文字列項目の桁数は必要以上に余分なスペースを取り過ぎないように、というベストプラクティスがあります。こちらの関数を使う事でよりスムーズ且つシンプルに文字列のサイズを確認する事が出来るようになりましたので上手く活用していきたいですね。