如何使用UTF-8编码提取Teradata.TPT文件
我们目前正在提取几个Teradata.TPT文件,我们将上传到AWS S3,但是这些文件都带有ANSI编码如何使用UTF-8编码提取Teradata.TPT文件,teradata,extraction,teradata-sql-assistant,Teradata,Extraction,Teradata Sql Assistant,我们目前正在提取几个Teradata.TPT文件,我们将上传到AWS S3,但是这些文件都带有ANSI编码 我需要它们与编码UTF-8一起提供,您必须在TPT脚本中指定字符集。在顶部添加: USING CHARACTER SET UTF8 棘手的部分是UTF8这里每个字符有3个字节,因此在DEFINE SCHEMA中,必须将每个字段的大小增加三倍 例如,如果您的架构如下所示: DEFINE SCHEMA s_some_export ( status VAR
我需要它们与编码UTF-8一起提供,您必须在TPT脚本中指定字符集。在顶部添加:
USING CHARACTER SET UTF8
棘手的部分是UTF8
这里每个字符有3个字节,因此在DEFINE SCHEMA
中,必须将每个字段的大小增加三倍
例如,如果您的架构如下所示:
DEFINE SCHEMA s_some_export
(
status VARCHAR(20),
userid VARCHAR(20),
firstname VARCHAR(64),
);
您必须将值增加三倍以适应UTF8字符:
DEFINE SCHEMA s_some_export
(
status VARCHAR(60),
userid VARCHAR(60),
firstname VARCHAR(192),
);
有时,因为我懒惰,我使用字符集UTF16使用定义我的TPT,这样我只需要两倍的字段大小(数学更容易)。但这意味着我必须在提取后将其转换为UTF8。在Linux中,这将是iconv-f UTF-16LE-t UTF-8 myoutputfile.csv>myoutputfile.utf8.csv
一些警告:
如果表的字段定义为CHAR和字符集拉丁文
,则架构可能会遇到列大小问题
日期和时间戳可能会变得更加复杂,因为它们不需要加倍,所以在模式中将它们定义为VARCHAR
,可能会给您带来麻烦。你可能得在这儿大惊小怪了。我的建议是,更改为TPT选择数据的视图,并将CAST(yourdate AS VARCHAR(10))转换为yourdate
,然后在模式中使用VARCHAR(30)
,这样在定义模式时就不必考虑字段类型。这意味着在提取过程中会有额外的CPU开销,但除非资源紧张,否则我认为这是值得的。我也很懒,而且总是很乐意让该死的TPT在没有调试的情况下提取数据
会话字符集可能会影响Teradata的数据输出。Teradata,您将如何配置此功能?