0
我正嘗試在linux環境下執行以下bteq命令,但無法將數據正確加載到Teradata數據庫服務器。有人可以請建議我解決我在加載時遇到的以下問題。如何使用BTEQ導入將數據從分隔文件導入到Teradata表中?
BTEQ命令用於:
.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;
示例輸入文件DELIMITTER 「〜」[/ V /全局/用戶/ application_event_bus_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);
在DB服務器中設置的結果爲:
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
如果我們看一下數據,我們可以看到兩個問題是,
前兩列數據長度爲24個字符(按輸入文件),但問題是它已經偏移是2下一列中的字符。
列
BUS_EVT_VID
和BUS_EVT_RESTATE_IN
分別有錯誤的數據85,849,873,219,141,958和12,544,而不是1和1(這可能是因爲前兩個數據得到移動)
我嘗試以下選項來解決上述問題,但未能解決問題,
- 修改表的定義,即改變數據類型爲CHAR (28),CHAR(24),CHAR(26)
- 修改的表定義列 數據類型到VARCHAR(24),VARCHAR(26)
- 改性BTEQ命令,在以下線即改變的數據類型, USING(APPLICATION_EVENT_ID CHAR(24),BUS_EVT_ID CHAR(24),BUS_EVT_VID BIGINT, BUS_EVT_RESTATE_IN SMALLINT)
在此先感謝。
您的反饋非常感謝。我已成功將數據加載到TD服務器。 :) – Vipul
你能否提供我dataypes轉換爲VARCHAR SIZE,如BIGINT - > VARCHAR(19),SMALLINT - > VARCHAR(6)?我應該假設數據類型所採用的每個數據字節都是VARCHAR SIZE嗎?請指教。 – Vipul
它不是數據類型的內部大小,而是外部表示形式,如字符串。一個SMALLINT可以存儲介於-32768和+32767之間的值,兩個字節在內部,但是5個數字加前導符號爲VARCHAR。 DECIMAL(n,m) - > n位數加逗號加上符號= VARCHAR(n + 2) – dnoeth