如何从 Azure SQL 数据库中的 Blob 解析 Json

Posted

技术标签:

【中文标题】如何从 Azure SQL 数据库中的 Blob 解析 Json【英文标题】:How to parse Json from Blob in Azure SQL Database 【发布时间】:2021-07-12 13:44:52 【问题描述】:

我不确定执行此操作的最有效方法是什么,我应该使用 openrowset 将文件读取到单个 varchar(max) 列(在表中)并交叉应用 OPENJSON(如下所示),还是有没有更有效的方法?

SELECT * FROM  
OPENROWSET.....
CROSS APPLY OPENJSON ( j.Blobdata )  
WITH (   
              source_object   varchar(200) '$.source_object.Number' ,  
              Date     datetime     '$.Order.Date',  
              Customer varchar(200) '$.AccountNumber',  
              Quantity int          '$.Item.Quantity'  
 ) 

【问题讨论】:

听起来足够高效,除非您想使用某种客户端语言(C# 或 Powershell 等)。我假设您使用的是OPENROWSET...SINGLE_NCLOB 嗨@Gokhan,我们不能说这是最有效的方法,两者都足够有效。它们都是官方文档推荐的。只需选择您最喜欢的方式。如果我的回答对你有帮助,你可以接受它作为答案。这对其他社区成员可能是有益的。谢谢。 【参考方案1】:

我们可以使用 T-SQL BULK INSERT 命令或 OPENROWSET 函数将文件从 Azure Blob 存储直接加载到 Azure SQL 数据库中。

我们不能说哪种方法最有效,但两者都足够有效。它们都是官方文档推荐的。只需选择您最喜欢的方式即可。

更多详情,请参考此文档:Import JSON documents from Azure Blob Storage

HTH。

【讨论】:

如果要导入 1000 个 json 文件,唯一的方法是调用 OPENROWSET 或 BULK INSERT 1000 次? (文件不一定都在同一个文件夹中或文件夹中的所有文件都包括在内,因此通配符(*)将不起作用) @Gokhan 你的问题并没有说你有这么多的 json 文件。那是一个不同的问题。如果两个 json 文件的 schema 相同,我们需要使用其他方式。 假设我们有 1000 个 json 文件,每个文件包含一条记录,或者在某些情况下最多 100 条记录,调用 openrowset 1000 次似乎效率不高(检查每个文件对 blob 等的文件访问并添加延迟) 嗨@Gokhan,我能理解你。但是您当前的问题是将 JSON 文件加载到 Azure SQL 数据库中的最有效方法,而不是将多个文件加载到 Azure SQL 数据库中。并且文件可能有不同的记录,实际上它们是您知道的不同问题。我建议您修改您的问题或发布一个新问题。谢谢!根据我的经验,如果我们有这么多文件并希望将它们加载到 Azure SQL,我们需要其他 ETL 工具,例如数据工厂。 @Gokhan 您还有其他顾虑吗?

以上是关于如何从 Azure SQL 数据库中的 Blob 解析 Json的主要内容,如果未能解决你的问题,请参考以下文章

将 Azure 数据工厂上的数据管道从 SQL Server 复制到 Blob 存储

无法创建从 Azure Blob 存储容器到 Azure Sql 数据库超大规模的外部数据源

从 BLOB 批量插入 Azure SQL 说文件无法打开

从 AKS 访问 Azure Blob 存储

如何使用 .net 中的 SAS 密钥从 Azure Blob 读取数据

从 Azure Excel blob 文件将数据导入 SQL Server