通过 Teradata Parallel transporter 将查询结果导出到文本文件

Export result of a query to a text file by Teradata Parallel transporter

我需要自动将大量数据(通过 sql 查询从 TERADATA)导出到竖线分隔的文本文件。我使用了 PowerShell (ConvertTo-CSV cmdlet),但速度很慢。 我被建议使用 TPT 来导出,但我从未使用过这个工具,我所发现的只是如何将一个 table 导出到一个平面文件,而不是一个超过 table 的复杂查询。 有人知道如何进行 TPT 或有相应的脚本示例吗?

编辑:

我正在将此脚本用于 TPT,但我认为它有很多错误

DEFINE JOB EXPORT_DELIMITED_FILE
DESCRIPTION 'Export rows from a Teradata table to a delimited file'
(
DEFINE SCHEMA select EXPORT_DELIMITED_FILE from DELIMITED OF OPERATOR SQL_SELECTOR  
DEFINE OPERATOR SQL_SELECTOR
TYPE SELECTOR
SCHEMA *
ATTRIBUTES
(
VARCHAR PrivateLogName = 'selector_log',
VARCHAR TdpId = 'Server',
VARCHAR UserName = 'user',
VARCHAR UserPassword = 'password',
VARCHAR SelectStmt = 'E:\PowerShell\SQL\file.sql',
VARCHAR ReportModeOn
);
DEFINE OPERATOR FILE_WRITER
TYPE DATACONNECTOR CONSUMER
SCHEMA *
ATTRIBUTES
(
VARCHAR PrivateLogName = 'dataconnector_log',
VARCHAR DirectoryPath = 'E:\PowerShell\Output',
VARCHAR FileName = 'test_file.txt',
VARCHAR Format = 'Delimited',
VARCHAR OpenMode = 'Write',
VARCHAR TextDelimiter = '|'
);
APPLY TO OPERATOR (FILE_WRITER)

SELECT * FROM OPERATOR (SQL_SELECTOR);
);

您的架构定义有误。架构根据字段名称和数据类型定义数据集的外观。

生产者运营商(在您的情况下 SQL 选择器)总是需要有一个定义的模式。延迟架构 (SCHEMA *) 只能与消费者运算符(在您的情况下是数据连接器)一起使用,它允许消费者拥有与相关生产者相同的架构。

架构定义看起来像这样:

DEFINE SCHEMA FILE_SCHEMA
(
    Column1 VARCHAR(255),
    Column2 VARCHAR(255),
    Column3 VARCHAR(255),
    Column4 VARCHAR(255)
);

请记住,数据连接器运算符只接受架构中的字符数据。如果指定任何其他数据类型,将导致错误。

此外,SelectStmt 必须包含实际的 SQL 查询,而不是包含查询的文件路径。要通过数据连接器运算符将数据导出到平面文件,您需要将所有内容转换为 VARCHAR 在查询中键入

SelectStmt = 'SELECT CAST(ColumnA AS VARCHAR(100), CAST(ColumnB AS VARCHAR(100), CAST(ColumnC AS VARCHAR(100), CAST(COUNT(*) AS VARCHAR(100)) FROM MyTable GROUP BY 1,2,3,4;'

请注意,SelectStmt 返回的列数与定义模式相同。

同时设置 ReportModeOn = 'Y' 而不是将其保留为默认值。

永远记得缩进代码。有了缩进,脚本现在看起来像:

DEFINE JOB EXPORT_DELIMITED_FILE
DESCRIPTION 'Export rows from a Teradata table to a delimited file'
(
    DEFINE SCHEMA FILE_SCHEMA
    (
        Column1 VARCHAR(100),
        Column2 VARCHAR(100),
        Column3 VARCHAR(100),
        Column4 VARCHAR(100)
    );

    DEFINE OPERATOR SQL_SELECTOR
    TYPE SELECTOR
    SCHEMA FILE_SCHEMA
    ATTRIBUTES
    (
        VARCHAR PrivateLogName = 'selector_log',
        VARCHAR TdpId = 'Server',
        VARCHAR UserName = 'user',
        VARCHAR UserPassword = 'password',
        VARCHAR SelectStmt = 'SELECT CAST(ColumnA AS VARCHAR(100), CAST(ColumnB AS VARCHAR(100), CAST(ColumnC AS VARCHAR(100), CAST(COUNT(*) AS VARCHAR(100)) FROM MyTable GROUP BY 1,2,3;',
        VARCHAR ReportModeOn = 'Y'
    );

    DEFINE OPERATOR FILE_WRITER
    TYPE DATACONNECTOR CONSUMER
    SCHEMA *
    ATTRIBUTES
    (
        VARCHAR PrivateLogName = 'dataconnector_log',
        VARCHAR DirectoryPath = 'E:\PowerShell\Output',
        VARCHAR FileName = 'test_file.txt',
        VARCHAR Format = 'Delimited',
        VARCHAR OpenMode = 'Write',
        VARCHAR TextDelimiter = '|'
    );

    APPLY TO OPERATOR (FILE_WRITER)
    SELECT * FROM OPERATOR (SQL_SELECTOR);
);