我试图重新运行一个旧的查询,一直在打行大小问题。经过一些变通之后,除了两个值之外,我已经获得了添加到表中所需的所有值。每当我尝试添加最后两个字段时,我都会得到某种形式的"这将使最大行长度太长"(取决于我是否正在运行直接查询或我包括CREATE VOLATILE TABLE
…等。
撇开没有理由的数据应该导致最大行长度被超过(我应该拉回完全相同的数据在2016年2月当这个脚本最后一次成功运行),我能看到的唯一的事情,可能会导致这个问题是两个电话#字段以及字段持有地址类型显示有16000的最大长度当我运行HELP TABLE
。电话号码都只有10个字符(如预期的那样),地址类型最多只有4个字符。
所以我想寻求帮助的是:
- 什么会导致Teradata抛出错误关于行长度太长除了那里的行长度实际上太长(就像我说的应该是相同的数据和脚本工作之前,所以我不是100%确信的东西不只是在服务器上被阻塞)
- 这3个字段的最大长度是一个可能的候选人吗?如果是这样,我如何强迫它们更小(再次,当我在值上运行
LENGTH
时,没有返回> 10,因此16000中的15990被浪费了)?为什么在这次运行中,字段会比上次运行时设置得更大? - 如果最大长度不是问题,我能做些什么来帮助诊断问题?
作为参考,我卡住的脚本部分在
下面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。