将 T-SQL Json 查询翻译成 USQL
Translate T-SQL Json query to USQL
您好,我正在尝试将此逻辑从 T-sql json 查询转换为 usql。但是我无法达到相同的结果。任何帮助将不胜感激。
select N'{
"rowid": "1",
"freeresponses": {
"fr1": "1.1",
"fr2": "1.1",
"fr3": "1.3",
"fr4": "1.4",
"fr5": "1.4"
}
}'as jsontext
into dbo.tmp#
SELECT convert (int, JSON_VALUE(jsontext,'$.rowid' )) as rowid,
c.[key], c.[value]
FROM dbo.tmp#
cross apply openjson(json_query(jsontext,'$.freeresponses') )
as c;
在SQL 服务器中的结果将是这样的。
rowid | key | value
1 | fr1| 1.1
1 | fr2| 1.1
1 | fr3| 1.3
1 | fr4 | 1.4
1 | fr5| 1.4
为了在 USQL 中获得相同的结果,我尝试了以下方法和错误。
REFERENCE ASSEMBLY Staging.[Newtonsoft.Json];
REFERENCE ASSEMBLY Staging.[Microsoft.Analytics.Samples.Formats];
USING Microsoft.Analytics.Samples.Formats.Json;
DECLARE @inputmasterfileset string = "/sourcedata/samplefreeresponse.txt";
DECLARE @outputfreeresponse string = "/sourcedata/samplefreeresponseoutput.txt";
@freeresponse1 =
EXTRACT rowid string,
freeresponses string
FROM @inputmasterfileset
USING new JsonExtractor("");
@freeresponse2 =
SELECT rowid,
JsonFunctions.JsonTuple(freeresponses).Values AS freeresponses
FROM @freeresponse1;
@freeresponse3 =
SELECT rowid
,JsonFunctions.JsonTuple(free) AS values
FROM @freeresponse2
CROSS APPLY
EXPLODE(freeresponses) AS c(free);
OUTPUT @freeresponse3
TO @outputfreeresponse
USING Outputters.Text('|', outputHeader:true,quoting:false);
要注意的是,我不知道这些键是如何命名为 json 文档的,所以我无法在代码的第 3 阶段指定 JsonFunctions.JsonTuple(free)["fr1"] 并且我希望结果与我在 T-SQL 中得到的结果相同。
非常感谢。
我自己解决了。这是与 SQL MAP 和 SQL ARRAY 的混淆。
您好,我正在尝试将此逻辑从 T-sql json 查询转换为 usql。但是我无法达到相同的结果。任何帮助将不胜感激。
select N'{
"rowid": "1",
"freeresponses": {
"fr1": "1.1",
"fr2": "1.1",
"fr3": "1.3",
"fr4": "1.4",
"fr5": "1.4"
}
}'as jsontext
into dbo.tmp#
SELECT convert (int, JSON_VALUE(jsontext,'$.rowid' )) as rowid,
c.[key], c.[value]
FROM dbo.tmp#
cross apply openjson(json_query(jsontext,'$.freeresponses') )
as c;
在SQL 服务器中的结果将是这样的。
rowid | key | value
1 | fr1| 1.1
1 | fr2| 1.1
1 | fr3| 1.3
1 | fr4 | 1.4
1 | fr5| 1.4
为了在 USQL 中获得相同的结果,我尝试了以下方法和错误。
REFERENCE ASSEMBLY Staging.[Newtonsoft.Json];
REFERENCE ASSEMBLY Staging.[Microsoft.Analytics.Samples.Formats];
USING Microsoft.Analytics.Samples.Formats.Json;
DECLARE @inputmasterfileset string = "/sourcedata/samplefreeresponse.txt";
DECLARE @outputfreeresponse string = "/sourcedata/samplefreeresponseoutput.txt";
@freeresponse1 =
EXTRACT rowid string,
freeresponses string
FROM @inputmasterfileset
USING new JsonExtractor("");
@freeresponse2 =
SELECT rowid,
JsonFunctions.JsonTuple(freeresponses).Values AS freeresponses
FROM @freeresponse1;
@freeresponse3 =
SELECT rowid
,JsonFunctions.JsonTuple(free) AS values
FROM @freeresponse2
CROSS APPLY
EXPLODE(freeresponses) AS c(free);
OUTPUT @freeresponse3
TO @outputfreeresponse
USING Outputters.Text('|', outputHeader:true,quoting:false);
要注意的是,我不知道这些键是如何命名为 json 文档的,所以我无法在代码的第 3 阶段指定 JsonFunctions.JsonTuple(free)["fr1"] 并且我希望结果与我在 T-SQL 中得到的结果相同。
非常感谢。
我自己解决了。这是与 SQL MAP 和 SQL ARRAY 的混淆。