Redshiftの新しいデータ型「VARBYTE」型がサポートされました
こんにちは!DA(データアナリティクス)事業本部 サービスソリューション部の大高です。
先日、Redshiftの新しいデータ型「VARBYTE」型のサポートがアナウンスされていましたので、こちらをご紹介したいと思います。
利用可能なリージョン
すべてのリージョンで利用することができます。
VARBYTE型とは?
わたしもこれまで利用したことがなく、具体的に良いユースケースが思いつかないのですが「可変長のバイナリ文字列を格納および表現する可変長データ型」として利用できるデータ型となります。
ドキュメントに記載されているとおり、例えば文字列abc
をVARBYTE型にすると616263
となります。
select 'abc'::varbyte; varbyte --------- 616263
VARBYTE型はVARBYTE(n)
のように明示的にサイズを指定して定義することも可能で、デフォルトでは64KB、最大1MBを指定できます。つまり、VARBYTE(1)
からVARBYTE(1024000)
まで指定可能となっています。
制約事項
2021年12月現在では、ドキュメントに記載のとおり、以下の制約事項があります。
- Amazon Redshift Spectrumは、VARBYTEデータ型をサポートしていません。 したがって、VARBYTE列を使用して外部テーブルを作成または変更することはできません。
- AmazonRedshiftクエリエディターとAmazon Redshiftクエリエディターv2は、VARBYTEデータ型をまだ完全にはサポートしていません。 したがって、VARBYTE式を操作するときは、別のSQLクライアントを使用してください。
- クエリエディタを使用するための回避策として、データの長さが64KB未満でコンテンツが有効なUTF-8である場合、次のようにVARBYTE値をVARCHARにキャストできます。
select to_varbyte('6162', 'hex')::varchar;
- PythonまたはLambdaユーザー定義関数(UDF)でVARBYTEデータ型を使用することはできません。
- VARBYTE列をAmazon Redshiftテーブルのソートキーまたは分散キーとして使用することはできません。
- VARBYTE列からHLLSKETCH列を作成したり、VARBYTE列に対してAPPROXIMATE、COUNT、DISTINCT関数を使用したりすることはできません。
試してみる
実際に少し試してみました。クエリエディタで試したので、今回はターミナルで文字列を16進数にしてからクエリで元に戻してみます。
まずは16進数を以下のようなコマンドで取得します。
$ echo "classmethod" | xxd -p 636c6173736d6574686f640a $ echo "クラスメソッド" | xxd -p e382afe383a9e382b9e383a1e382bde38383e383890a
なお、最後の0a
は改行コードなので、実際には0a
を削ったものをクエリで利用します。
クエリとしては、以下のようなクエリで試してみました。
SELECT TO_VARBYTE('636c6173736d6574686f64', 'hex')::VARCHAR; to_varbyte --------- classmethod
SELECT TO_VARBYTE('e382afe383a9e382b9e383a1e382bde38383e38389', 'hex')::VARCHAR; to_varbyte --------- クラスメソッド
想定通りになりましたね!
まとめ
以上、Redshiftの新しいデータ型「VARBYTE」型の紹介でした。
re:Inventの後も新しいリリース情報が入ってきてワクワクしますね。
どなたかのお役に立てば幸いです。それでは!