Datastage 培训资料
- 格式:doc
- 大小:3.64 MB
- 文档页数:37
DATASTAGE——一DATASTAGE经验积累一、JOB的分类与作用1、Server JOB:最为常用的Job类型,Job可以组合使用,Server Job是Job的最小单位。
原文档:If you have the Web Services pack installed an additional check box, Web Service Enabled, appears. Select it to indicate the job can be made available as a web service.2、Parallel JOB:3、Mainframe JOB:运行于大型机的JOB。
4、JOB Sequences:Job Sequence主要用于Job间的协作工作控制,如各Job的实行流程,出错处理,文件监控等。
二、jobstatus的用法jobstatus-jobstatus waits for the job to complete, then returns an exit code derived from the job status.命令格式为:dsjob –run[ –mode [ NORMAL | RESET | VALIDATE ] ][ –param name=value ][ –warn n ][ –rows n ][ –wait ][ –stop ][ –jobstatus][–userstatus][-local]project job三、判断NULL值 实例STAGE :JOIN STAGE设置:LEFT JOIN左输入语句:SELECT * FROM PMP_Insured_Amount右输入语句:SELECT COL_ID,TAB_NAME,WORK_DATE,REF_COLUMN1 AS UNIQUE_ID_IN_SRC_SYS,REF_COLUMN2,ROW_ID,HASHCODE AS B_HASHCODE,ANCHOR_ID,PARTITION_KEY,IS_DUPLICATED,'A' AS MARK --用以判断结果集右边是否为空FROM ETL_FOR_INC_TMP2SQL语句:SELECT A.*,B.*FROM PMP_Insured_Amount ALEFT JOIN ETL_FRO_INC_TMP2 BON A.UNIQUE_ID_IN_SRC_SYS = B.UNIQUE_ID_IN_SRC_SYS 功能:判断来自A表的所有记录,哪些能够B表关联,哪些不能与B表关联。
DataStage官方培训教程10DataStage是一个ETL工具,它提供了广泛的数据连接选项以及数据转换和清理功能,以帮助企业完成数据仓库构建和管理。
由于数据驱动的世界越来越重要,数据管理和ETL应用程序的需求也变得越来越迫切。
DataStage官方培训教程10涵盖了DataStage常见的任务和操作,为学习DataStage用户提供了完整的指导。
在本文中,我们将对DataStage官方培训教程10进行分析和实践,以帮助读者更好地了解和掌握DataStage。
DataStage官方培训教程10的结构和内容DataStage官方培训教程10是一本基于DataStage 11.7版本的官方培训教材。
该教材共包含15个单元,分为4个部分。
第一部分介绍了DataStage概述和安装过程,包括DataStage架构、组件、工作流程等。
第二部分介绍了DataStage的数据源定义、数据移动和数据变换。
第三部分主要介绍了DataStage的错误处理和调试,包括日志、报告、来源和目标检查等。
第四部分介绍了高级主题,如DataStage管理、性能调整、共享资源和集成JDBC驱动程序等。
DataStage官方培训教程10的学习方法和技巧DataStage官方培训教程10是一本详细的教材,需要耐心和时间来学习。
以下是一些学习方法和技巧,可以帮助读者更好地掌握DataStage。
1.按照教材结构进行学习按照各个部分和单元的结构进行学习,以便逐步深入理解每个主题。
特别是,在学习前两部分时需要仔细阅读和理解数据源定义、数据移动和数据变换的概念和操作指南,掌握其重要性和影响关系。
2.完整地跟随实例进行演示教材中提供了许多实例来示范DataStage的各个方面,读者可以用自己的DataStage环境进行实操,加深对DataStage的理解和熟练度。
值得注意的是,在学习高级主题时需要一定的实践经验和技能,否则可能会花费更多的时间和精力。
1、【第一章】datastage简介与工作原理1、简介数据中心(数据仓库)中的数据来自于多种业务数据源,这些数据源可能是不同硬件平台上,使用不同的操作系统,数据模型也相差很远,因而数据以不同的方式存在不同的数据库中。
如何获取并向数据中心(数据仓库)加载这些数据量大、种类多的数据,已成为建立数据中心(数据仓库)所面临的一个关键问题。
针对目前系统的数据来源复杂,而且分析应用尚未成型的现状,专业的数据抽取、转换和装载工具DataStage是最好的选择。
Websphere DataStage 是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据中心(数据仓库)目标数据库的集成工具。
DataStage 能够处理多种数据源的数据,包括主机系统的大型数据库、开放系统上的关系数据库和普通的文件系统等,以下列出它所能处理的主要数据源:大型主机系统数据库:IMS,DB2,ADABAS,VSAM 等开放系统的关系数据库:Informix,Oracle,Sybase,DB2,Microsoft SQL Server等ERP 系统:SAP/R3,PeopleSoft系统等,普通文件和复杂文件系统,FTP 文件系统,XML等IIS,Netscape,Apache等Web服务器系统Outlook等Email系统。
DataStage 可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。
其中每步都可以在图形化工具里完成,同样可以灵活的被外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。
其中简单的数据转换可以通过在界面上拖拉操作和调用一些DataStage 预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且DataStage 提供调试环境,可以极大提高开发和调试抽取、转换程序的效率。
DataStage基础及开发实践InfoSphere DataStage是IBM统一数据集成平台InfoSphere Information Server(IIS) 的重要组件,是业界主流的 ETL(Extract, Transform, Load) 工具。
DataStage执行从源系统到目标系统的批量和实时的数据转换和移动,它广泛支持各种异构平台的数据源和各种类型的数据格式(结构化、半结构化和非结构化数据);通过简单易用的图形化设计方式,并内置丰富的功能组件,从而支持从简单到高度复杂的数据结构中,对大量数据进行收集、清洗、整合和转换,具有满足最苛刻的数据集成需求所需的功能性、灵活性和可伸缩性。
本课程主要介绍InfoSphere DataStage的基本架构和产品特点,并基于实战案例详细讲解DataStage 的安装、配置、开发以及最佳实践。
课程大纲:第一课 IBM数据集成与治理方案简介第二课 Infosphere Datastage 架构、安装与配置第三课 Infosphere Datastage 管理与开发部署流程第四课 Infosphere Datastage 数据连接组件使用第五课 Infosphere Datastage 数据合并、排序与聚合组件使用第六课 Infosphere Datastage 数据转换组件使用第七课 Infosphere Datastage 自定义公共组件与过程第八课 Infosphere Datastage 作业序列和作业控制第九课 Infosphere Datastage 作业调试、调度与监控第十课 Infosphere Datastage 数据血源分析第十一课 Infosphere Datastage 性能调优和最佳实践第十二课 Infosphere Datastage 实战案例分享授课对象:本课程由浅入深,循序渐进地介绍DataStage的基本原理和开发实践,主要面向DataStage 的初学者以及基础开发运维人员。
Datastage培训1.什么是Datastage?➢设计jobs 抽取(Extraction)、转换(Transformation)、装载(Loading)即ETL ➢数据整合项目工具,如数据仓库、数据集市和系统移植。
DataStage的框架,如图-1:图-1在开发过程中是通过DataStage的四个客户端(DataStage Administrator如图-2, DataStage Manager如图-3, DataStage Designer如图-4, DataStage Director如图-5)来进行工作的。
图-2 图-3 图-4 图-5➢DataStage的基本开发流程:1.在Administrator中新建工程、定义全局和工程属性2.在Manager中导入元数据3.在Designer中定义job4.在Designer中编译job5. 在Director中验证,运行,监控job2.DataStage Administrator介绍主要功能:对server进行一些常规的设置、用来执行管理任务,如建立DataStage用户、新建和删除工程,设置工程的属性。
2.1.登陆登陆后的界面:在General标签中、可以看到当前server的版本是7.5.1.A,你也可以点击”NLS…”选择Client端的默认字符集。
2.2.新建工程选择Projects标签,在这里你可以选择Add按钮来新建一个工程“sjzh”如图:该工程存放的目录为“/home/dsadm/Ascential/DataStage/Projects/sjzh”在这里我们选择系统的默认路径。
选择“OK”就新建了一个工程,如图:2.3.更改“Licensing”选择“Licensing”标签,如图:在这里可以对Server和Client端的License进行更改。
比如当软件License过期时,要在不重新安装的情况下改变License就要使用这个功能。
1、【第一章】datastage简介与工作原理1、简介数据中心(数据仓库)中的数据来自于多种业务数据源,这些数据源可能是不同硬件平台上,使用不同的操作系统,数据模型也相差很远,因而数据以不同的方式存在不同的数据库中。
如何获取并向数据中心(数据仓库)加载这些数据量大、种类多的数据,已成为建立数据中心(数据仓库)所面临的一个关键问题。
针对目前系统的数据来源复杂,而且分析应用尚未成型的现状,专业的数据抽取、转换和装载工具DataStage是最好的选择。
Websphere DataStage 是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据中心(数据仓库)目标数据库的集成工具。
DataStage 能够处理多种数据源的数据,包括主机系统的大型数据库、开放系统上的关系数据库和普通的文件系统等,以下列出它所能处理的主要数据源:大型主机系统数据库:IMS,DB2,ADABAS,VSAM 等开放系统的关系数据库:Informix,Oracle,Sybase,DB2,Microsoft SQL Server等ERP 系统:SAP/R3,PeopleSoft系统等,普通文件和复杂文件系统,FTP 文件系统,XML等IIS,Netscape,Apache等Web服务器系统Outlook等Email系统。
DataStage 可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。
其中每步都可以在图形化工具里完成,同样可以灵活的被外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。
其中简单的数据转换可以通过在界面上拖拉操作和调用一些DataStage 预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且DataStage 提供调试环境,可以极大提高开发和调试抽取、转换程序的效率。
DataStage优化培训笔记Sequential file1、注意reject mode的设置2、优化:(在文件定长的前提下)number of readers per node 设定单节点的多个读取,根据实际情况设置多读个数read from multiple nodes 设定多节点的数据读取Change Capture Stage比较数据后会进行排序,如果之前的数据已经做了排序,则需要改变排序属性。
注意before 和after 的设置,不要设反。
Copy Stage在内存中操作的组件,建议1进多出用copy组件Tansformer Stage是内嵌的程序,一旦作业执行到此stage 程序会暂停进程,外部调用so的程序,Transformer组件中包含的函数,可以自己编写函数进行嵌入(通过routine实现)filter不能用于复杂的判断,copy不能增加赋默认值的字段..Sort Stage尽量不用,属于滞留组件,要等数据齐全后再能进行sort操作LookUp和Join的区别需要注意join一定要进行排序再进行处理(效率较低),LookUp是流水线实现(超过800M不能用此stage)Data Set StageStage自动设置数据为定长,实现多值读取,可以通过drop on input来限制输入数据。
生产环境优化:关注CPU(并发路数,逻辑节点数,物理作业数),内存,I/O交互1、在Oracle Enterprise 中使用select语句时,提取尽量少的字段数据2、在使用LookUp Stage时,如果数据从Oralce出来的,在LookUp table(参照表中)可以设置Lookup type=sparse(此方式是数据不提取到内存,直接在表中进行操作)3、在Oracle Enterprise中设置Partition table="需要查询的表名"可以实现多进程读取数据4、在文件系统中,为平衡节点负载,建议数据的输入和输出放在不同的磁盘上(可通过节点进行设置,如Sequential_File中设置FILE的路径)5、尽量少用repartition(sort stage 、join stage等组件需要对数据进行repartition)6、要保证有足够的scratch空间,当此空间满了之后,系统会把数据转移到tmp空间,效率变低7、网络瓶颈会影响作业效率(局域网通讯,Node之间的通讯问题)8、在MAIN机器上,设置是否关闭jobmonitor进程(pools"" 为默认节点,需要进行节点运行,如果对””进行赋值,则不作为默认节点,不做运行。
培训提纲1.ETL定义说明ETL过程指的是从数据源中抽取数据,然后对这些数据进行清洗、转换,最终加载到目标数据库和数据仓库中。
数据抽取:数据抽取主要是针对各个业务系统及不同网点的分散数据,充分理解数据定义后,规划需要的数据源及数据定义,制定可操作的数据源,制定增量抽取的定义。
数据转化和清洗:数据转换是真正将源数据变为目标数据的关键环节,它包括数据格式转换、数据类型转换、数据汇总计算、数据拼接等等。
但这些工作可以在不同的过程中处理视具体情况而定,比如,可以在数据抽取时转换,也可以在数据加载时转换。
数据清洗主要是针对系统的各个环节可能出现的数据二义性、重复、不完整、违反业务规则等问题,允许通过试抽取,将有问题的纪录先剔除出来,根据实际情况调整相应的清洗操作。
数据加载:数据加载主要是将经过转换和清洗的数据加载到数据仓库(或数据库)里面,即入库,操作者可以通过数据文件直接装载或直连数据库的方式来进行数据装载。
2.ETL工具的选择2.1.支持平台随着各种应用系统数据量的飞速增长和对业务可靠性等要求的不断提高,人们对数据抽取工具的要求往往是将几十、上百个GB的数据在有限的几个小时内完成抽取转换和装载工作,这种挑战势必要求抽取工具对高性能的硬件和主机提供更多支持。
因此,我们可以从数据抽取工具支持的平台,来判断它能否胜任企业的环境,目前主流的平台包括SUN Solaris、HP-UX、IBM AIX、AS/400、OS/390、Sco UNIX、Linux、Windows等。
2.2.支持数据源对数据源支持的重要性不言而喻,因此这个指标必须仔细地考量。
首先,我们需要对项目中可能会遇到的各种数据源有一个清晰的认识;其次对各种工具提供的数据源接口类型也要有深入了解,比如,针对同一种数据库,使用通用的接口(如ODBC/JDBC)还是原厂商自己的专用接口,数据抽取效率都会有很大差别,这直接影响到我们能不能在有限的时间内完成ETL任务。
工作总结1 如何重新启动DataStage服务器, 步骤如下: (5)2 DataStage开发经验积累: (5)2.1模板开发 (5)2.2通过S ERVER S HARED C ONTAINER在P ARALLEL J OB中添加S ERVER J OB S TAGE (5)2.3去除不需要的字段 (5)2.4T RANSFORMER S TAGE的使用 (5)2.5L OOK UP/JOIN 空值处理 (6)2.6D ATA S TAGE中默认和隐式类型转换时注意的问题 (6)2.7配置一个INPUT或OUTPUT,就VIEW DATA一下,不要等到RUN时再回头找ERROR (6)2.8D ATA型数据是比较麻烦的 (6)2.9行列互换之H ORIZONTAL P IVOT(P IVOT S TAGE) (7)2.10行列互换之V ERTICAL P IVOT (7)2.11O RACLE EE S TAGE在VIEW数据时出现的错误及解决方法 (9)2.12D ATA S TAGE SAP S TAGE的使用 (10)2.13C OLUM I MPORT S TAGE的使用 (10)2.14C OLUM E XPORT S TAGE的使用 (12)2.15G OT ERROR:C ANNOT FIND ANY PROCESS NUMBER FOR STAGES IN J OB J OBNAME解决 (13)2.16U NABLE TO CREATE RT_CONFIG NNN (14)2.17查看JOB和CLIENT的对应的后台进程 (14)2.18强制杀死DS进程 (14)2.19查看S ERVER E NGINE的进程 (15)2.20查看S ERVER L OCKS (15)2.21关于UNIX系统下无法启动服务的解决办法 (16)2.22L OCKED BY OTHER USER (17)2.23DATA S TAGE J OB L OG的处理 (17)2.24一些BASIC语言中处理字符串的函数 (17)2.25BASIC程序中使用到的一些语法知识 (18)3DS中常见问题记录 (22)3.1权限管理问题 (22)3.2JOB MAY BE BEING MONITORED或者是CLEANUP问题 (22)3.3删除文件的问题 (22)3.4SEQUENCE调度出现的错误问题 (23)3.17字符集问题 (23)3.18V ERSION C ONTROL的问题 (23)3.19SEQUENCE调不起JOB的问题 (23)3.20SEQUENCE调度失败的问题 (24)3.21DS发送邮件的配置问题 (25)3.22随机错误问题 (26)3.23DS中的日期问题 (26)3.24DS连接ORACLE问题 (27)。
Datastage培训1.什么是Datastage?设计jobs 抽取(Extraction)、转换(Transformation)、装载(Loading)即ETL 数据整合项目工具,如数据仓库、数据集市和系统移植。
DataStage的框架,如图-1:图-1在开发过程中是通过DataStage的四个客户端(DataStage Administrator如图-2, DataStage Manager如图-3, DataStage Designer如图-4, DataStage Director如图-5)来进行工作的。
图-2 图-3 图-4 图-5DataStage的基本开发流程:1.在Administrator中新建工程、定义全局和工程属性2.在Manager中导入元数据3.在Designer中定义job4.在Designer中编译job5. 在Director中验证,运行,监控job2.DataStage Administrator介绍主要功能:对server进行一些常规的设置、用来执行管理任务,如建立DataStage用户、新建和删除工程,设置工程的属性。
2.1.登陆登陆后的界面:在General标签中、可以看到当前server的版本是7.5.1.A,你也可以点击”NLS…”选择Client端的默认字符集。
2.2.新建工程选择Projects标签,在这里你可以选择Add按钮来新建一个工程“sjzh”如图:该工程存放的目录为“/home/dsadm/Ascential/DataStage/Projects/sjzh”在这里我们选择系统的默认路径。
选择“OK”就新建了一个工程,如图:2.3.更改“Licensing”选择“Licensing”标签,如图:在这里可以对Server和Client端的License进行更改。
比如当软件License过期时,要在不重新安装的情况下改变License就要使用这个功能。
2.4.设置Project的属性其他页面的属性,请勿修改。
2.5.设置TimeOut时间3.DataStage Manager介绍主要功能:存储和管理在Designer中定义jobs过程可再利用的元数据(在数据转换抽取过程中用到的表定义,文件输出格式,routines)、批量编译jobs、导入和导出工程等。
3.1.导入导出Job及其它组件导入●导出通过Export--→DataStage Components把设计好的job导出保存为DSX文件或者XML文件。
3.2.管理配置文件该文件是定义DataStage的网络节点、安装目录和运行时使用的临时文件。
可以配置多个节点。
目的是让作业并行、并发执行。
提高数据效率。
通过Tools- Configurations管理DataStage配置文件4.DataStage Director使用主要功能:验证(validate),运行(run),监控(monitor)你所定义的DataStage jobs,为每个job的运行定义时间表(schedule)。
4.1.运行已经编译好的Job注意以下几点:多个Job可以同时执行,但是需要仔细考虑Job的数据量,处理逻辑的复杂程度。
否则可能造成,其中一个或者多个Job异常。
Job并行运行时,可能会提高效率,但是也可能造成并行运行的时间比串行运行时间还长。
具体要看每个Job的CPU和I/O负荷。
每个Job可以生成多个Instance,多个Instance可以并发执行。
须特别注意:重新编译后同一个Job的Instance将会消失。
4.2.在Design中设置同一个Job生成多个Instance在Direct设置多个实例运行规则输入Invocation ID,即Instance No4.3.将编译好的Job加入计划任务未编译好的Job不能使用schedule。
4.4.监控Job的运行情况4.5.杀死僵死进程进入清除资源页面杀死进程5.DataStage Designer主要功能:抽取(extracting),清洗(cleansing),转换(transforming),整合(integrating)和装载(loading)数据到仓库中的表中。
常用的控件:ODBC Enterprise,Column Generator,Peek,Row Generator,Sequential File,Aggregator,Copy,Filter,FTP Enterprise,Funnel,Join,Merge,Modify,Switch,Transformer5.1.DataStage JOB属性设置进入JOB属性设置页面,并选择“允许同一个JOB多实例运行”。
设置JOB参数:5.2.Annotation功能特点:一般用于注释,可利用其背景颜色在job中分颜色区别不同功能块使用要点:5.3.数据库控件:Oracle Enterprise Stage 功能说明:从Oracle数据库中读取数据或者写数据到Oracle数据库中。
通常完成的操作:✓使用INSERT或UPDATE命令更新数据库表✓装入数据库表✓读取数据库表✓从数据库表中删除行✓在库表中直接执行查询操作✓将库表装入内存,然后执行查询操作具体用法:✓Inputs Page向数据库中写数据,关键是对Properties的配置Outputs Page:与Inputs Page类似,只是完成的是从数据库中读取数据。
5.4.Sequential File Stage功能特点:适用于一般顺序文件(定长或不定长),可识别文本文件。
使用要点:按照命名规范命名点住文件,双击鼠标,在general说明此文件内容,格式,存储目录等修改文件属性,文件名称,reject方式等到修改文件格式,比如记录结束符是什么,字段分隔符,字符串是用什么区别等输入此文件字段内容5.5.Copy Stage功能说明:Copy Stage可以有一个输入,多个输出。
它可以在输出时改变字段的顺序,但是不能改变字段类型。
注意:当只有一个输入及一个输出时最好将Force设置为True,这样可以在Designer里看到运行结束,否则将无法标识运行结束,但不会影响运行结果数据。
5.6.LookUp Stage功能说明:LookUp Stage把数据读入内存执行查询操作,将匹配的字段输出,或者在在符合条件的记录中修改或加入新的字段。
功能说明:将多个表连接后输出用JOIN Stage和LookUp Stage时做关联的字段类型和长度定义保持一致。
LookUp Stage 和 Join Stage的区别LookUp Stage将数据读入到内存中,所以效率很高,但是占用了较多的物理内存。
所以当reference data比较小的时候,我们推荐用LookUp Stage;当reference data比较大的时候,我们推荐用Join Stage。
5.8.Merge Stage功能说明:将Merge Key值相同的记录合并。
将其中的一个输入设定为Master,其余的为Update。
把Update中Merge Key相同的记录合并入Master。
5.9.Modify Stage功能说明:Modify stage 只能有一个输入及一个输出,它可以修改表结构:删除,保留一个字段;给字段改名;修改字段的数据类型。
Specification的具体用法:删除一个字段: DROP columnname [, columnname]保留一个字段: KEEP columnname [, columnname]改变字段:new_columnname [:new_type] = [explicit_conversion_function]old_columnname5.10.Aggregator StageStage类型:Processing Stage功能说明:将输入的数据分组,计算各组数据的总和或者按组进行其他的操作,最后将结果数据输出到其他的stage。
具体用法:✓Stage Page:描述stage的一般信息以及字段的分组信息和选择分组计算函数✓Inputs Page:详细描述输入数据信息,一般直接反映输入数据字段信息Oupputs Page:详细描述输出数据信息,即经过分组计算后的数据字段信息.5.11.Remove Duplicates StageStage类型:Processing Stage功能说明:输入根据关键字分好类的有序数据,去除所有记录中关键字重复的记录,通常与sort stage配合使用具体用法:✓Stage Page:Properties中的key值与之前sort stage的分类key值相同✓Inputs Page:对输入数据字段的描述Oupputs Page:对输出数据字段的描述5.12.Difference StageStage类型:Processing Stage功能说明:按字段比较两个文件,找出不同的记录。
(两个文件before和after,以before 为准,与after文件中的记录进行比较,找出before在after文件中没有或者有的记录) 具体用法:✓Stage Page比较策略说明Drop Output For Copy False:保留before及afte link中key值相同的行 True:删除before及afte link中key值相同的行Drop Output For Delete False:保留before link中有但是afte link中没有的key值所在的行True:删除before link中有但是afte link中没有的key 值所在的行Drop Output For Edit False:保留key值相同,value不同的行True:删除key值相同,value不同的行Drop Output For Insert False:保留before link中没有但afte link中有的key值所在的行True:删除before link中没有但afte link中有的key值所在的行调整before和after的顺序:✓Inputs Page:对输入数据字段的描述Oupputs Page:对输出数据字段的描述5.13.Switch StageStage类型:Processing Stage功能说明:将文件按照一定的条件(一般为字段的值)分割成多个子文件。
具体是将输入的每一条记录按照各自符合的条件(关键字的值)分配到不同的输出(Switch Stage 有一个input link 和多个output link,一个 reject link,output link最多可达128个;此功能很类似与C函数中的switch函数)。