2016-12-02 25 views
0

我想從json文檔中提取大量的數據。每個json文檔大約有1500個節點。當我嘗試加載body節點時,我得到了128KB的限制錯誤。我找到了一種方法來加載節點,但我必須一直到數組列表。 JsonExtractor( 「body.nprobe.items [*]」);我遇到的問題是我無法訪問json文檔的任何其他部分,我需要獲取元數據,如:Id,SerialNumber等。是否應以某種方式更改json文件?我需要的數據是3個級別。 json被混淆並縮短了,真正的文件大約是33K行格式化的json,大約有1500個項目,每個項目有n-20個字段。如何在U-SQL中提取大型json數組幷包含元數據?

{ 
    "headers": { 
     "pin": "12345", 
     "Type": "URJ201W-GNZGK", 
     "RTicks": "3345", 
     "SD": "211", 
     "Jov": "juju", 
     "Market": "Dal", 
     "Drst": "derre", 
     "Model": "qw22", 
     "DNum": "de34", 
     "API": "34f", 
     "Id": "821402444150002501" 
    }, 
    "Id": "db5aacae3778", 
    "ModelType": "URJ", 
    "body": { 
     "uHeader": { 
      "ID": "821402444150002501", 
      "SerialNo": "ee028861", 
      "ServerName": "BRXTTY123" 
     }, 
     "header": { 
      "form": 4, 
      "app": 0, 
      "Flg": 1, 
      "Version": 11056, 
      "uploadID": 1, 
      "uDate": "2016-04-14T18:29" 
     }, 
     "nprobe": { 
      "items": [{ 
       "purchaseDate": "2016-04-14T18:21:09", 
       "storeLoc": { 
        "latitude": 135.052335, 
        "longitude": 77.167005 
       }, 
       "sr": { 
        "ticks": 3822, 
        "SkuId": "24", 
        "Data": { 
         "X": "0.00068", 
         "Y": "0.07246", 

        } 
       } 
      }, 
      { 
       "purchaseDate": "2016-04-14T18:21:09", 
       "storeLoc": { 
        "latitude": 135.052335, 
        "longitude": 77.167005 
       }, 
       "sr": { 
        "ticks": 3823, 
        "SkuId": "25", 
        "Data": { 
         "X": "0", 
         "Y": "2", 

        } 
       } 
      }] 
     } 
    }, 
    "Messages": [] 
} 

謝謝。

回答

0

你必須使用交叉適用於: https://msdn.microsoft.com/en-us/library/azure/mt621307.aspx 而爆炸: https://msdn.microsoft.com/en-us/library/azure/mt621306.aspx

在這裏看到一個制定瞭解決方案:

https://github.com/algattik/USQLHackathon/blob/master/VS-Solution/USQLApplication/ciam-to-sqldw.usql https://github.com/algattik/USQLHackathon/blob/master/Samples/Customer/customers%202016-08-10.json

- 改進的答案: - -

由於該解決方案將不適合你,因爲你的內心JSON是太大,無法在一個字符串,可以兩次解析輸入:

DECLARE @input string = @"/so.json"; 

REFERENCE ASSEMBLY [Newtonsoft.Json]; 
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats]; 

@meta = 
EXTRACT Id string 
    FROM @input 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

@items = 
EXTRACT purchaseDate string 
    FROM @input 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("body.nprobe.items[*]"); 

@itemsFull = 
    SELECT Id, 
      purchaseDate 
    FROM @meta 
     CROSS JOIN @items; 

OUTPUT @itemsFull 
TO "/items_full.csv" 
USING Outputters.Csv(); 
+0

我曾嘗試跨應用爆炸法,問題是孩子我需要訪問的節點位於body-> nprobe-> items-> sr。我無法獲得body節點,因爲它溢出了128kb的限制。到目前爲止,我能得到的最接近的是直接映射到'code'body.nprobe.items [*]'code',但是這不允許我訪問json片段中的其他數據。謝謝。 – user2087092

相關問題