2016-12-08 7 views
1

私はAzure Data Lake環境で動作するU-SQLアプリケーションを持っています。実際には2つ以上の行を除いて、このようなJSONデータでいっぱいのファイルを処理することになっています。そのデータ湖のジョブでJSONPath:キーと値で単一の辞書を抽出する

[ 
{"reports" : {"direction": "FWD", "drive": "STOPS", "frob_variable": 0}}, 
{"reports" : {"direction": "FWD", "drive": "CRANKS", "frob_variable": -3}} 
] 

、私は次の行を持っている:

@json = 
EXTRACT direction string, drive string, frob_variable int FROM @"/input/file.json" 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("reports"); 

私はテキストファイルにその@json変数の内容をダンプするとき、私は空の値を取得:長さゼロの文字列とゼロ評価された整数。私は出力行の正しい数を取得するので、すべての入力を反復処理する必要があります。

JsonExtractorのソースコードを掘り起こすと、指定されたJsonPathの値( "reports")が埋め込まれたdictで "reports"キーを返しているようです。 "reports。*"というJsonPathの値を試した場合、埋め込み値(例:{ "FWD", "STOPS", 0 })を取得しますが、実際にキーが一緒になってほしいので、SELECT direction, drive, frob_variableは役に立つものを返します。

短いストーリーですが、私はキーを引き出す方法を探していますの値はその内側の辞書からです。したがって、EXTRACTからの私の望ましい出力は、列が "direction"、 "drive"、 "frob_variable"で、その値がソースデータに示されている行セットになります。 JsonPathソリューションやU-SQLの簡単な回避策があるはずです。

答えて

2
@extract = 
    EXTRACT 
     reports String 
    FROM @"/input/file.json" 
    USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

@relation = 
    SELECT 
    Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple(reports) 
    AS report 
    FROM @extract; 

@fields = 
    SELECT 
     report["direction"] AS direction, 
     report["drive"] AS drive, 
     Int32.Parse(report["frob_variable"]) AS frob 
    FROM @relation; 

U-SQL - Extract data from json-array

+0

なるほど参照してください!それが私が探していたものです。 Json-array抽出! – catfood

関連する問題