通过 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);
);
我需要自动将大量数据(通过 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);
);