Teradata volatile table 设置字段太大

Teradata volatile table setting field too large

我正在尝试重新运行 一个旧查询,但一直遇到行大小问题。经过一些解决方法后,除了两个值之外,我已经得到了我需要的 table 中的所有值。每当我尝试添加最后两个字段时,我都会得到某种形式的 "This will make the maximum row length too long" (取决于我是 运行 只是直接查询还是包含 CREATE VOLATILE TABLE ... 等等。环绕查询。

撇开数据没有理由导致超过最大行长度不谈(我应该提取与 2016 年 2 月该脚本上次成功时完全相同的数据 运行) ,我能看到的唯一可能导致问题的是当我 运行 时,两个 phone # 字段以及保存地址类型的字段显示的最大长度为 16000 HELP TABLE。 phone #s 都只有 10 个字符(符合预期),地址类型最多只有 4 个字符。

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

  1. 什么会导致 Teradata 抛出关于行长度太长的错误,除了行长度实际上太长(就像我说它应该是相同的数据并且脚本之前工作过,所以我不是 100 % 确信服务器上不只是被黑了)
  2. 这 3 个字段的最大长度是可能的候选者吗?如果是这样,我如何强制它们变小(同样,当我 运行 LENGTH 值没有 returns as > 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;

我知道这个问题很笼统,但是 Google 没有找到任何有用的东西,我小组中的其他分析师也和我一样难过。

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

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

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

将过大的列转换为适当的大小,这也会提高 DISTINCT 的性能,从而将 VarChars 扩展为 Chars。