繁体   English   中英

读取行如何将 json 文件与 azure 数据湖分开并使用 usql 进行查询

[英]How read line separated json file from azure data lake and query using usql

我在 azure datalake 结构中有物联网数据作为 {date}/{month}/{day}/abbs。 Json 每个文件都有多条记录,用换行符分隔。如何使用 usql 读取此数据并加载到表中并进行查询。

当我使用 / / / / .json 将其加载到 usql 表中时,将在新文件添加到文件时将数据加载到同一个表中。

我已经关注了 qzure 文档,但没有找到任何对行分隔的 json 文件的答案。

在这个例子中,我们将创建一个表来存储事件:

CREATE TABLE dbo.Events  
(
     Event string
    ,INDEX cIX_EVENT CLUSTERED(Event ASC) DISTRIBUTED BY HASH(Event)
);

然后在提取json并将其插入数据库时:

您首先必须使用简单的文本提取器提取行,然后才能对其进行解析。 例如,给一个文件,其中包含用新行分隔的 json 对象

{ "Event": "One" }
{ "Event": "Tow" }
{ "Event":  "Three"}

然后这个脚本将提取事件:

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

USING Microsoft.Analytics.Samples.Formats.Json;

@RawExtract = EXTRACT [RawString] string
    FROM @input
    USING Extractors.Text(delimiter:'\b', quoting : false);

@ParsedJSONLines = SELECT JsonFunctions.JsonTuple([RawString]) AS JSONLine
    FROM @RawExtract;

INSERT INTO Events  
SELECT JSONLine["Event"] AS Event
FROM @ParsedJSONLines;  

稍后您可以像这样从表中读取:

@result =
    SELECT Event
    FROM Events;

OUTPUT @result
TO @output
USING Outputters.Csv(outputHeader : true, quoting : true);

现在,因为它是一个INSERT IMTO数据将被附加到表中。

资源:
GitHub 示例

更多 GitHub 示例

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM