用于 CLOB 内联传输的架构定义中的最大字符数

问题描述 投票:0回答:1

我编写了一个 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 传输的字符数?

db2 odbc teradata
1个回答
0
投票

当您没有定义 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 列
  • 定义特定长度,该长度足够大以容纳大部分数据,但又不能大到导致创建临时文件。在您的情况下,由于总长度在 500,000 到 600,000 个字符之间,您可以相应地定义 CLOB 长度(例如,CLOB(600000)
    )。
  • 检查您的 ODBC 驱动程序设置,以确保缓冲区大小配置为最佳以处理大数据传输。增加缓冲区大小可能有助于传输更大的 CLOB,而无需临时文件。
  • 如果 CLOB 数据的大小变化很大,您可能需要尝试不同的长度,以找到有效传输数据的最佳点。
-----主要因素是CLOB数据的大小。指定与您的典型数据大小匹配或稍微超过的长度(如您的情况中的

CLOB(600000)

)应该有助于减少或消除传输过程中临时文件的创建。

© www.soinside.com 2019 - 2024. All rights reserved.