![]() |
|
Archives of the TeradataForumMessage Posted: Wed, 10 Mar 2004 @ 20:44:12 GMT
There is a feature of Multiload that you can load into a table based on a value (or IS/IS NOT NULL). It will require multiple imports of the same text file (for a Multiload) since I don't think Multiload can handle multiple input layout formats (I have never tried). You would have to have 9 input layouts and DML label statements (and maybe multiple Begin/End mload). Something Like the following:
.BEGIN IMPORT MLOAD
TABLES sometable1, sometable2, sometable3
WORKTABLES WT_sometables
ERRORTABLES ET_sometables
UV_sometables
ERRLIMIT 50
AMPCHECK ALL;
.LAYOUT InputLayout1;
.FIELD IN_TableID * VARCHAR(20)
.FIELD IN_Data1 * VARCHAR(20)
.FIELD IN_Data2 * VARCHAR(20)
.
. other layouts
.
.
.LAYOUT InputLayout4;
.FIELD IN_TableID * VARCHAR(20)
.FIELD IN_Data1 * VARCHAR(20)
.FIELD IN_Data2 * VARCHAR(20)
.FIELD IN_Data3 * VARCHAR(20)
.FIELD IN_Data4 * VARCHAR(20)
.FIELD IN_Data5 * VARCHAR(20)
.
. other layouts
.
.
.LAYOUT InputLayout9;
.FIELD IN_TableID * VARCHAR(20)
.FIELD IN_Data1 * VARCHAR(20)
.FIELD IN_Data2 * VARCHAR(20)
.FIELD IN_Data3 * VARCHAR(20)
.DML LABEL InsertTable1
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO sometable1
(
data1, data2
)
VALUES
(
:IN_Data1, :IN_Data2
)
;
.DML LABEL InsertTable4
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO sometable4
(
data1, data2, data3, data4, data5
)
VALUES
(
:IN_Data1, :IN_Data2, :IN_Data3, :IN_Data5, :IN_Data5
)
;
.DML LABEL InsertTable9
IGNORE DUPLICATE INSERT ROWS;
INSERT INTO sometable9
(
data1, data2, data3
)
VALUES
(
:IN_Data1, :IN_Data2, :IN_Data3
)
;
.IMPORT INFILE textfile.txt
FORMAT VARTEXT '|'
LAYOUT INPUTLAYOUT
APPLY INSERTS WHERE In_TableID = 1;
.
. other imports
.
.IMPORT INFILE textfile.txt
FORMAT VARTEXT '|'
LAYOUT INPUTLAYOUT
APPLY INSERTS WHERE In_TableID = 4;
.
. other imports
.
.IMPORT INFILE textfile.txt
FORMAT VARTEXT '|'
LAYOUT InputLayout1
APPLY INSERTS WHERE In_TableID = 9;
-------------------------------------------------- IF, you were able to modify the data file such that missing fields were still delimited like:
1 | data1 | data2 | | |
4 | data1 | data2 | data3 | data4 | data5
1 | data1 | datat2 | | |
9 | data1 | data2 | data3| |
1 | data1 | datat2 | | |
Then you could do only 2 passes through the data and have only layout format (can update only 5 tables at a time):
.LAYOUT InputLayout;
.FIELD IN_TableID * VARCHAR(20)
.FIELD IN_Data1 * VARCHAR(20)
.FIELD IN_Data2 * VARCHAR(20)
.FIELD IN_Data3 * VARCHAR(20)
.FIELD IN_Data4 * VARCHAR(20)
.FIELD IN_Data5 * VARCHAR(20)
.IMPORT INFILE textfile.txt
FORMAT VARTEXT '|'
LAYOUT InputLayout
APPLY INSERTS WHERE In_TableID = 1;
APPLY INSERTS WHERE In_TableID = 2;
APPLY INSERTS WHERE In_TableID = 3;
APPLY INSERTS WHERE In_TableID = 4;
APPLY INSERTS WHERE In_TableID = 5;
.IMPORT INFILE textfile.txt
FORMAT VARTEXT '|'
LAYOUT InputLayout
APPLY INSERTS WHERE In_TableID = 6;
APPLY INSERTS WHERE In_TableID = 7;
APPLY INSERTS WHERE In_TableID = 8;
APPLY INSERTS WHERE In_TableID = 9;
Any other ideas anyone? Thank You, Dara Tressler
| ||||||||||||||||||||||||||||||||||||||||||||||||
| | ||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||||||||||||||||||||
| Copyright 2016 - All Rights Reserved | ||||||||||||||||||||||||||||||||||||||||||||||||
| Last Modified: 15 Jun 2023 | ||||||||||||||||||||||||||||||||||||||||||||||||