處理錯誤表
操作場景
當資料匯入發生錯誤時,請根據本文指引資訊進行處理。
查詢錯誤資訊
資料匯入過程中發生的錯誤,一般分為資料格式錯誤和非資料格式錯誤。
-
資料格式錯誤
在建立外表時,透過設定引數“LOG INTO error_table_name”,將資料匯入過程中出現的資料格式錯誤資訊寫入指定的錯誤資訊表error_table_name中。您可以透過以下SQL,查詢詳細錯誤資訊。
openGauss=# SELECT * FROM error_table_name;
錯誤資訊表結構如表1所示。
表 1 錯誤資訊表
列名稱
|
型別
|
描述
|
nodeid
|
integer
|
報錯節點編號。
|
begintime
|
timestamp with time zone
|
出現資料格式錯誤的時間。
|
filename
|
character varying
|
出現資料格式錯誤的資料來源檔名。
|
rownum
|
numeric
|
在資料來源檔案中,出現資料格式錯誤的行號。
|
rawrecord
|
text
|
在資料來源檔案中,出現資料格式錯誤的原始記錄。
|
detail
|
text
|
詳細錯誤資訊。
|
-
非資料格式錯誤
對於非資料格式錯誤,一旦發生將導致整個資料匯入失敗。您可以根據執行資料匯入過程中,介面提示的錯誤資訊,幫助定位問題,處理錯誤表。
處理資料匯入錯誤
根據獲取的錯誤資訊,請對照下表,處理資料匯入錯誤。
表 2 處理資料匯入錯誤
錯誤資訊
|
原因
|
解決辦法
|
missing data for column "r_reason_desc"
|
- 資料來源檔案中的列數比外表定義的列數少。
- 對於TEXT格式的資料來源檔案,由於跳脫字元(\)導致delimiter(分隔符)錯位或者quote(引號字元)錯位造成的錯誤。
示例:目標表存在3列欄位,匯入的資料如下所示。由於存在跳脫字元“\”,分隔符“|”被轉義為第二個欄位的欄位值,導致第三個欄位值缺失。
BE|Belgium\|1
|
- 由於列數少導致的報錯,選擇下列辦法解決:
- 在資料來源檔案中,增加列“r_reason_desc”的欄位值。
- 在建立外表時,將引數“fill_missing_fields”設定為“on”。即當匯入過程中,若資料來源檔案中一行資料的最後一個欄位缺失,則把最後一個欄位的值設定為NULL,不報錯。
- 對由於跳脫字元導致的錯誤,需檢查報錯的行中是否含有跳脫字元(\)。若存在,建議在建立外表時,將引數“noescaping”(是否不對'\'和後面的字元進行轉義)設定為true。
|
extra data after last expected column
|
資料來源檔案中的列數比外表定義的列數多。
|
- 在資料來源檔案中,刪除多餘的欄位值。
- 在建立外表時,將引數“ignore_extra_data”設定為“on”。即在匯入過程中,若資料來源檔案比外表定義的列數多,則忽略行尾多出來的列。
|
invalid input syntax for type numeric: "a"
|
資料型別錯誤。
|
在資料來源檔案中,修改輸入欄位的資料型別。根據此錯誤資訊,請將輸入的資料型別修改為numeric。
|
null value in column "staff_id" violates not-null constraint
|
非空約束。
|
在資料來源檔案中,增加非空欄位資訊。根據此錯誤資訊,請增加“staff_id”列的值。
|
duplicate key value violates unique constraint "reg_id_pk"
|
唯一約束。
|
|
value too long for type character varying(16)
|
欄位值長度超過限制。
|
在資料來源檔案中,修改欄位值長度。根據此錯誤資訊,欄位值長度限制為VARCHAR2(16)。
|
詳情檢視:https://opengauss.org
詳情檢視:https://docs-opengauss.osinfra.cn