我们目前正在提取几个将上传到 AWS S3 的 Teradata .TPT 文件,但是这些文件带有 ANSI 编码
我需要它们带有编码 UTF-8
我们目前正在提取几个将上传到 AWS S3 的 Teradata .TPT 文件,但是这些文件带有 ANSI 编码
我需要它们带有编码 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),
);
有时,因为我很懒,我定义了我的 TPT,USING CHARACTER SET UTF16
这样我只需要将每个字段大小加倍(数学更容易)。但这意味着我必须在提取后将其转换为 UTF8。在 Linux 中,这只是iconv -f UTF-16LE -t UTF-8 myoutputfile.csv > myoutputfile.utf8.csv
一些警告:
如果您的表的字段定义为 CHAR,CHARACTER SET LATIN
那么您的架构可能会遇到列大小问题。看这里
日期和时间戳可能会变得很奇怪,因为它们不需要加倍,所以VARCHAR
在你的模式中定义它们可能会给你带来麻烦。你可能不得不在这里大惊小怪。我的建议是更改您从中为 TPT 选择数据的视图,CAST(yourdate AS VARCHAR(10)) as yourdate
然后VARCHAR(30)
在您的架构中使用,这样您在定义架构时就不必考虑字段类型。这意味着提取时需要额外的 CPU 开销,但除非您的资源紧张,否则我认为这是值得的。我也很懒惰,总是很高兴得到该死的 TPT 来提取数据而无需太多调试。