資料轉換參數 - 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 時, 會將每個無效 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 或以下的資料列。