Teradata易失性表设置字段太大



我试图重新运行一个旧的查询,一直在打行大小问题。经过一些变通之后,除了两个值之外,我已经获得了添加到表中所需的所有值。每当我尝试添加最后两个字段时,我都会得到某种形式的"这将使最大行长度太长"(取决于我是否正在运行直接查询或我包括CREATE VOLATILE TABLE…等。

撇开没有理由的数据应该导致最大行长度被超过(我应该拉回完全相同的数据在2016年2月当这个脚本最后一次成功运行),我能看到的唯一的事情,可能会导致这个问题是两个电话#字段以及字段持有地址类型显示有16000的最大长度当我运行HELP TABLE。电话号码都只有10个字符(如预期的那样),地址类型最多只有4个字符。

所以我想寻求帮助的是:

  1. 什么会导致Teradata抛出错误关于行长度太长除了那里的行长度实际上太长(就像我说的应该是相同的数据和脚本工作之前,所以我不是100%确信的东西不只是在服务器上被阻塞)
  2. 这3个字段的最大长度是一个可能的候选人吗?如果是这样,我如何强迫它们更小(再次,当我在值上运行LENGTH时,没有返回> 10,因此16000中的15990被浪费了)?为什么在这次运行中,字段会比上次运行时设置得更大?
  3. 如果最大长度不是问题,我能做些什么来帮助诊断问题?

作为参考,我卡住的脚本部分在

下面
CREATE MULTISET VOLATILE TABLE
--DROP TABLE
PCP_DATA_2
AS (
SELECT DISTINCT
    PA.Prov_Nbr
    , PA.NPI
    , OREPLACE(UPPER(TRIM(SDA_MAP.State_Defined_SDA)), ' TEXAS', '') AS SDA
    , PA."First/Inst Name"
    , PA.Last_Name
    , PA.Degree
    , PA.Spec_Code
    , PA.Spec_Desc
    , PA.Hat_Code
    , PA.Hat_Desc
    , PA.Group_Nbr
    , PA.Group_Name
    , PA.Address1
    , PA.Address2
    , PA.City
    , PA.State
    , PA.Zip
    , UPPER(TRIM(SDA_MAP.STD_County_Name)) AS County
    , PA.Primary_Phone_Nbr
    , PA.Secondary_Phone_Nbr
    , PA.Address_Type
    , PA.Affstat_Code
    , PA.AfterHrs
    , PA.Affiliation_ID
FROM
    PCP_DATA AS PA
    LEFT JOIN V_REF_MD_CITY_COUNTY_SDA_CRSWK AS SDA_MAP
        ON PA.Zip = SDA_MAP.USPS_ZipCode
)
WITH DATA PRIMARY INDEX (Prov_Nbr)
ON COMMIT PRESERVE ROWS;

我知道这个问题很宽泛,但谷歌并没有提供任何有用的东西& &;

如果这个查询在您为会话设置不同的字符集之前工作。

当您得到9804:响应行大小或常量行大小溢出时,通常是由于会话使用UTF-8或UTF-16作为字符集。

列可能被定义为拉丁文(即每个字符一个字节),但对于UTF-16,其大小是两倍,对于UTF-8,它是三倍。结果行的最大大小是64k, 3 * 16000 * (2|3)显然超过了这个值(这是基于定义的大小,而不是实际大小)。

将超大的列转换为适当的大小,这也增加了DISTINCT的性能,它将VarChars扩展为char。

最新更新