目的:抽取电子交易数据
完整流程如下图:
实现步骤:
1.执行sql任务sql如下:
select (current date - 1 days)||' 00:00:00' as start_date,(current date - 1 days)||' 23:59:59' as end_date from sysibm.sysdummy1
将查询的结果配置在变量中:
2.因为接口数据一次只能抽取一天的,所以为了历史数据,采用foreach容器,采用ADO 枚举器,将变量result传入
在变量映射部分获取到开始时间跟截止时间
3.新建http连接管理器,如图
4.新建web服务任务编辑器,如图,首先现在WSDL文件,直接下载的WSDL文件可能无法使用,原因大概为下载下来的
WSDL中有一百个接口,其中要使用的可能是70个,其余的是多余的,无法解析。解决方法:首先确认好要抽取数据的接口
名称,然后只保留这一个接口即可。
WSDL文件的格式如下,按照下面格式保留所需的接口,注意闭标签,当输入选项卡中看到接口名称,即说明WSDL文件配置成功。
definition of types........
definition of a message....
definition of a port.......
definition of a binding....
将foreach中变量传入到输入选项卡中,TokenRing为上游提供的固定值
并将获取到的内容输出到变量中
下一步由c#脚本生成xml文件,并将上一步的User::HDTYPE_2变量传入,脚本内容如下,因为该接口存在一定的问题,
webservice返回的数据中含有xsd内容,所以这个xml文件无法生成xsd,处理方法为用xpath将数据内容提取,生成一个
只含有数据的xml文件,然后再由ssis工具生成xsd文件,如图:
xml文件位置固定,这样每次有新的xml生成就会覆盖原有文件,生成的xsd需要注意的是,系统生成的xsd是由当前xml中的数据生成的,
数据库中为varchar类型的,但此次xml中只含有数字的话,xsd就认为这里为int类型,这里要人工将xsd中的数据类型与数据库中的数据
类型一一对照,手动修改。
public void Main()
{
// TODO: Add your code here
//String content = Dts.Variables["HDTYPE_2"].Value.ToString();
//MessageBox.Show(content);
System.Xml.XmlDocument xdoc = new System.Xml.XmlDocument();
xdoc.InnerXml = Dts.Variables["HDTYPE_2"].Value.ToString();
String text = "
String text2 = "";
XmlNodeList listNodes = xdoc.SelectNodes("//c_product");
foreach (XmlNode node in listNodes)
{
text +="
}
XmlNodeList listNodes2 = xdoc.SelectNodes("//c_product_control");
foreach (XmlNode node2 in listNodes2)
{
text2 += "
}
String eXml = text2 + "";
String Xml = text + eXml;
/*StreamWriter sw = new StreamWriter(@"D:\app\Microsoft SQL Server\MSAS11.HBDCAPP\OLAP\Backup\cigaTransService\GetCigaBaseDATAforJAVA.xml");
sw.WriteLine(Xml);
sw.Close();*/
System.Xml.XmlDocument xdoc2 = new System.Xml.XmlDocument();
xdoc2.InnerXml = Xml;
xdoc2.Save(@"D:\app\Microsoft SQL Server\MSAS11.HBDCAPP\OLAP\Backup\cigaTransService\GetCigaBaseDATAforJAVA.xml");
Dts.TaskResult = (int)ScriptResults.Success;
}
xml源处理好后,进行数据类型的转换,转换也要跟数据库中进行一一对应,精确度,字符串的长度等
处理好后,即可插入到数据库中,结束后对重复的数据进行删除
做完该项抽取后,可以对该包做一个加密处理,双击控制流空白处,点击属性,在如下图中进行设置