wind_sand 发表于 2006-10-19 12:19

sybase IQ的加载错误

下面是我使用load table语句从一个.out文件(相当于文本文件)中把数据导入到IQ库表中,下面是导入的语句:
load table ODS_G_PPS_SMS_CDR(
CDR_NAME '"|"' ,
SERVICE_KEY '"|"' ,
NET_FLAG '"|"' ,
CALLING_PARTY_NUMBER '"|"' ,
USER_NO '"|"' ,

CALLED_PARTY_NUMBER '"|"' ,
ADDRESS '"|"' ,
MOBILE_ZONE '"|"' ,
OPPOSE_AREA_CODE '"|"' ,
SMS_TYPE '"|"' ,

FREE_FLAG '"|"' ,
SM_LENGTH '"|"' ,
SERIAL_NO '"|"' ,
CHARGE_FLAG '"|"' ,
SM_COST '"|"' ,
SEND_TIME '"|"' ,
CORP_ID '"|"' ,

SERVICE_TYPE '"|"' ,
PAY_MSDN '"|"' ,
FEE_VALUE '"|"' ,
GIVEN_VALUE '"|"' ,
SP_NUMBER '"|"' ,
MORELATETO_MT_FLAG '"|"' ,

RESERVE_1 '"|"' ,
RESERVE_2 '"|"' ,
RESERVE_3 '"|"' ,
RESERVE_4 '"|"' ,
RESERVE_5 '"|"' ,
RESERVE_6 '"|"' ,
bill_date '"|"' ,
ods_date '\x0a'
)
from '/bk_syb/syb_bak01/InterfaceFile/ODS_G_PPS_SMS_CDR_20061018.out'
ESCAPES OFF QUOTES OFFWITH CHECKPOINT ON ON FILE ERROR ROLLBACK;

结果出现如下提示错误:number of unique values exceeded for index.
ODS_G_PPS_SMS_CDR_SERVICE_TYPE_lf 10000

camham 发表于 2006-10-19 14:12

建表时iq unique值小了,load进来不同值超出了索引的限制。
数据load应该不会失败

wind_sand 发表于 2006-10-19 15:45

我查看了LF索引的聚合度是小于1500的,在表ODS_G_PPS_CDR的字段SERVICE_TYPE的不同值我统计了一下有2027个,这个值是8月份的数据,是已经成功插入到表中的。那么这个也应该报错呀!
我用sp_iqcolumn查看了表的字段属性,其中针对SERVICE_TYPE是这样的:
domain_name    width   scale   null    cardinalityest_cardinality
   varchar                    1         0           Y        8536            0
我想问问cardinality是指什么?est_cardinality呢?

action929 发表于 2006-10-19 16:29

LF索引的聚合度是小于1500的

这个是如何看得?

[ 本帖最后由 action929 于 2006-10-19 16:58 编辑 ]

wind_sand 发表于 2006-10-19 17:14

看的一些资料上提到:
“此索引【LF】适用于级数较低的情况 (distinct值<1500)”
那么如果查看iq unique呢?

action929 发表于 2006-10-19 17:18

这次加载的不同值 超过了10000,可以把 lf 索引 改称HG 索引吧

action929 发表于 2006-10-19 17:31

做了个测试,发现当列中的不同值超过10000的时候连lf索引都创建不了,看样子你用不了lf索引了

wind_sand 发表于 2006-10-19 17:41

你指的10000是在建立表的时候的iq unique的值吗?
因为表不是我建的。我不是很清楚表中字段的iq unique当初设的大小,但是在字段属性中的cardinality应该就是指现在表示不同值的个数吧。但是如何查看当初设置的不同值的个数呢?
还有就是lf是适合于不同值小于1500的,那么它的上限是多少呢?每种索引是否都有个上限,还是部分有?

action929 发表于 2006-10-19 18:05

更据我的理解 iq unique 是用在 FP 索引上的,应为没个列默认都是FP索引,iq unique的值只是决定了存放FP索引的字节的大小,就算超过了也不会导致load失败。
IQ UNIQUE constraint defines the approximate cardinality of a
column
&#1048698; Used for internal FP index storage optimization
&#1048698; <256 values - Single-byte lookup table (1-byte FP index)
&#1048698; >255 and <65537 - Two-byte lookup table (2-byte FP index)
&#1048698; Default value is 65,537


此索引【LF】适用于级数较低的情况时说如果不同值不超过1500 推荐用lf索引,至于这个 10000 的限制不知道是不是sybase iq内部的限制,这个我没有找到资料,但是这个字段上再建lf索引不太合适了,你可以删了它,然后用查询计划看看 iq 推荐你用什么索引

dl_zhenglp 发表于 2011-07-12 15:09

我也是创建了一个表,建立了LF索引,循环插入递增数据,发现20000行都没事儿。搞不明白了。
页: [1] 2
查看完整版本: sybase IQ的加载错误