「Sqlserver」数据分析师有理由爱Sqlserver之七-最刚需的数据导入导出功能-导入篇

December 17, 2023
测试
测试
测试
测试
2 分钟阅读

作为数据分析师的角色,数据库的作用是帮助存储数据和需要时可以导出所需数据的用途,这个用途在数据量一大时,不采用数据库方案是没有办法做到一个完美效果的,所以就算不深入了解数据库其他功能,单单数据导入导出功能,对一名合格的数据分析师来说,是必备的本领。 鉴于笔者所接触到的读者群体偏向Excel用户的业务导向的群体,此篇可能部分内容对熟悉数据库的群体过于简单,同时为了完整性的方案介绍,某些方法对Excel用户群体也是过于晦涩,直接跳过有个印象即可。

现实场景

在数据消费端,就算是数据分析师的角色,对于正规的公司来说,都不会轻易地开发数据库的访问权限给到终端用户,绝大部分的场景只会是给予导出Excel、csv等文件格式的权限,并且通常来说,导出的记录数也是有限制的,导出量太大,应用程序负荷过重,是不允许的。

同样的如果是外部数据,若非IT级别的系统间数据交换,更加只剩下导出文件的数据接口,根本不可能会给到数据库底层访问的可能性,例如天商的各大平台后台的订单数据、店铺访客数据、商品浏览数据等(可以使用爬虫去抓取,但成本也很高,平台反爬技术深严,是个很大的技术活)。

但数据分析过程中,不可能是孤立地看某一份文件的数据进行分析,数据量太少,且特别是时间维度上的不连贯,没法分析最有价值的同比、环比、累计等指标数据,没有对比就没有分析,若没有一份完整性的数据源,谈何数据分析。

所以数据分析师面临很大的刚需是将零散的文件型数据重新整合起来,放到数据库中进行集中式存放(Excel的容量有限,就算现在PowerBI技术的加入,也不能有一个完美的数据集中式管理并按需提取所需数据的效果)。

实现方式

针对不同的场景,可以有不同的方案选择,有些方案复杂化了,但在某些场景上,其他条件不具备时,有这些方案也是很让人舒畅的,读者们可以先大概知晓一下,在有条件实施容易的方案时,就暂没必要太细究复杂的方案,到用时再详细查阅文档用法。

Excel进行数据合并后再上传

前面提到的,一般导出的文件都是零散化的,没法一口气导出太多的历史数据,在零散的相同结构的文件数据,将其重新合并为一张连贯性的数据表,这一步骤在PowerQuery之前,有大量的Excel插件提供合并工作薄功能(Excel催化剂也不例外,同样有合并工作薄,不过是基于PowerQuery常规处理困难的一些特殊脏乱的数据的方案,能够使用PowerQuery的优先使用)。

在PowerQuery官方轻量级ETL工具出现后,基本上其他第3方插件的合并功能都会被取代完(没有条件用PowerQuery的可以使用,但数据分析师的角色,没有理由不给自己武装手头的工具,最基本的将Excel的版本更新到最新版,享受最新版的高级功能红利)。

具体PowerQuery如何多文件合并的操作,自行查阅相关资料,非常易学,投入产出比极大。

Sqlserver数据导入向导功能

对数据有一定了解的人都知道,数据是有数据类型的区分,特别是在数据库层面更是如此,在Excel上虽然有数据显示格式的设置,但它不强制进行数据转换,在导入数据库的过程中,同一列的数据,只能保留一种的数据类型,所以在Excel表格上加工的数据,需要自行进行数据规范,若同一列数据包含数字和文本格式时,最好将其数据格式高速为文本格式。

选择需要导入到的数据库,鼠标右键可进入导入数据向导,如下图。

导入数据向导入口

这里的导入导出向导,是对Sqlserver的专业ETL工具SSIS的一些界面式的封装,内核用到的是SSIS的能力。

一般数据导入、导出,需要重点告之程序的内容为:数据源是什么类型,数据源在哪里,具体对应到哪个表(Excel有多个工作表或其他数据库也有多个表),要导入到目标数据库的哪个数据库(一个Sqlserver可以有多个数据库对象),导入的目标表的定义(字段名和数据源表的匹配映射关系,数据类型是什么)。

有了新晰的以上的规划和理解,微软就会以最友好的界面化的向导来帮助我们将内容填写到对应的位置。

数据源确认

目标可选择SQL Native Client,如果导入的数据有问题,可以更换为OLEDB For Sqlserver,后者兼容度更高。

服务器的登录信息,如查本机的Sqlserver,可以直接用Windows帐号登录即可,否则可能需要输入目标服务器的登录信息。

目标服务器信息

导入的内容部分,可整个表导入,亦可写SQL查询导入部分数据,一般来说整个表导入即可,数据进到Sqlserver,再想怎么修改调整都容易。

导入的内容部分确认

接下来就是字段的匹配映射信息确认,点击【编辑映射】可看到详细内容,一般默认也可以,反正数据进到数据库再调整也不晚,分析类需求,也不用太纠结数据类型是否最省空间,稍微冗余一些也无所谓。

字段的匹配映射信息确认

到此步提示保存包之类的操作,不理会即可,是为了可复用准备而已,但笔者也没找到相应的复用方式,真正要复用,更科学的是用SSIS来做一个完整的包,日后有机会再给大家分享。

选择立即运行即可

感谢微软的体贴,这么多的步骤,在向导的一步步引导下,几乎可以零门槛去掌握它,全程界面操作,这就是微软风。

完美的向导操作,帮助我们完成了多个信息的配置

所有数据增量导入到目标表$sheet1中

一般来说,SSMS没有及时更新到刚刚我们创建的新表sheet1,需要点击表对象右键刷新下即可显示出来。

刷新操作

目标表数据已填充,源数据顺利导入到Sqlserver中,按我们向导设计的规则,表名、字段名、字段类型等都自动生成了(这些后续都可以修改如表名改个有意义的名字,字段名、字段类型也可修改,通常用视图来完成这些修改并输出较合适)。

目标表已有数据

链接服务器方式导入

上述方式导入的数据,对于一次性导入,不会再修改更新,是比较合宜的,若想长期引用一份Excel文件或其他csv文件的数据,当源文件更新了,在Sqlserver上可以同步更新到位,不妨试试链接服务器功能。

链接服务器几乎可以链接主流的数据库和文件数据如Oracle、MySQL、ACCESS、xlsx、csv等,这里不提供详尽方法,有此方面需要自行查阅资料。

之前的Sqlserver通过DAX查询访问SSAS数据模型亦有提及过,步骤也是和上述一样纯界面化操作,非常友好。对于源数据较大时,Excel单一工作表不能完整存放,不想多次分拆表格,可以考虑将数据在PowerQuery的处理结束后存放到PowerPivot上(此方案只能用PowerBIDesktop),再用前面介绍到的DAX查询的方式直接抽取到Sqlserver上,不过步骤也同样有点多,自行去根据实际情况去作选择。

使用行集函数

当上述的链接服务器做好后,可以直接使用行集函数OPENQUERY来查询源数据。

若没有权限创建链接服务器,也可使用其他OPENDATASOURCE、OPENROWSET等函数来创建,可能还是会有权限问题,文件要在Sqlserver安装的机器上,如果是共享文件夹路径的方式,方案又复杂许多(IT型解决方案就是这样,看似很简单的,但要考虑的因素多了,就不会想像中那么容易实现出来,但真正实现了,又保障了安全,又有稳定性、准确性保障)

具体的使用方法可查阅官方文档或其他博客类文章介绍。 https://docs.microsoft.com/zh-cn/sql/t-sql/functions/rowset-functions-transact-sql?view=sql-server-2017

SSIS数据导入方式

SSIS是专业的ETL工具(Extract数据抽取、Transform数据转换、Load数据加载),对于数据导入的功能,也是非常详尽,上述的向导也是最终转换为SSIS包的方式来实现,在SSIS上进行操作,更加灵活、强大,无论是数据源、目标数据存放的选择面都大很多,几乎可以将数据从任意源位置移动存放到任意目标位置。

Excel催化剂数据导入功能

使用Excel催化剂插件,可以让一般性的普通用户,快速将手头手工维护的数据源导入到数据库内,速度性能都非常理想,同时满足了低门槛,无需数据库技术背景。

只需有稍懂数据库的人员一起配合在数据库同步创建对应的表,即可让用户端快速、准确、方便地将其数据导入到Sqlserver数据库内,为企业内的数据整合带来了一个新的思路(大部分的数据应用方案仅停留在系统内数据,人工维护的最重要的数据很难被复用和进到数据仓库这样的环境)。

具体可参照Excel催化剂的功能介绍问题第20波。 第20波-Excel与Sqlserver零门槛交互-数据上传篇

其他方法

其他方法更少使有到,在某些特定场景上,以上方式都不太可行,或性能不满足时,可以参考下下面的方法。

使用BULK INSERT https://docs.microsoft.com/zh-cn/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017

使用BCP工具 https://docs.microsoft.com/zh-cn/sql/relational-databases/import-export/import-and-export-bulk-data-by-using-the-bcp-utility-sql-server?view=sql-server-2017

结语

条条大道通罗马,在数据导入的过程中,本篇给大家做了一些方法性的介绍,特别对大众化使用到的数据导入导出向导进行详细操作演示,帮助普通Excel用户群体不用太过恐惧于Sqlserver这样的专业数据库,一样只需按步就班跟着教程走下来,也能实现自己想要的导入效果。

同时也提供了其他方法的简短介绍,在不同需求上,可以灵活地使用,建议只需简单了解,真正要用时再详细学习,减少学习负担。

本篇为导入数据篇,同样刚需的导出数据,将在下一篇进行讲解,欢迎继续关注。

笔者未来聚焦在数据领域的分享,不限于Excel,会分享更多Sqlserver、dotNET、Azure、PowerBI等话题,升级数据分析的能力,欢迎继续关注。

继续阅读

更多来自我们博客的帖子

如何安装 BuddyPress
由 测试 December 17, 2023
经过差不多一年的开发,BuddyPress 这个基于 WordPress Mu 的 SNS 插件正式版终于发布了。BuddyPress...
阅读更多
Filter如何工作
由 测试 December 17, 2023
在 web.xml...
阅读更多
如何理解CGAffineTransform
由 测试 December 17, 2023
CGAffineTransform A structure for holding an affine transformation matrix. ...
阅读更多