U-SQL Json 提取器只提取一条记录
U-SQL Json Extractor is only pulling one record
我正在为我正在开发的应用程序测试数据湖。我是 U-SQL 和数据湖的新手,我只是想查询 JSON 文件中的所有记录。现在,它只返回一条记录,我不确定为什么,因为文件大约有 200 条。
我的代码是:
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":{}
}
}
提前感谢您的帮助
JsonExtractor 采用一个参数,允许您使用 JSON 路径表达式指定将哪些项目或对象映射到行中。如果您不指定任何内容,它将采用最顶层的根(即一行)。
您想要数组中的每一项,因此将其指定为:
正在使用新的 Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("[*]");
其中 [*] 是 JSON 路径表达式,表示给我数组的所有元素,在本例中是顶级数组。
如果您的字段中有一个名为 id 的 JSON 节点,您在问题中发布的原始脚本将 return 根节点下名称为 "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 KB 就可以)。
@allposts =
EXTRACT
json string
FROM @input
USING Extractors.Text(delimiter:'\b', quoting:false);
我正在为我正在开发的应用程序测试数据湖。我是 U-SQL 和数据湖的新手,我只是想查询 JSON 文件中的所有记录。现在,它只返回一条记录,我不确定为什么,因为文件大约有 200 条。
我的代码是:
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":{}
}
}
提前感谢您的帮助
JsonExtractor 采用一个参数,允许您使用 JSON 路径表达式指定将哪些项目或对象映射到行中。如果您不指定任何内容,它将采用最顶层的根(即一行)。
您想要数组中的每一项,因此将其指定为:
正在使用新的 Microsoft.Analytics.Samples.Formats.Json.JsonExtractor("[*]");
其中 [*] 是 JSON 路径表达式,表示给我数组的所有元素,在本例中是顶级数组。
如果您的字段中有一个名为 id 的 JSON 节点,您在问题中发布的原始脚本将 return 根节点下名称为 "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 KB 就可以)。
@allposts =
EXTRACT
json string
FROM @input
USING Extractors.Text(delimiter:'\b', quoting:false);