簡體   English   中英

如何將 Azure 存儲 Blob JSON 導入 Azure SQL 服務器

[英]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。 並提供了演示:

  1. 將JSON文檔導入單列
  2. 導入多個JSON文檔
  3. 從Azure文件存儲導入JSON文檔
  4. 從Azure Blob存儲導入JSON文檔
  5. 將JSON文檔解析為行和列

示范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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM