Amazon Redshift のデータに無効な文字があります。これらはどのように削除すればよいですか。
簡単な説明
データに null 文字、ベル文字、またはエスケープ文字などの印刷不能な ASCII 文字が含まれている場合、データの取得や Amazon Simple Storage Service (Amazon S3) へのデータのアンロードで問題が発生する可能性があります。たとえば、「abc\0def」などの null ターミネータを含む文字列は、null ターミネータで切り捨てられ、データが不完全になります。
解決方法
無効な文字を削除するには、TRANSLATE 関数を使用します。次の例では、データに「abc\u0000def」が含まれています。TRANSLATE 関数は、null 文字「\u0000」を削除し、空の値に置き換えます。これにより、文字列から削除されます。
admin@testrs=# select a,translate(a,chr(0),'') from invalidstring;
a | translate
--------+-----------
abc | abcdef
abcdef | abcdef
(2 rows)
テーブル内のすべての行から指定した無効な文字を削除するには、以下の例にあるように、TRANSLATE 関数を使用して UPDATE コマンドを実行します。
admin@testrs=# select * from invalidstring;
a
--------
abc
abcdef
(2 rows)
admin@testrs=# update invalidstring set a=translate(a,chr(0),'') where a ilike '%'||chr(0)||'%';
UPDATE 1
admin@testrs=# select * from invalidstring;
a
--------
abcdef
abcdef
(2 rows)
関連情報
CHR 関数