[英]How to load json from Azure Blob to SQL Server using SSIS?
[英]How to import Azure Storage Blob JSON into Azure SQL Server
{
"Events":
[
{
"dataOne":7.5555555555555555,
"dataTwo":7.5555555555555555,
"dataFive":1025,
"dataSix":0,
"dataSeven":1025,
"dateTimeLocal":1234567890,
"dateTimeUTC":1234567890
}
],
"infoType":"type1",
"deviceID":"00000000000000000",
"dateTimeLocal":1234567890,
"dateTimeUTC":1234567890,
"EventProcessedUtcTime":"20xx-0x-xxT0x:0x:x.4781329Z",
"PartitionId":1,
"EventEnqueuedUtcTime":"20xx-0x-xxT0x:0x:x.3850000Z"
}
這里有一條JSON記錄我的數據,如何根據它定義我的sql表,如何將JSON數據導入到Azure SQL服務器:(
您可以使用Azure數據工廠復制活動將您的Blob數據直接傳輸到sql服務器。 請將輸入配置為Azure Blob存儲連接器 ,將輸出配置為Azure SQL數據庫連接器 。
關於列映射,請參考以下鏈接: https : //docs.microsoft.com/zh-cn/azure/data-factory/copy-activity-schema-and-type-mapping 。 數組屬性可以作為字符串存儲在sql數據庫列中。
請查看此文檔 :將JSON文檔導入SQL Server(Azure SQL數據庫)
它顯示了如何將Azure Storage Blob JSON導入Azure SQL Server。 並提供了演示:
示范SQL:
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH ( TYPE = BLOB_STORAGE,
LOCATION = 'https://myazureblobstorage.blob.core.windows.net',
CREDENTIAL= MyAzureBlobStorageCredential);
BULK INSERT Product
FROM 'data/product.dat'
WITH ( DATA_SOURCE = 'MyAzureBlobStorage');
您只需要按照本教程進行操作即可。
希望這可以幫助。
在 ADF 中,您可以創建“復制活動”以將 blob 數據直接傳輸到 SQL 服務器。 請將源數據集配置為 CSV 'DelimitedText'(將 JSON 文件內容視為具有 1 行和 1 列的 csv 數據)並將 Sink 數據集配置為 Azure SQL 數據庫連接器。 您可以將數百個 JSON 從 Azure blob 加載到具有大小為 NVARCHAR(MAX) 的字段的 Azure SQL 表中。
為 1 個源(即 JSON)列定義映射。 您還可以在復制活動源中添加自定義字段,並在此處進行映射。 創建另一個“存儲過程活動”來解析存儲在 SQL 表中的 JSON。
要保存的“stg”表應該如下所示。
CREATE TABLE [dbo].[stgSalesInvoice](
[id] [int] IDENTITY(1,1) NOT NULL,
[JsonData] [nvarchar](max) NULL
) 在 [主要] GO
在目標 Azure Sql 表中解析 JSON 的存儲過程對於嵌套 json 的示例看起來像這樣。沒有附加 json 文件,但下面顯示了解析嵌套 json 是多么容易。
CREATE PROCEDURE [dbo].[pLoadSalesInvoice]
AS
BEGIN
DECLARE @Jsons nVARCHAR(MAX);
DECLARE @mPartitionKey VARCHAR(20) ;
DECLARE @mFileName VARCHAR(1000) ;
DECLARE @JsonTotalFilesCount INT = (SELECT COUNT(*) FROM [dbo].[stgSalesInvoice]);
DECLARE @JsonLoopCount INT = 1;
TRUNCATE TABLE [dbo].[SalesInvoice]
WHILE @JsonLoopCount <= @JsonTotalFilesCount
BEGIN
SELECT @Jsons = JsonData FROM [dbo].[stgSalesInvoice] WHERE id = @JsonLoopCount;
--Target Azure Sql Table
INSERT INTO [dbo].[SalesInvoice]
([SalesInvoiceId]
,[invoiceNo]
,[transactionId]
,[supplierId]
,[vendorSupplierId]
,[vendorNoExt]
,[vendorDate]
,[biddingId]
,[description]
,[biddingDimensionId]
,[biddingItemDimensionValueId]
)
SELECT [SalesInvoiceId]
,[invoiceNo]
,[transactionId]
,[supplierId]
,[vendorSupplierId]
,[vendorNoExt]
,[vendorDate]
,[biddingId]
,[description]
,[biddingDimensionId]
,[biddingItemDimensionValueId]
FROM OPENJSON(@Jsons) WITH (
SalesInvoice NVARCHAR(MAX) '$.SalesInvoice' AS JSON
,supplier NVARCHAR(MAX) '$.supplier' AS JSON
,vendor NVARCHAR(MAX) '$.vendor' AS JSON
,bidding NVARCHAR(MAX) '$.bidding' AS JSON
)
OUTER APPLY OPENJSON(SalesInvoice) WITH (
[SalesInvoiceId] NVARCHAR(100) '$.id'
,[invoiceNo] NVARCHAR(100) '$.invoiceNo'
,[transactionId] NVARCHAR(100) '$.transactionId'
)
OUTER APPLY OPENJSON(supplier) WITH (
[supplierId] NVARCHAR(100) '$.id'
,[vendorSupplierId] NVARCHAR(100) '$.vendorSupplierId'
)
OUTER APPLY OPENJSON(vendor) WITH (
[vendorNoExt] NVARCHAR(100) '$.vendorNoExt'
,[vendorDate] datetime2(7) '$.vendorDate'
)
OUTER APPLY OPENJSON(bidding) WITH (items NVARCHAR(MAX) '$.items' AS JSON)
OUTER APPLY OPENJSON(items) WITH (
[biddingId] NVARCHAR(100) '$.biddingId',
[description] NVARCHAR(250) '$.description',
biddingItemDimensionValues NVARCHAR(MAX) '$.biddingItemDimensionValues' AS JSON
)
OUTER APPLY OPENJSON(biddingItemDimensionValues) WITH (
[biddingDimensionId] NVARCHAR(100) '$.biddingDimensionId'
,[biddingItemDimensionValueId] NVARCHAR(100) '$.biddingItemDimensionValueId'
);
SET @JsonLoopCount = @JsonLoopCount + 1
END
SELECT 1;
END
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.