2016-10-09 8 views
1

ファイルjsonからデータをダウンロードするためにWebおよびフォーラムを閲覧しましたが、スクリプトが機能しません。 レートのオブジェクトのリストをダウンロードする際に問題があります。誰かが助けてくれますか?私は間違いを見つけることができません。U-SQLがjson配列でデータを呼び出す

{"table":"C","no":"195/C/NBP/2016","tradingDate":"2016-10-06","effectiveDate":"2016-10-07","rates": 
[ 
{"currency":"dolar amerykański","code":"USD","bid":3.8011,"ask":3.8779}, 
{"currency":"dolar australijski","code":"AUD","bid":2.8768,"ask":2.935}, 
{"currency":"dolar kanadyjski","code":"CAD","bid":2.8759,"ask":2.9339}, 
{"currency":"euro","code":"EUR","bid":4.2493,"ask":4.3351}, 
{"currency":"forint (Węgry)","code":"HUF","bid":0.013927,"ask":0.014209}, 
{"currency":"frank szwajcarski","code":"CHF","bid":3.8822,"ask":3.9606}, 
{"currency":"funt szterling","code":"GBP","bid":4.8053,"ask":4.9023}, 
{"currency":"jen (Japonia)","code":"JPY","bid":0.036558,"ask":0.037296}, 
{"currency":"korona czeska","code":"CZK","bid":0.1573,"ask":0.1605}, 
{"currency":"korona duńska","code":"DKK","bid":0.571,"ask":0.5826}, 
{"currency":"korona norweska","code":"NOK","bid":0.473,"ask":0.4826}, 
{"currency":"korona szwedzka","code":"SEK","bid":0.4408,"ask":0.4498}, 
{"currency":"SDR (MFW)","code":"XDR","bid":5.3142,"ask":5.4216} 
], 
"EventProcessedUtcTime":"2016-10-09T10:48:41.6338718Z","PartitionId":1,"EventEnqueuedUtcTime":"2016-10-09T10:48:42.6170000Z"} 

これはsqlのスクリプトです。

@trial = 
    EXTRACT jsonString string 
    FROM @"adl://kamilsepin.azuredatalakestore.net/ExchangeRates/2016/10/09/10_0_c60d8b8895b047c896ce67d19df3cdb2.json" 
    USING Extractors.Text(delimiter:'\b', quoting:false); 

@json = 
    SELECT Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(jsonString) AS rec 
    FROM @trial; 

@columnized = 
    SELECT 
      rec["table"]AS table, 
      rec["no"]AS no, 
      rec["tradingDate"]AS tradingDate, 
      rec["effectiveDate"]AS effectiveDate, 
      rec["rates"]AS rates 
    FROM @json; 
@rateslist = 
    SELECT 
     table, no, tradingDate, effectiveDate, 
     Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(rates) AS recl 
     FROM @columnized; 
@selectrates = 
    SELECT 
    recl["currency"]AS currency, 
    recl["code"]AS code, 
    recl["bid"]AS bid, 
    recl["ask"]AS ask 
    FROM @rateslist; 

OUTPUT @selectrates 
    TO "adl://kamilsepin.azuredatalakestore.net/datastreamanalitics/ExchangeRates.tsv" 
USING Outputters.Tsv(); 

答えて

2

あなたは、相関行にマップしたいあなたのJSON内のあなたの最初のパスを構成するもの、あなたのJSONの構造を見て確認する必要があります。あなたのケースでは、実際には、配列アイテムごとに1つの行を必要とするレートの配列にのみ興味があります。

したがって、JSONExtractorには、配列要素ごとに1行(たとえば、rates[*])を与えるJSONPathを使用し、それぞれのフィールドを投影します。ここ

(わずかに変更パスを持つ)コードである:

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

@selectrates = 
    EXTRACT currency string, code string, bid decimal, ask decimal 
    FROM @"/Temp/rates.json" 
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("rates[*]"); 

OUTPUT @selectrates 
TO "/Temp/ExchangeRates.tsv" 
USING Outputters.Tsv(); 
関連する問題