Teradata易变表设置字段太大

时间:2016-09-22 19:09:21

标签: sql teradata

我正在尝试重新运行旧查询,并且一直在遇到行大小问题。经过一些解决方法之后,我得到了除了我需要的两个值之外的所有值。每当我尝试添加最后两个字段时,我会得到某种形式的“这将使最大行长度过长”(取决于我是仅运行直接查询还是包含CREATE VOLATILE TABLE ...等围绕查询。

暂且没有理由说数据应该导致超出最大行长度(我应该在2016年2月这个脚本上次成功运行时提取完全相同的数据),这是我唯一的事情。我能够看到可能导致问题的是,当我运行HELP TABLE时,两个电话#字段以及持有地址类型的字段显示最大长度为16000。手机#s只有10个字符(如预期的那样),地址类型最多只有4个字符。

所以我正在寻求帮助的是:

  1. 什么会导致Teradata抛出行长度太长的错误,除了行长实际上太长(就像我说它应该是相同的数据和脚本之前工作,所以我不是100%说服服务器上的东西不仅仅是gacked)
  2. 这3个字段的最大长度是否可能成为候选者?如果是这样,我如何强制它们变小(同样,当我在值上运行LENGTH时,没有任何返回为> 10因此浪费了16000的15990)?为什么在这次运行中这些字段的设置会比之前运行的要大?
  3. 如果最大长度不是问题,我该怎么做才能帮助诊断问题?
  4. 作为参考,我遇到的脚本部分位于

    之下
    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;
    

    我知道这个问题是广泛的,但谷歌并没有提出任何有用的问题。我小组中的其他分析师和我一样难过。

1 个答案:

答案 0 :(得分:3)

如果此查询在您为会话设置了不同的字符集之前有效。

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

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

将超大列投射到合适的大小,这也会提高DISTINCT的性能,从而将VarChars扩展为Chars。