【问题标题】:How read line separated json file from azure data lake and query using usql如何从 azure 数据湖中读取行分隔的 json 文件并使用 usql 进行查询
【发布时间】:2021-03-01 21:33:23
【问题描述】:

我有 {date}/{month}/{day}/abbs 的 azure datalake 结构中的物联网数据。 json 每个文件都有多个记录,由换行符分隔.. 如何使用 usql 读取这些数据并加载到表和查询中。

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

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

【问题讨论】:

标签: azure azure-data-lake u-sql azure-iot-sdk


【解决方案1】:

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

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 Examples

More GitHub Examples

【讨论】:

    猜你喜欢
    • 2016-04-23
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    相关资源
    最近更新 更多