我们有一个Excel中有十几万条数据
然后我们需要传入AzureSql数据库,因为数据量比较大,所以我们使用数据工厂进行传输 。现在实现一个Demo,从Blob中读取一个文件然后使用ADF传输数据到AzureSql中,如果没有表则自动创建表,有表的话更新插入。
现在我们目标明确:
源数据:Azure Blob文件,Azure Data Factory ,Azure Sql数据库
我们先准备一个文件如下图:
‘End’表主要是验证更新插入,到时候应该是‘zhaoliu’的birth和phone被更改,’lslsls’和‘lisonglisong’新增。最后应该共有9条数据。
我们创建一个名为‘adfdatasouce’的存储账户,然后再创建一个‘datasourcefile’的Blob容器来存储excel数据文件。
然后上传文件到Blob
准备AzureSql数据库。我们顺便配置一下防火墙方便访问,勾选允许Azure服务访问。(如果是全网访问可以设置范围”0.0.0.0 —— 255.255.255.255“)
创建一个名为ADFTranslateData的数据工厂,然后点击‘启动工作室’
转到工作室之后我们开始链接AzureBlob和Azure SQL打通两端。
然后我们给定一个链接的名称然后选定订阅,下拉找到我们实现创建好的存户账户。所有的填好之后我们可以点击测试链接,如果出现测试成功则说明链接成功。
重新搜索AzureSql,然后点击创建
同样的我们给AzureSql一个链接名称然后选择订阅,选择我们的SQL服务器名称,数据库,用户名和密码,然后我们点击测试链接。
使用创建的链接创建两个数据集,我们转到创作,点击数据集右侧的‘…’->新建数据集
我们搜索AzureBlob,选中Azure Blob选择继续,我们数据源是Excel文件所以这里选择Excel,选中后选择继续
然后我们填写里面的参数
链接的服务是Azure Blob服务
文件路径就是我们存放数据源文件的Blob路径
工作表模式我们选择名称
我们可以选择start初始的那份数据
将第一行作为页眉:假如不勾选的话,会将第一列 列名插入到数据库中
同样的我们再来一个一样的AzureBlob 然后导入名为end的sheet表,这个数据集是我们第二次运行测试更新插入用作的数据源
创建AzureSql数据集,同样我们搜索AzureSql然后选中AzureSql数据库
然后我们填写参数,表单填写即我们sql表。我们还没有所以这里空着就好了。
我们之前做的所有的准备工作都是为了数据流,我们数据源是AzureBlob,目标是AzureSql
我们 点开数据源选中start的数据集
然后转到投影,转换字段格式,因为我们ADF读取AzureBlob,为了确保数据 传输不会报错默认读取的Blob文件数据的类型都是字符串类型,我们要想根据文件的数据结构建表必须要准确数据类型。
然后我们点击右下角小加号,选择Alter行
然后我们转到更改行设置,将Alter行条件改为:
设置目标接收器,点击右下角的加号,找到最下面的接收器:
然后选中我们的Sql数据库:
转到设置我们选择允许更新插入
然后我们下面的键列,(这就使我们更新插入所依据的主键)我们下拉可以找到我们Excel中的列。
这个数据流就完成了
我们找到管道,新建管道然后再活动里搜索数据流,将数据流组件拖到我们的工作画布中
转到设置,下拉选取我们的数据流
然后我们点击调试,发现它提示我们选择表
我们转到AzureSql的数据集,然后选中手动输入,我们可以定义一个表名(一定要先勾选,不然无法写入):
然后再点击调试,弹出的框中确定就好
就绪之后再次点击调试,可以看到我们的数据流正在运行:
不久后我们可以看到运行成功:
然后我们转到Sql数据库查询看看是否生成了userinfo表:
可以看到没问题,不仅创建了表,而且准确创建了数据字段,ok,现在我们开始测试更新插入是否好用。返回到我们的ADF中:
这里测试我们为了节约直接修改数据流的源为‘End’的sheet:
Ok,成功之后我们再次返回Azure SQL查询看看是不是像我们所预料的那样:
这里因为视图局限性结了两次图,但是结果无误。