1

我们目前正在提取几个将上传到 AWS S3 的 Teradata .TPT 文件,但是这些文件带有 ANSI 编码

我需要它们带有编码 UTF-8

4

1 回答 1

2

您必须在 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

一些警告:

  1. 如果您的表的字段定义为 CHAR,CHARACTER SET LATIN那么您的架构可能会遇到列大小问题。看这里

  2. 日期和时间戳可能会变得很奇怪,因为它们不需要加倍,所以VARCHAR在你的模式中定义它们可能会给你带来麻烦。你可能不得不在这里大惊小怪。我的建议是更改您从中为 TPT 选择数据的视图,CAST(yourdate AS VARCHAR(10)) as yourdate然后VARCHAR(30)在您的架构中使用,这样您在定义架构时就不必考虑字段类型。这意味着提取时需要额外的 CPU 开销,但除非您的资源紧张,否则我认为这是值得的。我也很懒惰,总是很高兴得到该死的 TPT 来提取数据而无需太多调试。

于 2018-07-24T20:08:13.353 回答