2016-08-15 15 views
2

私は開発中のアプリケーションのデータ・レイクをテストしています。私はU-SQLとデータレーキを初めて使い、JSONファイルのすべてのレコードを照会しようとしています。今、それは1つのレコードのみを返すだし、ファイルを約200U-SQL Json Extractorはレコードを1つだけ引っ張っています

私のコードがあるしているので、私はなぜわからない:

DECLARE @input string = @"/MSEStream/output/2016/08/12_0_fc829ede3c1d4cf9a3278d43e7e4e9d0.json"; 

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


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

@result = 
SELECT * 
FROM @allposts; 

OUTPUT @result 
TO "/ProcessedQueries/all_posts.csv" 
USING Outputters.Csv(); 

データ例:

{ 
"id":"398507", 
"contenttype":"POST", 
"posttype":"post", 
"uri":"http://twitter.com/etc", 
"title":null, 
"profile":{ 
    "@class":"PublisherV2_0", 
    "name":"Company", 
    "id":"2163171", 
    "profileIcon":"https://pbs.twimg.com/image", 
    "profileLocation":{ 
     "@class":"DocumentLocation", 
     "locality":"Toronto", 
     "adminDistrict":"ON", 
     "countryRegion":"Canada", 
     "coordinates":{ 
     "latitude":43.7217, 
     "longitude":-31.432}, 
     "quadKey":"000000000000000"}, 
     "displayName":"Name", 
     "externalId":"00000000000"}, 
    "source":{ 
     "name":"blogs", 
     "id":"18", 
     "param":"Twitter"}, 
    "content":{ 
     "text":"Description of post"}, 
     "language":{ 
      "name":"English", 
      "code":"en"}, 
     "abstracttext":"More Text and links", 
     "score":{} 
    } 
} 

をいただき、ありがとうございます事前にヘルプ

答えて

2

JsonExtractorには、JSONパス式を使用して行にマップされる項目またはオブジェクトを指定できる引数があります。何も指定しなければ、一番上のルート(1行)をとります。

あなたは配列内の項目の一つ一つをしたいので、あなたはそれとして指定:新しいMicrosoft.Analytics.Samples.Formats.Json.JsonExtractorを(「[*]」)を使用して

[*]は、この場合は最上位の配列である配列のすべての要素を与えるJSON Path式です。

+0

私はそれを置くと何も返しません。私はポストに引っ張っているデータの例を追加します。 – WorkHardWork

+0

私は何が起きているのかを理解しました。出力ファイルは行で区切られたファイルです。それを読む方法がありますか、それとも配列としてフォーマットする必要がありますか? – WorkHardWork

+0

現在のJSONExtractorを拡張することで、ラインごとの処理を行う独自の抽出プログラムを書くこともできます(http://usql.ioのGitHubの他の抽出プログラムの一部を見てください) JSONを文字列として読み込みます(最大長は128kBです)。たとえばhttps://github.com/Azure/usql/blob/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats/readme.md –

1

フィールドにIDという名前のJSONノードがある場合、質問に投稿された元のスクリプトは、ルートノードの下に名前「id」のノードを返します。すべてのノードを取得するには、スクリプトは

@allposts = 
EXTRACT 
    id string, 
    contenttype string, 
    posttype string, 
    uri string, 
    title string, 
    profile string 
FROM @input 
USING new Microsoft.Analytics.Samples.Formats.Json.JsonExtractor(); 

のように構成されています。代わりにネイティブの抽出プログラムを使用してそれを抽出して文字列ですべて読むことができます(JSONが128 KB未満であればこれが動作する限り)。

@allposts = 
EXTRACT 
    json string 
FROM @input 
USING Extractors.Text(delimiter:'\b', quoting:false); 
+0

「Extractors.Csv」では区切り文字を使用できません。 – WorkHardWork

+0

Extractors.Textを代わりに使用しても構いませんか? –

関連する問題