【问题标题】:How to extract a Teradata .TPT file with UTF-8 encoding如何使用 UTF-8 编码提取 Teradata .TPT 文件
【发布时间】:2019-01-01 07:15:49
【问题描述】:

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

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

【问题讨论】:

标签: teradata extraction teradata-sql-assistant


【解决方案1】:

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

有时,因为我很懒,我用USING CHARACTER SET UTF16 定义我的TPT,这样我只需要将每个字段大小加倍(数学更容易)。但这意味着我必须在提取后将其转换为 UTF8。在 Linux 中,这只是 iconv -f UTF-16LE -t UTF-8 myoutputfile.csv > myoutputfile.utf8.csv

一些注意事项:

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

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

【讨论】:

    猜你喜欢
    • 2013-02-23
    • 2016-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    • 2011-07-07
    • 1970-01-01
    • 2014-12-24
    相关资源
    最近更新 更多