データ変換パラメータ - Amazon Redshift

データ変換パラメータ

テーブルをロードする際に、COPY は暗黙的にソースデータの文字列をターゲット列のデータ型に変換しようとします。デフォルトの動作とは異なる変換を指定する必要がある場合、またはデフォルトの変換がエラーになった場合、次のパラメータを指定してデータ変換を管理できます。これらのパラメータの構文に関する詳細については、「COPY 構文」を参照してください。

データ変換パラメータ
ACCEPTANYDATE

00/00/00 00:00:00 などの無効な形式を含め、任意の日付形式をエラーなしにロードできるようにします。このパラメータは TIMESTAMP 列および DATE 列にのみ適用されます。ACCEPTANYDATE は常に DATEFORMAT パラメータと共に使用します。データの日付形式が DATEFORMAT の仕様と一致しない場合、Amazon Redshift はそのフィールドに NULL 値を挿入します。

ACCEPTINVCHARS [AS] ['replacement_char']

データに無効な UTF-8 文字がある場合でも、VARCHAR 列へのデータのロードを有効にします。ACCEPTINVCHARS を指定した場合、COPY は replacement_char で指定されている文字列から構成される同じ長さの文字列で、無効な各 UTF-8 文字を置き換えます。たとえば、置換文字が '^' である場合、無効な 3 バイト文字は '^^^' で置き換えられます。

置換文字には NULL 以外の任意の ASCII 文字を使用できます。デフォルトは疑問符 (?) です。無効な UTF-8 文字の詳細については、「マルチバイト文字のロードエラー」を参照してください。

COPY は無効な UTF-8 文字を含んだ行の数を返し、対象行ごとに STL_REPLACEMENTS システムテーブルにエントリを追加します (各ノードスライスで最大 100 行まで)。さらに多くの無効な UTF-8 文字も置き換えられますが、それらの置換イベントは記録されません。

ACCEPTINVCHARS を指定しなかった場合、無効な UTF-8 文字があるごとに、COPY はエラーを返します。

ACCEPTINVCHARS は VARCHAR 列に対してのみ有効です。

BLANKSASNULL

NULL など、空白文字のみから構成される空のフィールドをロードします。このオプションは CHAR と VARCHAR の列にのみ適用されます。INT など、他のデータ型の空のフィールドは常に NULL でロードされます。例えば、3 つの連続するスペース文字を含む (それ以外の文字はない) 文字列は NULL としてロードされます。このオプションなしのデフォルト動作では、スペース文字をそのままロードします。

DATEFORMAT [AS] {'dateformat_string' | 'auto' }

DATEFORMAT を指定しない場合、デフォルト形式は 'YYYY-MM-DD' です。たとえば、有効な代替形式は 'MM-DD-YYYY' です。

COPY コマンドが日付値または時刻値の形式を認識しない場合、または日付値または時刻値で異なる形式が使用されている場合は、'auto'引数を DATEFORMAT または TIMEFORMAT パラメータとともに使用します。'auto' 引数は、DATEFORMAT および TIMEFORMAT 文字列を使用する場合にサポートされない形式を認識します。'auto' キーワードでは大文字小文字を区別します。詳細については、「DATEFORMAT と TIMEFORMAT で自動認識を使用する」を参照してください。

日付形式には時間情報 (時、分、秒) を含めることができますが、この情報は無視されます。AS キーワードはオプションです。詳細については、「 DATEFORMAT と TIMEFORMAT の文字列」を参照してください。

EMPTYASNULL

Amazon Redshift で CHAR と VARCHAR の空のフィールドを NULL としてロードすることを指定します。INT など、他のデータ型の空のフィールドは常に NULL でロードされます。データに 2 つの区切り記号が連続し、区切り記号の間に文字がない場合、空のフィールドになります。EMPTYASNULL と NULL AS '' (空の文字列) は同じ動作を生成します。

ENCODING [AS] file_encoding

ロードデータのエンコードタイプを指定します。COPY コマンドは、ロード時にデータを指定されたエンコードから UTF-8 に変換します。

file_encoding の有効な値は次のとおりです。

  • UTF8

  • UTF16

  • UTF16LE

  • UTF16BE

  • ISO88591

デフォルト: UTF8

ソースファイル名には UTF-8 エンコードを使用する必要があります。

ロードデータに別のエンコードが指定されている場合でも、以下のファイルには UTF-8 エンコードを使用する必要があります。

  • マニフェストファイル

  • JSONPaths ファイル

次のパラメータを使用して指定される引数文字列には UTF-8 を使用する必要があります。

  • FIXEDWIDTH 'fixedwidth_spec'

  • ACCEPTINVCHARS 'replacement_char'

  • DATEFORMAT 'dateformat_string'

  • TIMEFORMAT 'timeformat_string'

  • NULL AS 'null_string'

固定幅データファイルは UTF-8 エンコーディングを使用する必要があります。フィールド幅はバイト数ではなく、文字数をベースにしています。

すべてのロードデータには、指定されたエンコードを使用する必要があります。COPY が別のエンコードを検出した場合、ファイルがスキップされてエラーが返されます。

UTF16 を指定した場合、データにはバイトオーダーマーク (BOM) が必要です。UTF-16 データがリトルエンディアン (LE) であるかビッグエンディアン (BE) であるかがわかっている場合、BOM があるかどうかに関係なく UTF16LE または UTF16BE を使用できます。

ISO-8859-1 エンコーディングを使用するには、ISO88591 を指定します。詳細については、Wikipedia の「ISO/IEC 8859-1」を参照してください。

ESCAPE

このパラメータを指定した場合、入力データのバックスラッシュ文字 (\) はエスケープ文字として扱われます。バックスラッシュ文字の直後に続く文字は、通常は特定の目的に使用される文字である場合でも、現在の列の値の一部としてテーブルにロードされます。例えば、区切り文字、引用符、埋め込まれた改行文字、またはエスケープ文字自体のいずれかが正当な列の値として含まれている場合、このパラメータを使用してその文字をエスケープできます。

REMOVEQUOTES パラメータと組み合わせて ESCAPE パラメータを使用すると、他の場合には削除される引用符 (' または ") をエスケープし保持することができます。デフォルトの null 文字列 \N はそのまま使用できますが、入力データで \\N としてエスケープすることもできます。NULL AS パラメータで代替 null 文字列を指定しない限り、\N\\N は同じ結果になります。

注記

制御文字 0x00 (NUL) はエスケープできません。入力データから削除するか変換してください。この文字はレコードの終わり (EOR) マーカーとして扱われ、レコードの残りの部分は切り捨てられます。

FIXEDWIDTH ロードに対して ESCAPE パラメータを使用することはできません。また、エスケープ文字自体を指定することはできません。エスケープ文字は常にバックスラッシュ文字です。また、入力データの適切な場所にエスケープ文字が含まれていることを確認する必要があります。

次に、ESCAPE パラメータを指定する場合の入力データおよびその結果、ロードされるデータの例を示します。行 4 の結果は、REMOVEQUOTES パラメータも指定されていることを想定しています。入力データはパイプで区切られたフィールド 2 つで構成されます。

1|The quick brown fox\[newline] jumped over the lazy dog. 2| A\\B\\C 3| A \| B \| C 4| 'A Midsummer Night\'s Dream'

データは列 2 に次にようにロードされます。

The quick brown fox jumped over the lazy dog. A\B\C A|B|C A Midsummer Night's Dream
注記

ロード用の入力データにエスケープ文字を適用する作業はユーザーが担当します。ただし、ESCAPE パラメータを使用して以前アンロードされたデータを再ロードした場合は例外となります。この場合、データにはすでに必要なエスケープ文字が含まれています。

ESCAPE パラメータでは 8 進数、16 進数、Unicode、またはその他のエスケープシーケンス表記を解釈しません。例えば、ソースデータに 8 進数のラインフィード値 (\012) があり、ESCAPE パラメータを使用してこのデータをロードしようとすると、Amazon Redshift は値 012 をテーブルにロードします。この値は、エスケープされているラインフィードとしては解釈されません。

Microsoft Windows プラットフォームからのデータの改行文字をエスケープするには、2 つのエスケープ文字の使用が必要となることがあります。1 つはキャリッジリターン用、もう 1 つはラインフィード用です。または、ファイルのロード前にキャリッジリターンを削除することができます (例えば、dos2unix utility を使用)。

EXPLICIT_IDS

自動生成される値をテーブルのソースデータファイルの明示的値でオーバーライドするには、IDENTITY 列を持つテーブルに EXPLICIT_IDS を使用します。コマンドに列リストが含まれる場合、そのリストにはこのパラメータを使用する IDENTITY 列が含まれている必要があります。EXPLICIT_IDS 値のデータ形式は、CREATE TABLE 定義で指定された IDENTITY 形式に一致する必要があります。

EXPLICIT_IDS オプションを使用してテーブルに対して COPY コマンドを実行する際、Amazon Redshift はテーブル内の IDENTITY 列の一意性をチェックしません。

列がGENERATED BY DEFAULT AS IDENTITYで定義されている場合は、コピーできます。値は、指定した値で生成または更新されます。EXPLICIT_IDS オプションは必須ではありません。COPY は IDENTITY のハイウォーターマークを更新しません。

EXPLICIT_IDS を使用する COPY コマンドの例については、「IDENTITY 列の明示的値を使用して VENUE をロードする」を参照してください。

FILLRECORD

一部のレコードの最後で連続する列が欠落している場合に、データをロードできるようにします。欠落している列は NULL としてロードされます。テキスト形式と CSV 形式では、VARCHAR 列が欠落している場合、NULL の代わりに長さ 0 の文字列がロードされます。テキストおよび CSV から VARCHAR 列に NULL をロードするには、EMPTYASNULL キーワードを指定します。NULL の置き換えは、列定義で NULL が使用できる場合にのみ可能です。

たとえば、テーブル定義に 4 つの null が許容された CHAR 列があり、レコードに値 apple, orange, banana, mango がある場合、COPY コマンドは値 apple, orange のみを含むレコードをロードし、記入できます。欠落している CHAR 値は NULL 値としてロードされます。

IGNOREBLANKLINES

データファイルでラインフィードのみ含む空白行を無視し、ロードしません。

IGNOREHEADER [ AS ] number_rows

指定された number_rows をファイルヘッダーとして扱い、ロードしません。並列ロードですべてのファイルのファイルヘッダーをスキップするには、IGNOREHEADER を使用します。

NULL AS 'null_string'

null_string に一致するフィールドを NULL としてロードします。ここで null_string は任意の文字列です。データに null ターミネータ (NUL (UTF-8 0000) またはバイナリゼロ (0x000) と呼ばれることもあります) が含まれる場合、COPY はそれを他の文字として扱います。例えば、'1' || NUL || '2' を含むレコードは長さ 3 バイトの文字列としてコピーされます。フィールドに NUL のみが含まれている場合は、NULL AS を使用して、'\0' または '\000' (例えば、NULL AS '\0' または NULL AS '\000') を指定することにより、null ターミネータを NULL に置き換えることができます。フィールドに NUL で終わる文字列が含まれており、NULL AS を指定した場合、文字列の最後に NUL が挿入されます。null_string 値に '\ n' (改行) を使用しないでください。Amazon Redshift は、行区切り文字として使用するために '\n' を予約します。デフォルトの null_string'\N' です。

注記

NOT NULL として定義された列に Null のロードを試みた場合、COPY コマンドは失敗します。

REMOVEQUOTES

入力データの文字列を囲む引用符を削除します。区切り記号を含む引用符内のすべての文字は保持されます。文字列に開始の一重または二重引用符があるが、対応する終了引用符がない場合、COPY コマンドはその行をロードできず、エラーを返します。次の表は、引用符を含む文字列とその結果、ロードされる値の簡単な例を示しています。

入力文字列 REMOVEQUOTES オプションでロードされる値
"区切り記号はパイプ (|) 文字です" 区切り記号はパイプ (|) 文字です
'黒'
"白"
青' 青'
青' 値はロードされません: エラー状態
"青 値はロードされません: エラー状態
' ' '黒' ' ' ' '黒' '
' ' <空白>
ROUNDEC

入力値の小数点以下の桁数が列の小数点以下の桁数よりも多い場合に数値を四捨五入します。COPY のデフォルト動作では、列の小数点以下の桁数に合わせて必要に応じて値が切り捨てられます。たとえば、20.259という値が DECIMAL(8,2) 列にロードされた場合、COPY はデフォルトでこの値を 20.25 に切り捨てます。ROUNDEC が指定されている場合、COPY はこの値を 20.26 に四捨五入します。INSERT コマンドでは、列の小数点以下の桁数に合わせて必要に応じて値が四捨五入されます。そのため、COPY コマンドを ROUNDEC パラメータとともに使用した場合の動作は、INSERT コマンドを実行した場合の動作と同じになります。

TIMEFORMAT [AS] {'timeformat_string' | 'auto' | 'epochsecs' | 'epochmillisecs' }

時間形式を指定します。TIMEFORMAT が指定されていない場合、デフォルトの形式は、TIMESTAMP 列では YYYY-MM-DD HH:MI:SS、TIMESTAMPTZ 列では YYYY-MM-DD HH:MI:SSOF です。OF は協定世界時 (UTC) からのオフセットです。timeformat_string には、タイムゾーン指定子を含めることができません。デフォルトの形式と異なる形式の TIMESTAMPTZ データをロードするには、「auto」を指定します。詳細については、「DATEFORMAT と TIMEFORMAT で自動認識を使用する」を参照してください。timeformat_string の詳細については、「 DATEFORMAT と TIMEFORMAT の文字列」を参照してください。

'auto' 引数は、DATEFORMAT および TIMEFORMAT 文字列を使用する場合にサポートされない形式を認識します。COPY コマンドが日付値または時刻値の形式を認識しない場合、または日付値および時刻値でそれぞれ異なる形式が使用されている場合は、'auto'引数を DATEFORMAT または TIMEFORMAT パラメータとともに使用します。詳細については、「DATEFORMAT と TIMEFORMAT で自動認識を使用する」を参照してください。

ソースデータがエポック時間 (1970 年 1 月 1 日 00:00:00 UTC からの秒数またはミリ秒数) で表されている場合、'epochsecs'または 'epochmillisecs' を指定します。

'auto''epochsecs''epochmillisecs'の各キーワードでは大文字小文字を区別します。

AS キーワードはオプションです。

TRIMBLANKS

VARCHAR 文字列から末尾の空白文字を削除します。このパラメータは VARCHAR データ型の列にのみ適用されます。

TRUNCATECOLUMNS

列の仕様に合うよう、該当する文字数で列のデータを切り捨てます。データ型が VARCHAR または CHAR の列、およびサイズが 4 MB 以下の行にのみ適用されます。