当我们插入外部表时,出现以下错误。原因是什么?似乎意味着我们无法写入文件,但似乎权限和磁盘空间等都没有问题。
[[IBM] [CLI驱动程序] [DB2 / LINUXX8664] SQL20569N外部表由于相应的数据文件有问题,操作失败诊断文件。文件名:“ /mnt/blumeta0/home/mem/jpep/TBL_MEM_ACC.tsv
外部表的定义
CREATE EXTERNAL TABLE EXT_TBL_JPOST_ACC
(
EMPLR_ID INTEGER,
YEAR_MON_OBJ INTEGER,
JMDC_BRDG_ID BIGINT,
INSUR_PLC_NTBK_SIGN CHARACTER VARYING(30),
INSUR_PLC_NTBK_NO CHARACTER VARYING(300),
PERSON_NO CHARACTER VARYING(50),
NAME_KJ CHARACTER VARYING(300),
NAME_KN CHARACTER VARYING(300),
PTNT_BIRTH DATE,
PTNT_GENDER CHARACTER(1),
SELF_FAMY_KBN CHARACTER(1),
RELATIONSHIP_CD CHARACTER VARYING(3),
RELATIONSHIP_NM CHARACTER VARYING(45),
START_DATE DATE,
START_REASON_CD CHARACTER VARYING(3),
LOST_DATE DATE,
LOST_REASON_CD CHARACTER VARYING(3),
EMP_NO CHARACTER VARYING(300),
NK_FLG CHARACTER(1),
EST_CD1 CHARACTER VARYING(100),
EST_CD2 CHARACTER VARYING(100),
EST_CD3 CHARACTER VARYING(100),
EST_CD4 CHARACTER VARYING(100),
EST_NM1 CHARACTER VARYING(300),
EST_NM2 CHARACTER VARYING(300),
EST_NM3 CHARACTER VARYING(300),
EST_NM4 CHARACTER VARYING(300),
DEPT_CD1 CHARACTER VARYING(100),
DEPT_CD2 CHARACTER VARYING(100),
DEPT_CD3 CHARACTER VARYING(100),
DEPT_CD4 CHARACTER VARYING(100),
DEPT_NM1 CHARACTER VARYING(300),
DEPT_NM2 CHARACTER VARYING(300),
DEPT_NM3 CHARACTER VARYING(300),
DEPT_NM4 CHARACTER VARYING(300),
ZIP_CD CHARACTER VARYING(30),
ADDR1 CHARACTER VARYING(600),
ADDR2 CHARACTER VARYING(600),
ZIP_CD_SEND CHARACTER VARYING(30),
ADDR1_SEND CHARACTER VARYING(600),
ADDR2_SEND CHARACTER VARYING(600),
TEL_NO CHARACTER VARYING(50),
TEL_NO_K CHARACTER VARYING(50),
E_MAIL_ADDR CHARACTER VARYING(100),
E_MAIL_ADDR_K CHARACTER VARYING(100),
DIST_CD1 CHARACTER VARYING(300),
FILLER1 CHARACTER VARYING(900),
FILLER2 CHARACTER VARYING(300),
FILLER3 CHARACTER VARYING(300),
FILLER4 CHARACTER VARYING(300),
FILLER5 CHARACTER VARYING(300),
FILLER6 CHARACTER VARYING(300),
FILLER7 CHARACTER VARYING(300),
FILLER8 CHARACTER VARYING(300),
FILLER9 CHARACTER VARYING(300),
FILLER10 CHARACTER VARYING(300),
FILLER11 CHARACTER VARYING(300),
FILLER12 CHARACTER VARYING(300),
FILLER13 CHARACTER VARYING(300),
FILLER14 CHARACTER VARYING(300),
FILLER15 CHARACTER VARYING(300),
FILLER16 CHARACTER VARYING(300),
FILLER17 CHARACTER VARYING(300),
FILLER18 CHARACTER VARYING(300),
FILLER19 CHARACTER VARYING(300),
FILLER20 CHARACTER VARYING(300),
REG_USER CHARACTER VARYING(10),
REG_DATE TIMESTAMP,
UPD_USER CHARACTER VARYING(10),
UPD_DATE TIMESTAMP
)
USING
(
DATAOBJECT( '/mnt/blumeta0/home/mem/jpep/TBL_MEM_ACC.tsv' )
DELIMITER '9'
TIMESTYLE '24HOUR'
LOGDIR '/mnt/blumeta0/home/mem/ext_log/'
Y2BASE 2000
ENCODING 'INTERNAL'
IncludeHeader 'true'
NullValue ''
);
插入句子
INSERT INTO EXT_TBL_JPOST_ACC
(
EMPLR_ID
, YEAR_MON_OBJ
, JMDC_BRDG_ID
, INSUR_PLC_NTBK_SIGN
, INSUR_PLC_NTBK_NO
, PERSON_NO
, NAME_KJ
, NAME_KN
, PTNT_BIRTH
, PTNT_GENDER
, SELF_FAMY_KBN
, RELATIONSHIP_CD
, RELATIONSHIP_NM
, START_DATE
, START_REASON_CD
, LOST_DATE
, LOST_REASON_CD
, EMP_NO
, NK_FLG
, EST_CD1
, EST_CD2
, EST_CD3
, EST_CD4
, EST_NM1
, EST_NM2
, EST_NM3
, EST_NM4
, DEPT_CD1
, DEPT_CD2
, DEPT_CD3
, DEPT_CD4
, DEPT_NM1
, DEPT_NM2
, DEPT_NM3
, DEPT_NM4
, ZIP_CD
, ADDR1
, ADDR2
, ZIP_CD_SEND
, ADDR1_SEND
, ADDR2_SEND
, TEL_NO
, TEL_NO_K
, E_MAIL_ADDR
, E_MAIL_ADDR_K
, DIST_CD1
, FILLER1
, FILLER2
, FILLER3
, FILLER4
, FILLER5
, FILLER6
, FILLER7
, FILLER8
, FILLER9
, FILLER10
, FILLER11
, FILLER12
, FILLER13
, FILLER14
, FILLER15
, FILLER16
, FILLER17
, FILLER18
, FILLER19
, FILLER20
, REG_USER
, REG_DATE
, UPD_USER
, UPD_DATE
)
WITH V_ACC AS (
SELECT
ACC.*
FROM
VIEW_TBL_MEM_ACC_FIX ACC
INNER JOIN (
SELECT
EMPLR_ID
FROM
TBL_MSTR_EMPLR
WHERE
HDP_LINK_FLG = '2'
AND
VALID_FLG = 'Y'
) HDP
ON ACC.EMPLR_ID = HDP.EMPLR_ID
)
, V_MAX_MON AS (
SELECT
EMPLR_ID
, MAX(YEAR_MON_OBJ) AS YEAR_MON_MAX
FROM
V_ACC
GROUP BY
EMPLR_ID
)
SELECT
V_ACC.EMPLR_ID
, V_ACC.YEAR_MON_OBJ
, V_ACC.JMDC_BRDG_ID
, V_ACC.INSUR_PLC_NTBK_SIGN
, V_ACC.INSUR_PLC_NTBK_NO
, V_ACC.PERSON_NO
, V_ACC.NAME_KJ
, V_ACC.NAME_KN
, V_ACC.PTNT_BIRTH
, V_ACC.PTNT_GENDER
, V_ACC.SELF_FAMY_KBN
, V_ACC.RELATIONSHIP_CD
, V_ACC.RELATIONSHIP_NM
, V_ACC.START_DATE
, V_ACC.START_REASON_CD
, V_ACC.LOST_DATE
, V_ACC.LOST_REASON_CD
, V_ACC.EMP_NO
, V_ACC.NK_FLG
, V_ACC.EST_CD1
, V_ACC.EST_CD2
, V_ACC.EST_CD3
, V_ACC.EST_CD4
, V_ACC.EST_NM1
, V_ACC.EST_NM2
, V_ACC.EST_NM3
, V_ACC.EST_NM4
, V_ACC.DEPT_CD1
, V_ACC.DEPT_CD2
, V_ACC.DEPT_CD3
, V_ACC.DEPT_CD4
, V_ACC.DEPT_NM1
, V_ACC.DEPT_NM2
, V_ACC.DEPT_NM3
, V_ACC.DEPT_NM4
, V_ACC.ZIP_CD
, V_ACC.ADDR1
, V_ACC.ADDR2
, V_ACC.ZIP_CD_SEND
, V_ACC.ADDR1_SEND
, V_ACC.ADDR2_SEND
, V_ACC.TEL_NO
, V_ACC.TEL_NO_K
, V_ACC.E_MAIL_ADDR
, V_ACC.E_MAIL_ADDR_K
, V_ACC.DIST_CD1
, V_ACC.FILLER1
, V_ACC.FILLER2
, V_ACC.FILLER3
, V_ACC.FILLER4
, V_ACC.FILLER5
, V_ACC.FILLER6
, V_ACC.FILLER7
, V_ACC.FILLER8
, V_ACC.FILLER9
, V_ACC.FILLER10
, NULL AS FILLER11
, NULL AS FILLER12
, NULL AS FILLER13
, NULL AS FILLER14
, NULL AS FILLER15
, NULL AS FILLER16
, NULL AS FILLER17
, NULL AS FILLER18
, NULL AS FILLER19
, NULL AS FILLER20
, V_ACC.REG_USER
, V_ACC.REG_DATE
, V_ACC.UPD_USER
, V_ACC.UPD_DATE
FROM
V_ACC
INNER JOIN V_MAX_MON
ON V_ACC.EMPLR_ID = V_MAX_MON.EMPLR_ID
AND V_ACC.YEAR_MON_OBJ = V_MAX_MON.YEAR_MON_MAX
输出目的地
[mem@dcsv-db2w-01 - Db2wh Python]$ cd /mnt/blumeta0/home/mem
[mem@dcsv-db2w-01 - Db2wh ~]$ ll
total 12
drwxrwxrwx. 2 mem bluadmin 6 Jan 24 14:37 ext_log
drwxrwxrwx. 2 mem bluadmin 29 Jan 24 15:06 jpep
输出目的地的设置
[mem@dcsv-db2w-01 - Db2wh Python]$ db2 get db cfg | grep -i external
Allowed paths for external tables (EXTBL_LOCATION) = /mnt/bludata0/scratch;/mnt/blumeta0/home;/mnt/external
磁盘数量
[mem@dcsv-db2w-01 - Db2wh ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
overlay 84G 41G 44G 49% /
tmpfs 16G 0 16G 0% /dev
/dev/mapper/centos-root 84G 41G 44G 49% /etc/hosts
shm 512M 320M 193M 63% /dev/shm
tmpfs 16G 1.7G 15G 11% /run
tmpfs 3.2G 0 3.2G 0% /run/user/500
tmpfs 3.2G 0 3.2G 0% /run/user/503
tmpfs 3.2G 0 3.2G 0% /run/user/0
tmpfs 3.2G 0 3.2G 0% /run/user/5003
tmpfs 3.2G 0 3.2G 0% /run/user/5001
Likley是原因码3
db2 ? SQL20569N
SQL20569N由于存在问题,外部表操作失败的相应的数据文件或诊断文件。文件名:“”。原因码:“”。
原因码标识了特定问题:
3 The attempt to process the data file ended unexpectedly. Probably, the contents of the data file are corrupt. For example, data fields may have delimiters or nullvalue as part of data and requires an escape character.
用户回复:
3 Correct the field data in data file containing delimiters or nullvalue as part of data using proper escape character.
例如
$ db2 "create external table '$PWD/t' using (delimiter '9') as values '1'"
DB20000I The SQL command completed successfully.
$ db2 "create external table '$PWD/t' using (delimiter '9') as values '9'"
SQL20569N The external table operation failed due to a problem with the
corresponding data file or diagnostic files. File name:
"/scratch/home/bluadmin/t". Reason code: "3". SQLSTATE=428IB
因此,如果您使用数据中出现的delimer,则需要使用ESCAPECHAR
$ db2 "create external table '$PWD/t' using (delimiter '9' escapechar '\') as values '9'"
DB20000I The SQL command completed successfully.