前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将数据从 SQL Server 导入 Azure Storage Table

将数据从 SQL Server 导入 Azure Storage Table

作者头像
Edi Wang
发布2020-06-15 14:29:56
1.9K0
发布2020-06-15 14:29:56
举报
文章被收录于专栏:汪宇杰博客汪宇杰博客

导语

最近有个需求要将数据存储从 SQL Server 数据库切换到 Azure Storage 中的 Table。然而不管是 SSMS 还是 Azure Portal 都没有提供直接的导入功能,是不是又想自己写程序去导数据了?其实不用!没有点过数据库天赋的我996了一个晚上,终于找到了点点鼠标就搞定的方法,今天分享给大家。

但首先要告诫大家的是,SQL Server 这样的关系型数据库和 Azure 提供的 NoSQL 服务概念不一样。在进行操作之前,请研究并确保自己的业务真的适合 Storage Table (或 Cosmos Table),以免适得其反。

准备工作

你当然需要一个 Azure Storage Account,在其中建立空表,用于导入数据,例如:LinkTracking

下载安装 Microsoft Azure Storage Explorer

https://azure.microsoft.com/en-us/features/storage-explorer/

下载安装 SQL Server Management Studio (仅 Windows) 或 Azure Data Studio (跨平台)

https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15

https://docs.microsoft.com/en-us/sql/azure-data-studio/download-azure-data-studio?view=sql-server-ver15

导出数据

我们需要将 SQL Server 表中的数据导出为 CSV 格式,以便导入 Azure Storage Table。但要对数据做一些处理,不然就会爆,然后996。

以单表数据导出为例,Azure Storage Table 需要两个必要字段:PartitionKey, RowKey。而 SQL Server 的表往往用一列或多列作为主键,并且没有固定的名称约束。因此,我们首先要处理的就是主键。

我的 LinkTracking 表使用 GUID 类型的 Id 作为主键,将其转换为 RowKey。至于 PartitionKey,原始表中不存在,我们可以自己创造一个固定的字符串即可,比如 'LT996'。

通过简单的 SELECT 语句就可以把 PartitionKey, RowKey 搞定:

SELECT

'LT996' AS PartitionKey,

lt.Id AS RowKey

-- 省略其他列

FROM LinkTracking lt

接着还有个福报要修,即 DateTime 类型的数据需要转换为 ISO 8601 标准格式,不然导入数据的时候就会爆,并且只告诉你爆了,不告诉你原因,导致996。

ISO 8601时间日期格式可参考:https://en.wikipedia.org/wiki/ISO_8601

T-SQL 中转换 ISO 8601 也很简单:

CONVERT(char(30), DateTime数据,126)

现在,最终的 SQL 语句为:

SELECT

'LT996' AS PartitionKey,

lt.Id AS RowKey,

lt.LinkId, lt.UserAgent, lt.IpAddress,

CONVERT(char(30), lt.RequestTimeUtc,126) AS RequestTimeUtc

FROM LinkTracking lt

接下来我们就得把查询结果导出到CSV文件了,不想996的话,有三种办法:

小数据量,轻量级工具

如果你表中的数据量不多,可以选用 Azure Data Studio 这款跨平台工具完成导出操作,用不着装笨重的、启动巨慢的SSMS。

在 Azure Data Studio 中执行 SQL 语句后,点击结果集网格右边的工具栏中的导出为 CSV 按钮,即可将结果保存为 含有列名的 CSV 文件。

但是这种方法有缺点。首先是结果网格有数据量限制,不仅限制条数,也限制列里显的字符数量,遇到企业场景大量数据肯定要爆。于是就有了下面的两种办法。

常规数据量,用工具,而不是玩具

经典老牌的 SSMS 提供了专门的数据导出向导,支持 CSV 格式。其中也有两种导出方式。

从 SQL 语句导出

我们仍就可以利用刚才写的 SQL 导出数据,但这次不再从结果网格中导出(尽管SSMS支持这么做,但也面临同样的数据量限制)。

在数据库上点右键,选择 Tasks - Export Data

在向导里将数据源选为 SQL Server Native Client,并连接自己的数据库。

然后把 Destination 选为 Flat File Destination,并指定一个 CSV 路径作为目标。

然后选择 Write a query to specify the data to transfer

输入刚才的 SQL 语句

确定空格编码符合Windows规则,及分隔符为逗号

Next到底,完成导出

从 View 导出

另一种方法是建一个View,仍然用相同的SQL语句,好处是方便重用。

View 的数据导出方法与刚才几乎一致,唯一的区别是在 “Specify Table Copy or Query”中选择"Copy data from one or more tables or views"。

导入数据

启动 Azure Storage Explorer,打开 Azure Storage 中要导入数据的目标表,在工具栏上点击 Import

选择刚才导出的 CSV 文件,核对并更改数据类型。在我的例子里,我仅需要更改 RequestTimeUtc 为 DateTime 类型。

点击 Insert 后,稍等片刻,数据就被成功导入了!

你也可以回到 Azure Portal 看到这些数据

更多关于 Azure Storage Table,可参考 https://docs.microsoft.com/en-us/azure/storage/tables/table-storage-overview

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 汪宇杰博客 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档