2016-08-15 11 views
2

Я тестирую данные для приложения, которое я разрабатываю. Я новичок в U-SQL и Data Lake, и я просто пытаюсь запросить все записи в файле JSON. Прямо сейчас, это только возвращение одной записи, и я не знаю, почему, потому что файл имеет около 200U-SQL Json Extractor вытаскивает только одну запись

Мой код:

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 Path. Если вы не укажете что-нибудь, это займет верхний корень (это одна строка).

Вы хотите каждый один из элементов в массиве, поэтому необходимо указать как:

с использованием новых Microsoft.Analytics.Samples.Formats.Json.JsonExtractor («[*]»);

Где [*] - выражение JSON Path, которое говорит, дает мне все элементы массива, которые в этом случае являются массивом верхнего уровня.

+0

Когда я добавляю, что Он ничего не возвращает. Я добавляю пример данных, которые я вытаскиваю в сообщении. – WorkHardWork

+0

Я понял, что происходит, выходной файл является файлом, разделенным строкой. Есть ли способ прочитать его так, или мне нужно, чтобы он был отформатирован как массив? – WorkHardWork

+0

Вы можете написать свой собственный экстрактор, который выполняет линию на обработку строки, расширяя текущий JSONExtractor (посмотрите на некоторые из других экстракторов на нашем GitHub по адресу http://usql.io), или вы можете использовать встроенный редактор, в экстракторе и прочитать JSON как строку (максимальная длина составляет 128 КБ). Например, https://github.com/Azure/usql/blob/master/Examples/DataFormats/Microsoft.Analytics.Samples.Formats/readme.md –

1

Если у вас есть узел JSON в вашем поле с именем id, ваш исходный скрипт, отправленный в вопрос, вернет узел с именем «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(); 

Пожалуйста, сообщите нам, если он будет работать. Альтернативой было бы извлечь его с помощью встроенного экстрактора, чтобы прочитать все это в строке (как упоминалось в заявлении MRys, если ваш JSON находится под 128 КБ, это будет работать).

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

'Extractors.Csv' не разрешает разделителей. – WorkHardWork

+0

Можете ли вы попробовать использовать Extractors.Text, пожалуйста, с тем же синтаксисом? –

 Смежные вопросы

  • Нет связанных вопросов^_^