本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
資料轉換參數
載入資料表時, 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 時, 會將每個無效 UTF-8 字元COPY取代為相等長度的字串,其中包含 replacement_char 指定的字元。例如,假設替換字元是 '
^
',則會以 '^^^
' 取代無效的三位元組字元。取代字元可以是除 以外的任何ASCII字元NULL。預設值為問號 ( ? )。 如需有關無效 UTF-8 個字元的資訊,請參閱 多位元組字元載入錯誤。
COPY 傳回包含無效 UTF-8 個字元的列數,並為每個受影響的列將項目新增至STL_REPLACEMENTS系統資料表,每個節點層最多 100 個列。其他無效 UTF-8 個字元也會被取代,但這些取代事件不會記錄下來。
如果 ACCEPTINVCHARS 未指定,則每當遇到無效的 UTF-8 字元時, 會COPY傳回錯誤。
ACCEPTINVCHARS 僅適用於 VARCHAR 欄。
- BLANKSASNULL
-
載入空白欄位,僅包含空格字元,如 NULL。此選項僅適用於 CHAR和 VARCHAR資料欄。其他資料類型的空白欄位,例如 INT一律會載入 NULL。例如,包含連續三個空格字元 (且沒有其他字元) 的字串會載入為 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 應該將空CHARVARCHAR欄位載入為 NULL。其他資料類型的空白欄位,例如 INT一律會載入 NULL。當資料包含連續兩個分隔符號,且分隔符號之間沒有字元時,就形成空欄位。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),則無論是否存在UTF16BE
,都可以使用UTF16LE
或 BOM。若要使用 ISO-8859-1 編碼,請指定
ISO88591
。如需詳細資訊,請參閱 Wikipedia 中的 ISO/IEC 8859-1。 -
- ESCAPE
-
指定此參數時,輸入資料中的反斜線字元 (
\
) 就視為逸出字元。反斜線字元後面緊接的字元即使通常做為特殊用途,一樣會載入資料表中成為目前欄值的一部分。例如,當分隔符號字元、引號、內嵌的換行符號字元或逸出字元本身是欄值的正當部分時,您可以使用此參數來逸出這些字元。如果您將 ESCAPE 參數與 REMOVEQUOTES 參數結合指定,您可以逸出並保留可能移除的引號 (
'
或"
)。預設 null 字串 (\N
) 不受影響,但也可以在輸入資料中以\\N
逸出。只要您不指定具有 NULL AS 參數的替代 null 字串,\N
並\\N
產生相同的結果。注意
控制字元
0x00
(NUL) 無法逸出,應該從輸入資料中移除或轉換。此字元被視為記錄結尾 (EOR) 標記,導致記錄的其餘部分被截斷。您無法將 ESCAPE 參數用於FIXEDWIDTH載入,也無法指定逸出字元本身;逸出字元一律為反斜線字元。您還必須確定輸入資料包含的逸出字元是在適當的位置。
以下是指定 ESCAPE 參數時輸入資料和產生的載入資料的一些範例。第 4 列的結果假設參數也REMOVEQUOTES已指定。輸入資料由縱線分隔的兩個欄位組成:
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 參數不會解譯八進位、十六進位、Unicode 或其他逸出序列符號。例如,如果您的來源資料包含八進位換行值 (
\012
),而且您嘗試使用 ESCAPE 參數載入此資料,Amazon Redshift 會將該值載入資料表012
,而不會將此值解譯為逸出的換行換行值。在源自 Microsoft Windows 平台的資料中,若要逸出新行字元,您可能需要使用兩個逸出字元:一個用於換行字元,另一個用於新行字元。或者,您可以在載入檔案之前移除換行字元 (例如,使用 dos2unix 公用程式)。
- EXPLICIT_IDS
-
如果您想要使用資料表來源資料檔案中的明確值覆寫自動產生的值,請將 EXPLICIT_IDS 與具有IDENTITY資料欄的資料表搭配使用。如果命令包含資料欄清單,則該清單必須包含資料IDENTITY欄才能使用此參數。EXPLICIT_IDS 值的資料格式必須符合CREATETABLE定義指定的IDENTITY格式。
當您使用 EXPLICIT_IDS 選項對資料表執行COPY命令時,Amazon Redshift 不會檢查資料表中IDENTITY資料欄的唯一性。
如果使用 GENERATED BY DEFAULT AS 定義資料欄IDENTITY,則可以複製該資料欄。值是利用您提供的值來產生或更新。不需要 EXPLICIT_IDS 選項。COPY 不會更新身分高浮水印。
如需使用 EXPLICIT_ 的COPY命令範例IDS,請參閱 VENUE 載入資料IDENTITY欄的明確值。
- FILLRECORD
-
當某些記錄的結尾缺少連續的欄時,允許載入資料檔案。遺失的資料欄會載入為 NULLs。對於文字和CSV格式,如果缺少的資料欄是VARCHAR資料欄,則會載入零長度字串,而不是 NULLs。若要從文字 和 NULLs載入資料VARCHAR欄CSV,請指定EMPTYASNULL關鍵字。NULL 取代只有在資料欄定義允許 時才有效NULLs。
例如,如果資料表定義包含四個 nullable 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將 null 終止器取代為NULL AS '\000'
。如果欄位包含結尾為 的字串,NUL且已指定 NULL AS,則會NUL在結尾插入結尾為 的字串。請勿在 null_string 值使用 '\n' (換行符號)。Amazon Redshift 保留 '\ n' 用作行分隔符號。預設 null_string 為'\N
'。注意
如果您嘗試將 null 載入定義為 NOT 的欄中NULL,COPY命令將會失敗。
- REMOVEQUOTES
-
在傳入的資料中移除括住字串的引號。引號內的所有字元 (包括分隔符號) 都會保留。如果字串具有起始的單引號或雙引號,但沒有對應的結束標記,則COPY命令無法載入該列並傳回錯誤。下表以一些簡單的範例示範含有引號的字串及結果載入的值。
輸入字串 使用 REMOVEQUOTES 選項載入的值 "分隔符號是縱線 (|) 字元" 分隔符號是縱線 (|) 字元 '黑色' 黑色 "白色" 白色 藍色' 藍色' 藍色' 不會載入值:錯誤情況 "藍色 不會載入值:錯誤情況 ' ' '黑色' ' ' ' '黑色' ' ' ' <white space> - ROUNDEC
-
當輸入值的小數位數超過欄的小數位數時,將數值四捨五入。根據預設, COPY 會在必要時截斷值以符合資料欄的規模。例如,如果
20.259
將 值載入 DECIMAL(8,2) 資料欄,20.25
預設會將值截斷為 COPY 。如果指定 ROUNDEC , 會將 值COPY四捨五入為20.26
。INSERT 命令一律會在必要時四捨五入值,以符合資料欄的規模,因此具有 ROUNDEC 參數的COPY命令的行為與INSERT命令相同。 - TIMEFORMAT 【AS】 {'timeformat_string ' | 'auto' | 'epochsecs' | 'epochmillisecs' }
-
指定時間格式。如果未指定TIMEFORMAT任何 ,則預設格式為
YYYY-MM-DD HH:MI:SS
資料TIMESTAMP欄或YYYY-MM-DD HH:MI:SSOF
資料TIMESTAMPTZ欄,其中OF
是國際標準時間 (UTC) 的偏移。timeformat_string 中不可包含時區指標。若要載入與預設格式不同的TIMESTAMPTZ資料,請指定「自動」;如需詳細資訊,請參閱 搭配 DATEFORMAT和 使用自動辨識 TIMEFORMAT。如需 timeformat_string 的相關資訊,請參閱 DATEFORMAT 和 TIMEFORMAT字串。'auto'
引數會識別使用 DATEFORMAT和 TIMEFORMAT字串時不支援的數種格式。如果 COPY 命令無法辨識日期或時間值的格式,或者您的日期和時間值使用彼此不同的格式,請使用'auto'
引數搭配 DATEFORMAT或 TIMEFORMAT 參數。如需詳細資訊,請參閱搭配 DATEFORMAT和 使用自動辨識 TIMEFORMAT。如果您的來源資料表示為 epoch 時間,則表示自 1970 年 1 月 1 日起的秒數或毫秒數,請UTC指定
'epochsecs'
或'epochmillisecs'
。'auto'
、'epochsecs'
和'epochmillisecs'
關鍵字區分大小寫。AS 關鍵字為選用。
- TRIMBLANKS
-
從VARCHAR字串中移除尾端空白字元。此參數僅適用於具有VARCHAR資料類型的資料欄。
- TRUNCATECOLUMNS
-
將欄的資料截斷為適當的字元數,以符合欄規格。僅適用於 VARCHAR或 CHAR 資料類型的資料欄,以及大小為 4 MB 或以下的資料列。