Hi,
I need to export few chinese and japanese characters stored in teradata to a file.
I have tried different options to export data through TPT but i am either not able to see the unicode characters in the generated file or i face the conflicting data length error.
Please find the details below.
Requirement :
1. Export chinese / japanese characters out of teradata to a file.
2. The table has japanese characters stored in ClassNm and DeptNm field
Eg : 本菊地 , 竹益下
TPT Options tried :
1. Generated TPT with the same schema and column length as in TD
Output : Exports data , but unicode data not displayed in file.
2. Generated TPT with column length 2 times higher for unicode columns
Output : Exports data, but unicode data not displayed in file.
3. Generated TPT with column length 2 times higher for unicode columns and mentioned USING CHARACTER SET UTF8 as the first line of the TPT file.
Output : Fails with Error as FILE_WRITER[1]: Operator instance 1 processing file 'unitest.out'.
EXPORT_OPERATOR: connecting sessions
TPT_INFRA: TPT02638: Error: Conflicting data length for column(1) - EmpCatNumber. Source column's data length (20) Target column's data length (60).
EXPORT_OPERATOR: TPT12108: Output Schema does not match data from SELECT statement
FILE_WRITER[1]: Total files processed: 0.
EXPORT_OPERATOR: disconnecting sessions
EXPORT_OPERATOR: Total processor time used = '0.020462 Second(s)'
TPT Execution command :
tbuild -f unitest.ctl -v TPTParameter.param -e UTF8 -s 1
Table Structure :
CREATE SET TABLE master_t.unitest ,NO FALLBACK ,
NO BEFORE JOURNAL,
NO AFTER JOURNAL,
CHECKSUM = DEFAULT,
DEFAULT MERGEBLOCKRATIO
(
EmpCatNumber VARCHAR(10) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
EmpType CHAR(5) CHARACTER SET UNICODE NOT CASESPECIFIC NOT NULL,
EmpCd VARCHAR(10) CHARACTER SET LATIN NOT CASESPECIFIC,
ClassNm VARCHAR(180) CHARACTER SET UNICODE NOT CASESPECIFIC,
DeptNm VARCHAR(180) CHARACTER SET UNICODE NOT CASESPECIFIC,
CrtdBy VARCHAR(25) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL DEFAULT USER ,
CrtTmstmp TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0))
PRIMARY INDEX Emp_Nm_NUPI ( EmpCatNumber ,EmpType );
TPT Script :
USING CHARACTER SET UTF8
DEFINE JOB EXPORT_unitest_TABLE_TO_FILE
DESCRIPTION 'EXPORT unitest TABLE TO A FILE'
(
/*****************************/
DEFINE SCHEMA unitest_SCHEMA
DESCRIPTION 'SAMPLE unitest SCHEMA'
(
EmpCatNumber Varchar(20) , EmpType Varchar(12) , EmpCd Varchar(10) , ClassNm Varchar(360) , DeptNm Varchar(360) , CrtdBy Varchar(25) , CrtTmstmp Varchar(30)
);
/*****************************/
/*****************************/
DEFINE OPERATOR FILE_WRITER()
DESCRIPTION 'TERADATA PARALLEL TRANSPORTER DATA CONNECTOR OPERATOR'
TYPE DATACONNECTOR CONSUMER
SCHEMA *
ATTRIBUTES
(
VARCHAR PrivateLogName = 'file_writer_privatelog',
VARCHAR FileName = 'unitest.out',
VARCHAR IndicatorMode = 'N',
VARCHAR OpenMode = 'Write',
VARCHAR Format = 'DELIMITED',
VARCHAR TextDelimiter = @MyDelimiter,
VARCHAR TRACELEVEL='ALL'
);
/*****************************/
/*****************************/
DEFINE OPERATOR EXPORT_OPERATOR()
DESCRIPTION 'TERADATA PARALLEL TRANSPORTER EXPORT OPERATOR'
TYPE EXPORT
SCHEMA unitest_SCHEMA
ATTRIBUTES
(
VARCHAR PrivateLogName = 'export_privatelog',
INTEGER MaxSessions = @MaxSessions ,
INTEGER MinSessions = @MinSessions,
VARCHAR TdpId = @MyTdPid,
VARCHAR UserName = @MyUserName,
VARCHAR UserPassword = @MyPassword,
VARCHAR AccountId,
VARCHAR SelectStmt = 'select
cast (EmpCatNumber as Varchar(20)), cast (EmpType as Varchar(12)), cast (EmpCd as Varchar(10)), cast (ClassNm as Varchar(360)), cast (DeptNm as Varchar(360)), cast (CrtdBy as Varchar(25)), cast (CrtTmstmp as Varchar(30))
from eis_t.unitest where 1=1 ; '
);
/*****************************/
STEP export_to_file
(
APPLY TO OPERATOR (FILE_WRITER() )
SELECT * FROM OPERATOR (EXPORT_OPERATOR() [1] );
);
);
Request your help on the same.
Thanks & Regards,
Srivignesh KN
"Exactly the same format as they are in the Teradata table" would be an internal binary representation; probably not what you really want.
BTEQ in FIELDMODE will use the FORMAT associated with the column to convert to character form. Other tools (e.g. SQL Assistant) typically convert the ODBC/JDBC/etc. driver format to the client's local form. You could ALTER the column format in the table, or explicitly CAST the date field(s) to some other format, or possibly SET SESSION DATEFORM=ANSIDATE; if what you want is yyyy-mm-dd format.