8
  • 列を持つ .csv テーブル (t1) があります: Amazon S3 ストレージに c1、c2、c3
  • それをAmazon redshiftにコピーしたい
  • すべての列がnull可能であるc1、c2、c3の列を持つテーブルを作成します
  • コマンドでコピーします:

    t1 から t1a (c1,c3) をコピー

  • t1 から c1 と c3 をコピーし、デフォルトの null 値を c2 に配置して、t1a の行が (c1_rowX, null, c3_rowX) のようになると予想しました。

  • 代わりに、t1 の c2 (文字列型) データを t1a の c3 (int 型) にコピーしているため、型エラーが発生します。

  • 列を指定しないと、コピー コマンドは正常に機能します。

    t1からt1aをコピー

  • redshift copy コマンド ドキュメントへのリンクを含めました。

http://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html

  • 主な質問は、列の指定の使用に問題があるということです。ありがとう
4

2 に答える 2

12

前処理部分をスキップしたい場合は、スキップする列を定義してから、コマンドにパラメーターをCHAR(1)使用できます。TRUNCATECOLUMNSCOPY

CREATE TABLE t1a (
  c1,
  c2 CHAR(1),
  c3
);
COPY t1a FROM t1 TRUNCATECOLUMNS

TRUNCATECOLUMNSは、インポート中にテーブル スキーマで定義されているよりも長いすべてのデータを無視するため、その列のすべてのデータは 1 文字に切り捨てられます。

これは単なるハックです。入力ファイルの前処理が推奨されますが、ハックだけで十分な場合もあります。

于 2013-06-12T08:56:38.400 に答える