カテゴリー : Amazon Web Services

[Amazon Redshift] TEXT 型は VARCHAR(256) に変換される

Amazon Redshift でサイズの大きい文字列を扱いたい場合 TEXT 型を使うべきではなさそうです。

公式ドキュメント によると TEXT 型は VARCHAR(256) に変換されるそうなので、MySQL や PostgreSQL の感覚で使ってしまうと想定していたよりも短い文字列しか扱えなかったということになってしまいそうです。

TEXT 型

TEXT 列を使用して Amazon Redshift テーブルを作成できますが、この列は最大 256 文字の可変長値を受け入れる VARCHAR(256) 列に変換されます。

僕は Redshift に保存するデータが log だった場合、そこそこサイズが長くなりそうだけど正確には分からない column は VARCHAR(1024) で追加しています。

Note

CREATE TABLE 構文では、文字データ型の MAX キーワードをサポートします。以下に例を示します。

CREATE TABLE test(col1 VARCHAR(MAX));

MAX 設定は列幅を定義します。CHAR の場合は 4096 バイトであり、VARCHAR の場合は 65535 となります。

MAX も使えるみたいですが、ほとんどの場合 65535 byte も使わないんじゃないでしょうか。

この記事で伝えたかったことは、「思い込みで TEXT 型を使おうとするのではなく、ちゃんと公式ドキュメントを読みましょう」ということでした。

[AWS] aws s3 sync ./upload_dir s3://xxx –region ap-northeast-1

aws-cli で command line 上から S3 へファイルアップロードしようとしたところエラーが発生しました。

% aws s3 sync ./upload_dir s3://backetname

エラーメッセージ

A client error (PermanentRedirect) occurred when calling the ListObjects operation:
The bucket you are attempting to access must be addressed using the specified endpoint.
Please send all future requests to this endpoint.

デフォルト設定で region を設定しておらず、オプションでも未指定だったのが原因でした。

aws s3 sync ./upload_dir s3://backetname --region ap-northeast-1

–region ap-northeast-1 とか使ってる S3 のリージョンを指定することでアップロードできました。