Import 如何使用BTEQ导入将数据从分隔文件导入teradata表?
我试图在linux环境下执行以下bteq命令,但无法将数据正确加载到Teradata DB服务器。有人可以建议我解决以下问题,我面临的加载 使用的BTEQ命令:Import 如何使用BTEQ导入将数据从分隔文件导入teradata表?,import,teradata,Import,Teradata,我试图在linux环境下执行以下bteq命令,但无法将数据正确加载到Teradata DB服务器。有人可以建议我解决以下问题,我面临的加载 使用的BTEQ命令: .SET width 64000; .SET session transaction btet; .logmech ldap .logon XXXXXXX/XXXXXXXX,********; DATABASE corecm; .PACK 1000 .IMPORT VARTEXT '~' FILE=/v/global/user/ap
.SET width 64000;
.SET session transaction btet;
.logmech ldap
.logon XXXXXXX/XXXXXXXX,********;
DATABASE corecm;
.PACK 1000
.IMPORT VARTEXT '~' FILE=/v/global/user/application_event_bus_evt
.REPEAT *
USING(APPLICATION_EVENT_ID CHAR(24),BUS_EVT_ID CHAR(24),BUS_EVT_VID BIGINT,BUS_EVT_RESTATE_IN SMALLINT)
insert into corecm.application_event_bus_evt (APPLICATION_EVENT_ID
, BUS_EVT_ID
, BUS_EVT_VID
, BUS_EVT_RESTATE_IN
)
values
( COALESCE(:APPLICATION_EVENT_ID,1)
, COALESCE(:BUS_EVT_ID,1)
, COALESCE(:BUS_EVT_VID,1)
, COALESCE(:BUS_EVT_RESTATE_IN,1)
) ;
.LOGOFF;
.EXIT;
示例输入文件定界符“~”[/v/global/user/application\u event\u bus\u evt]:
Ckn3gMxLEeOgIQBQVgErYA==~g+GDDtlaY3n7BdUrYshDFA==~1~1
CL1kEcxLEeOgIQBQVgErYA==~qoKoiuGDbClpcGt/z6RKGw==~1~1
oYIVcMxKEeOgIQBQVgErYA==~mfmQiwl7yAteevzJfilMvA==~1~1
5N7ME5bM4xGhM7exj3ykUw==~yFM2FZbM4xGhM7exj3ykUw==~1~0
JLBH4JfM4xGDH9s5+Ds/8w==~doZ/7pfM4xGDH9s5+Ds/8w==~1~0
fGvpoMxKEeOgIQBQVgErYA==~mQUQIK2mY6WIPcszfp5BTQ==~1~1
表定义:
CREATE MULTISET TABLE CORECM.APPLICATION_EVENT_BUS_EVT ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(
APPLICATION_EVENT_ID CHAR(26) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
BUS_EVT_ID CHAR(26) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL,
BUS_EVT_VID BIGINT NOT NULL,
BUS_EVT_RESTATE_IN SMALLINT)
UNIQUE PRIMARY INDEX ( APPLICATION_EVENT_ID ,BUS_EVT_ID ,BUS_EVT_VID )
INDEX APPLICATION_EVENT_BUS_EVT_IDX1 ( APPLICATION_EVENT_ID )
INDEX APPLICATION_EVENT_BUS_EVT_IDX2 ( BUS_EVT_ID ,BUS_EVT_VID );
结果在数据库服务器中设置为
APPLICATION_EVENT_ID BUS_EVT_ID BUS_EVT_VID BUS_EVT_RESTATE_IN
1 Ckn3gMxLEeOgIQBQVgErYA == g+GDDtlaY3n7BdUrYshD 85,849,873,219,141,958 12,544
2 CL1kEcxLEeOgIQBQVgErYA == qoKoiuGDbClpcGt/z6RK 85,849,873,219,155,783 12,544
3 oYIVcMxKEeOgIQBQVgErYA == mfmQiwl7yAteevzJfilM 85,849,873,219,142,006 12,544
4 5N7ME5bM4xGhM7exj3ykUw == JAf0GpbM4xGhM7exj3yk 85,849,873,219,155,797 12,288
5 JLBH4JfM4xGDH9s5+Ds/8w == Du6T7pfM4xGDH9s5+Ds/ 85,849,873,219,155,768 12,288
6 fGvpoMxKEeOgIQBQVgErYA == mQUQIK2mY6WIPcszfp5B 85,849,873,219,146,068 12,544
如果我们看看数据,我们可以看到两个问题
BUS_EVT_VID
和BUS_EVT_repreat_分别有错误的数据85849873219141958和12544,而不是1和1(这可能是因为前两列数据发生了移位)
提前感谢。当您定义VARTEXT时,所有输入列都必须定义为VARCHAR,但您使用了CHAR和INT 根据目标表的定义,VARCHAR length应该可以工作:
USING(
APPLICATION_EVENT_ID VARCHAR(26),
BUS_EVT_ID VARCHAR(26),
BUS_EVT_VID VARCHAR(19),
BUS_EVT_RESTATE_IN VARCHAR(6)
)
非常感谢您的反馈。我已成功将数据加载到TD服务器。:)你能给我提供数据类型到VARCHAR大小的转换吗,比如BIGINT->VARCHAR(19),SMALLINT->VARCHAR(6)?我是否应该假设数据类型获取的每个数据字节都是VARCHAR大小?请注意。它不是数据类型的内部大小,而是作为字符串的外部表示形式,例如,SMALLINT可以存储-32768和+32767之间的值,内部为两个字节,但5位数字加上前导符号为VARCHAR。十进制数(n,m)->n位加逗号加符号=VARCHAR(n+2)