【问题标题】:Transform .parquet file varchar column to datetime in Azure Synapse在 Azure Synapse 中将 .parquet 文件 varchar 列转换为日期时间
【发布时间】:2022-01-09 10:57:05
【问题描述】:

我正在以 .parquet 文件的形式将 JSON 遥测数据从我们的 IoT 中心发送到 Azure Data Lake Gen2。然后,我从数据湖中在我的 Azure Synapse Serverless SQL 池中创建了一个视图,我可以连接到该视图并查询数据以获取报告。

CREATE VIEW DeviceTelemetryView
AS SELECT * FROM
    OPENROWSET(
        BULK 'https://test123.dfs.core.windows.net/devicetelemetry/*/*/*/*/*/',
        FORMAT = 'PARQUET'
    ) AS [result]

这是我的视图数据的样子:

这些报告中的大多数都基于日期时间范围。因此,我希望能够编写使用我的日期时间戳的 SQL 查询。

当前问题

当我查看 dateTimeStamp 列的当前数据类型时,它默认为 varchar(8000),即使我相信我的 JSON 是正确的日期时间格式:"2021-11-29T21:45:00" 。如何在我的视图中将此特定字段转换为日期时间字段以对其运行查询?

【问题讨论】:

    标签: sql parquet azure-synapse azure-data-lake-gen2 azure-sql-data-warehouse


    【解决方案1】:

    当我查看 dateTimeStamp 列的当前数据类型时,它默认为 varchar(8000)

    我认为您必须查看 parquet 文件中该列的数据类型,在您的情况下它可能是一个字符串。 sql 解释为 varchar(8000)。

    即使我相信我的 JSON 是正确的日期时间格式:“2021-11-29T21:45:00”。

    即使时间戳格式正确,我认为您也必须提示系统,以便它知道将该字符串转换为日期时间

    如何在我的视图中将此特定字段转换为日期时间字段以对其运行查询?

    我不是 sql 专家,但我认为您可以使用 cast and convert 将字符串转换为时间戳

    CREATE VIEW DeviceTelemetryView
    AS SELECT corporationid, deviceid, version, Convert(datetime, dateTimestamp, 126) AS NewDateFormat, data FROM
        OPENROWSET(
            BULK 'https://test123.dfs.core.windows.net/devicetelemetry/*/*/*/*/*/',
            FORMAT = 'PARQUET'
        ) AS [result]
    

    【讨论】:

    • 是的,转换成功了!虽然我不得不稍微更新转换部分如下:Convert(datetime, dateTimestamp, 126) AS NewDateFormat。 -- CONVERT 语法:CONVERT (data_type [(length)], expression [, style])。如果您可以更新您的答案,我将标记为已接受
    猜你喜欢
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2019-12-23
    • 2019-03-13
    相关资源
    最近更新 更多