实用教程(Teradata).ppt
《实用教程(Teradata).ppt》由会员分享,可在线阅读,更多相关《实用教程(Teradata).ppt(81页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实用教程(Teradata)陆世潮2008年9月2 11/26/2022问题总结常见问题分类:常见问题分类:1.表属性不对:Set/Multiset问题:INSERT操作慢2.主索引(PI)设置不合理问题1:数据倾斜度大,空间爆满。问题2:JOIN操作,数据需要重分布。3.分区索引(PPI)设置不合理问题:全表扫描4.连接条件过于复杂问题:系统无法优化执行计划5.缺乏统计信息问题:系统无法找到最优化的执行计划SQL跑得慢哈!跑得慢哈!3 11/26/2022提纲Teradata架构常见问题,及解决方法Teradata工具实用小技巧JOIN的实现机制JOIN的优化4 11/26/2022Tera
2、data 体系架构Teradata and MPP SystemsRDBMS ARCH5 11/26/2022Logical Example of NPPI versus PPI4 AMPs with Orders Table defined with PPI on O_Date.RHO_#O_DateRHO_#O_DateRHO_#O_DateRHO_#O_Date35100706/0126100206/0124100406/0120100506/0139101106/0136101206/0132100306/0143101006/0114100106/0106100906/0104100
3、806/0108100606/0103101606/0217101306/0248102306/0207101706/0216102106/0245101506/0209101806/0227101406/0244102206/0202102406/0211101906/0222102006/0201102806/0312103106/0328103206/0310103406/0329103306/0334102906/0319102506/0340103506/0347102706/0325103606/0331102606/0346103006/0323104006/0430103806
4、/0442104706/0413103706/0421104506/0436104306/0405104806/0415104206/0433103906/0418104106/0438104606/0441104406/04 4 AMPs with Orders Table defined with NPPI.01102806/0312103106/0328103206/0310103406/0329103306/0334102906/0319102506/0340103506/0347102706/0325103606/0331102606/0346103006/0303101606/02
5、17101306/0248102306/0207101706/0216102106/0245101506/0209101806/0227101406/0244102206/0202102406/0211101906/0222102006/0214100106/0135100706/0139101106/0106100906/0126100206/0136101206/0104100806/0124100406/0132100306/0108100606/0120100506/0143101006/0123104006/0430103806/0442104706/0413103706/04211
6、04506/0436104306/0405104806/0415104206/0433103906/0418104106/0438104606/0441104406/04RHO_#O_DateRHO_#O_DateRHO_#O_DateRHO_#O_Date 6 11/26/2022提纲Teradata架构常见问题,及解决方法Teradata工具实用小技巧JOIN的实现机制JOIN的优化7 11/26/2022表属性:Set&MultiSetSet Table不允许记录重复MultiSet Table允许记录重复默认值:Set TableCreate Table.AS.生成的目标表属性默认为S
7、et Table对SET Table进行INSERT操作,需要检查是否存在重复记录相当的耗资源若真要限定唯一性,可以通过UPI或USI实现CREATE SET TABLE pmart.RPT_NM_GRP_PRE_WARN_MON,(CAL_Month INTEGER TITLE 统计月份,ORG_NUM CHAR(12)TITLE 集团编号,City_ID CHAR(3)TITLE 地市标识,ORG_SUBS_GRP_NUM CHAR(10)TITLE 集团用户群编号,ORG_Title VARCHAR(200)TITLE 集团名称,ORG_Level CHAR(2)TITLE 集团级别,S
8、TAT_Item_Code CHAR(2)TITLE 统计项,STAT_Value DECIMAL(18,2)TITLE 统计值)PRIMARY INDEX(ORG_NUM);例子:pmart.RPT_NM_GRP_PRE_WARN_MON 内蒙移动集团客户预警指标月报表假设原有1286449条记录插入:152853条记录耗时:15秒8 11/26/2022表属性:Set&MultiSet(cont.)CREATE MULTISET TABLE pmart.RPT_NM_GRP_PRE_WARN_MON(CAL_Month INTEGER TITLE 统计月份,ORG_NUM CHAR(12)
9、TITLE 集团编号,City_ID CHAR(3)TITLE 地市标识,ORG_SUBS_GRP_NUM CHAR(10)TITLE 集团用户群编号,ORG_Title VARCHAR(200)TITLE 集团名称,ORG_Level CHAR(2)TITLE 集团级别,STAT_Item_Code CHAR(2)TITLE 统计项,STAT_Value DECIMAL(18,2)TITLE 统计值)PRIMARY INDEX(ORG_NUM);例子:pmart.RPT_NM_GRP_PRE_WARN_MON 内蒙移动集团客户预警指标月报表建议:建议:Teradata中都用中都用 Multi
10、Set假设原有1286449条记录插入:152853条记录耗时:1秒例子:CREATE MULTISET TABLE tttemp.VT_SUBS_VIOC_QUAN as(SELECT*FROM tttemp.MID_SUBS_VIOC_QUAN WHERE CAL_MONTH=200802 AND*)WITH DATA PRIMARY INDEX(subs_id);临时表临时表,默认为默认为:Set需要指定为需要指定为:Multiset字段越多,记录越多字段越多,记录越多差别越明显差别越明显9 11/26/2022PI(Primary Index 主索引)的选择PI影响数据的存储与访问影响
11、数据的存储与访问,其选择标准:不同值尽量多的字段(More Unique Values)使用频繁的字段:包括值访问和连接访问少更新PI字段不宜太多最好是手动指定PI 例子:用户语音业务量中间表用户语音业务量中间表CREATE MULTISET TABLE tttemp.MID_SUBS_VIOC_QUAN(CAL_Month INTEGER TITLE 统计月份,City_ID CHAR(4)TITLE 地市标识,Channel_ID CHAR(8)TITLE 渠道标识,Subs_id CHAR(12)TITLE 用户标识,。)PRIMARY INDEX(subs_id);例子:用户语音业务量
12、临时表用户语音业务量临时表CREATE MULTISET TABLE tttemp.VT_SUBS_VIOC_QUAN as(SELECT*FROM tttemp.MID_SUBS_VIOC_QUAN WHERE CAL_MONTH=200802 AND*)WITH DATA PRIMARY INDEX(subs_id);Subs_ID:频繁使用频繁使用 Unique Value多多如果不指定如果不指定PI,系统默认为系统默认为:Cal_Month10 11/26/2022PI(Primary Index 主索引)的选择(cont.)例子:梦网客户活跃客户分析梦网客户活跃客户分析CREATE
13、MULTISET TABLE PMART.FCT_DATA_MONNET_ACTIVE_MON(CAL_Month INTEGER TITLE 统计月份,City_ID CHAR(4)TITLE 地市标识,Channel_ID CHAR(8)TITLE 渠道标识,Mont_SVC_Type_Cod CHAR(3)TITLE 梦网业务类型编码,Mont_SVC_CAT_MicroCls_Cod CHAR(3)TITLE 梦网业务分类小类编码,Mont_SVC_CHRG_Type_Cod CHAR(2)TITLE 梦网业务计费类型编码,THR_Brand_Cod CHAR(1)TITLE 三大品牌
14、编码,Mont_Consume_Level_Cod CHAR(2)TITLE 梦网消费层次编码,Consume_Level_Cod CHAR(2)TITLE 消费层次编码,。)PRIMARY INDEX(CAL_Month,City_ID,Channel_ID,Mont_SVC_Type_Cod,Mont_SVC_CAT_MicroCls_Cod,Mont_SVC_CHRG_Type_Cod,THR_Brand_Cod,Mont_Consume_Level_Cod,Consume_Level_Cod);PI:9字段 2字段:City_ID,Channel_ID 调整PI后,在右边的SQL中,P
15、I是否起作用?以下以下SQL,PI是否起作用?:是否起作用?:1.值访问Select*From FCT_DATA_MONNET_ACTIVE_MONWhere City_ID=070010 and Channel_ID=0100 and cal_month=2007072.连接访问Select*From FCT_DATA_MONNET_ACTIVE_MON ALEFT JOIN MID_CHANNEL_INFO_DAILY B ON A.Channel_ID=B.Channel_ID and A.City_ID =b.City_ID LEFT JOIN VW_CDE_REGION_TYPE C
16、 ON A.City_ID =C.City_ID 3、值访问连接访问Select*From FCT_DATA_MONNET_ACTIVE_MON A,VT_INFO BWHERE A.Channel_ID=B.Channel_ID AND A.City_ID =B.City_ID AND A.CAL_MONTH=200707 AND A.Consume_Level_Cod=B.Consume_Level_Cod11 11/26/2022PPI的使用PPI(Partition Primary Index,分区索引),把具有相同分区值的数据聚簇存放在一起;类似于SQL Server的聚簇索引(Cl
17、uster Index),Oracle的聚簇表(Cluster Table)。利用PPI,可以快速插入/访问同一个Partition(分区)的数据。CREATE MULTISET TABLE qdata.TB_DQC_KPI_CHECK_RESULT (TX_DATE DATE FORMAT YYYYMMDD TITLE 数据日期 NOT NULL,KPI_CODE INTEGER TITLE 指标代码 NOT NULL,。)PRIMARY INDEX(KPI_CODE)PARTITION BY RANGE_N(TX_DATE BETWEEN CAST(20030101)AS DATE FOR
18、MAT YYYYMMDD)AND CAST(20191231)AS DATE FORMAT YYYYMMDD)EACH INTERVAL 1 DAY,NO RANGE OR UNKNOWN);Select*From TB_DQC_KPI_CHECK_RESULTWhere tx_date=20070701;或Where tx_date between 20070701 and 20070731;或Where tx_date 20070701;但Where tx_date like 200707%;不起作用12 11/26/2022PPI的使用(cont.)Partition上不要使用表达式,否
19、则Partition不能被正确使用。T1.tx_date/100=CAST(20070917AS DATE FORMAT YYYYMMDD)/100Substring(T1.tx_date from 1 for 6)=200709应该修改为 T1.tx_date=CAST(20070901 AS DATE FORMAT YYYYMMDD)13 11/26/2022PPI的使用(cont.)脚本:tb_030040270.pl/*删除当月*/2小时 del BASS1.tb_03004 where proc_dt=200709;insert into BASS1.tb_03004 7小时。sel
20、.from pview.vw_evt_cust_so cust where acpt_date=cast(200710|01 as date)cast(200710|01 as date)写法错误,PPI不起作用日期的正确写法日期的正确写法:Cast(20071001 as date format YYYYMMDD)在proc_dt建立PPIPPI字段从Load_Date调整为acpt_date14 11/26/2022创建可变临时表它仅存活于同一个Session之内注意指定可变临时表为multiset(通常也要指定PI)可变临时表不能带有PPI例子1:create volatile mult
21、iset table vt_RETAIN_ANLY_MON as(select col1,col2,from where group by.)with data PRIMARY INDEX(PI_Cols)ON COMMIT PRESERVE ROWS;例子2:create volatile multiset table vt_RETAIN_ANLY_MON(col1 char(2),col2 varchar(12)NOT NULL)PRIMARY INDEX(PI_Cols)ON COMMIT PRESERVE ROWS;15 11/26/2022创建可变临时表(cont.)例子3:crea
22、te volatile multiset table vt_RETAIN_ANLY_MON as(select col1,cast(adc as varchar(12)col2 from where )with no data PRIMARY INDEX(col1)ON COMMIT PRESERVE ROWS;例子4:create volatile multiset table vt_net_gsm_nl as pdata.tb_net_gsm_nl with no data ON COMMIT PRESERVE ROWS;字段col2将用unicode字符集;当跟普通字段(latin字符集
23、)join时,需要进行数据重新分布。不建议不建议失败:因为pdata.tb_net_gsm_nl 有PPI而可变临时表不允许有PPI16 11/26/2022固化临时表固化临时表,就是把查询结果存放到一张物理表。固化临时表,就是把查询结果存放到一张物理表。共下次分析或他人使用共下次分析或他人使用Session断开之后,仍然可以使用。断开之后,仍然可以使用。示例1:CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC as(select*from pview.vw_net_gsm_nl)WITH no DATA PRIMARY INDEX(subs_id);INS
24、ERT INTO tttemp.TMP_BOSS_VOICSELECT*FROM pview.vw_net_gsm_nl WHERE*;示例2:CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC as(select*from pview.vw_net_gsm_nl WHERE*)WITH DATA PRIMARY INDEX(subs_id);示例3:(复制表,数据备份)CREATE MULTISET TABLE tttemp.TMP_BOSS_VOIC AS pdata.tb_net_gsm_nl WITH DATA ;17 11/26/2022数据类型注意
25、非日期字段与日期字段char&date的转换与关联:如果数据类型一致可以直接使用;在CASE WHEN or COALESCE一定要使用显式的类型转换(CAST)CASE WHEN A=B THEN DATE1 ELSE 20061031 END应写成CASE WHEN A=B THEN DATE1 ELSE CAST(20061031 AS DATE)END数值运算时,确保运算过程中不丢失计算精度。CAST(100/3 AS DEC(5,2)应该写成CAST(100/3.00 AS DEC(5,2)18 11/26/2022字符(串)与数字相比较比较规则比较规则:1)比较两个值比较两个值(字
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实用教程 Teradata
限制150内