这可能是因为文件的每一新行上都有新的 JSON 块。这意味着您需要对其进行稍微不同的解析,而不是直接解析 JSON 文件。
首先尝试使用文本提取器来引入带有新行分隔符的每个 JSON 元素。像这样...
DECLARE @Full_Path string = "etc"
@RawExtract =
EXTRACT
[RawString] string,
[FileName] string //optional, see below
FROM
@Full_Path
USING
Extractors.Text(delimiter:'\b', quoting : false);
然后使用您引用的程序集分解 JSON,但使用 JSON 元组方法。像这样...
REFERENCE ASSEMBLY [Newtonsoft.Json];
REFERENCE ASSEMBLY [Microsoft.Analytics.Samples.Formats];
@ParsedJSONLines =
SELECT
Microsoft.Analytics.Samples.Formats.Json.JsonFunctions.JsonTuple([RawString]) AS JSONLine,
[FileName]
FROM
@RawExtract
接下来,取出值。像这样...
@StagedData =
SELECT
JSONLine["dimBetType_SKey"] AS dimBetType_SKey,
JSONLine["BetType_BKey"] AS BetType_BKey,
JSONLine["BetTypeName"] AS BetTypeName
[FileName]
FROM
@ParsedJSONLines;
最后,将输出导出为 CSV 或其他格式。
DECLARE @Output_Path string = "etc"
OUTPUT @StagedData
TO @Output_Path
USING Outputters.Csv();
顺便说一句,您不需要引用完整的数据湖存储路径。分析引擎知道存储的根在哪里,因此您可以用这个替换变量......
DECLARE @Full_Path string = "/2017/03/28/{FileName}";
希望这有助于解决您的问题。