我正在尝试重新运行旧查询,并且一直在遇到行大小问题。经过一些解决方法之后,我得到了除了我需要的两个值之外的所有值。每当我尝试添加最后两个字段时,我会得到某种形式的“这将使最大行长度过长”(取决于我是仅运行直接查询还是包含CREATE VOLATILE TABLE
...等围绕查询。
暂且没有理由说数据应该导致超出最大行长度(我应该在2016年2月这个脚本上次成功运行时提取完全相同的数据),这是我唯一的事情。我能够看到可能导致问题的是,当我运行HELP TABLE
时,两个电话#字段以及持有地址类型的字段显示最大长度为16000。手机#s只有10个字符(如预期的那样),地址类型最多只有4个字符。
所以我正在寻求帮助的是:
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;
我知道这个问题是广泛的,但谷歌并没有提出任何有用的问题。我小组中的其他分析师和我一样难过。
答案 0 :(得分:3)
如果此查询在您为会话设置了不同的字符集之前有效。
当你得到 9804:响应行大小或常量行大小溢出时,它通常是由于会话使用UTF-8或UTF-16作为字符集。
列可能被定义为LATIN(即每个字符一个字节),但对于UTF-16,大小加倍,而对于UTF-8,它是三倍。结果行的最大大小为64k, 3 * 16000 *(2 | 3)明显超过该值(这是基于定义的大小,而不是实际大小)。
将超大列投射到合适的大小,这也会提高DISTINCT的性能,从而将VarChars扩展为Chars。