我编写了一个 TPT 作业脚本,用于通过 ODBC 将数据从 DB2 表传输到 Teradata。
源表中有CLOB字段,我也想转移。当我没有定义 CLOB 列的长度时,TPT 会在作业运行时为 CLOB 列创建临时文件。这似乎需要很长时间。
DEFINE SCHEMA MY_SCHEMA
(
COLUMN1 VARCHAR(24),
COLUMN2 VARCHAR(24),
LOB_COLUMN1 CLOB,
LOB_COLUMN1 CLOB,
);
我注意到,如果为 CLOB 列指定的长度不太长,则不会创建临时文件。例如:
DEFINE SCHEMA MY_SCHEMA
(
COLUMN1 VARCHAR(24),
COLUMN2 VARCHAR(24),
LOB_COLUMN1 CLOB(100000),
LOB_COLUMN1 CLOB(100000),
);
在我的例子中,可以读入的字符总长度是 500,000 到 600,000 之间的值。我的问题是:哪个因素决定了在不为 CLOB 列创建临时文件的情况下可以通过 ODBC 传输的字符数?
当您没有定义 CLOB 列的长度时,Teradata 会将数据作为大对象 (LOB) 处理,并且由于 LOB 可能非常大,因此系统会在传输过程中创建临时文件来存储和管理它们。
当您定义 CLOB 的长度(例如,
CLOB(100000)
)时,您是在告诉 Teradata CLOB 列的最大大小限制为 100,000 个字符,从而使 Teradata 能够更有效地处理它,而无需创建临时文件。缺少这些文件会使处理速度更快,因为系统不需要处理这些大型对象的外部存储。
决定是否创建临时文件的关键因素是 CLOB 数据的大小。如果数据大小超过某个阈值,Teradata 将在将数据插入目标表之前使用临时文件来存储数据。通过使用
CLOB(length)
限制大小,您可以控制可以直接传输多少数据而无需临时存储。
ODBC 使用缓冲区在系统之间传输数据。如果 CLOB 数据适合可用缓冲区大小,则传输可以继续进行,而无需创建临时文件。当数据超过缓冲区容量时,系统将其卸载到临时文件。缓冲区大小取决于运行传输的系统上的ODBC 驱动程序设置和可用的内存。
TPT 脚本中的某些 Teradata 配置或设置(例如VARCHAR
或
CLOB
定义)可能会影响 LOB 的处理方式。为 CLOB 字段指定合理的长度可确保数据传输不会超出系统限制,从而避免创建临时文件。我推荐:
CLOB(600000)
)。
CLOB(600000)
)应该有助于减少或消除传输过程中临时文件的创建。