如何从 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 数据库超大规模的外部数据源