我们可以在 Azure 事件中心捕获的文件的文件名中应用不同的时区吗

问题描述 投票:0回答:1

Azure 事件中心捕获的文件通常以以下格式存储:

{Namespace}/{EventHub}/{PartitionId}/{Year}/{Month}/{Day}/{Hour}/{Minute}/{Second}.avro
但是,文件名格式可用的占位符基于协调世界时 (UTC)。

如果我位于不同的时区,例如 UTC-8,文件名会很混乱(2023 年 12 月 11 日凌晨 04:00:00 在 UTC-8 捕获的文件将被命名为

{Namespace}/{EventHub}/{PartitionId}/2023/12/10/20/00/00.avro
我可以在名称格式中应用一些函数,以便我可以以反映我自己时区的格式捕获文件吗?如果没有,在 Databricks 中处理这些数据的最佳实践是什么?

我能想到的是使用ADF管道捕获并根据时区重命名数据,然后保存到另一个地方,但希望有一些简单的方法。

azure azure-eventhub azure-data-lake-gen2
1个回答
0
投票
如本

文档中所述

创建的文件夹结构的时间戳遵循 UTC 而不是本地时间。

您无法更改它。

但是,您可以创建一个

JavaScript UDFUTC 转换为本地时区。

转换后,您可以在配置输出时使用

路径模式选项中的该列。

下面是

JavaScript UDF 的代码。

function main(datetime) { const d = new Date(datetime); let tmp = d.toLocaleString('en-US', { hour12: false, timeZone: 'America/Los_Angeles'}); let tmp1 = tmp.split(","); let date = tmp1[0].split("/").reverse().join('/'); let time = tmp1[1].split(':').join('/'); return date.replace(' ','')+"/"+time.replace(' ',''); }

enter image description here

接下来,要进行转换,请在查询编辑器的

select

 语句中添加以下语句。

SELECT udf.convertTolocal(EventEnqueuedUtcTime) AS ConvertedTimestamp, ---your fields [1e7ed650-1d9e-50b9-0dcd-5db77c7add4c].[EventProcessedUtcTime], [1e7ed650-1d9e-50b9-0dcd-5db77c7add4c].[PartitionId], [1e7ed650-1d9e-50b9-0dcd-5db77c7add4c].[EventEnqueuedUtcTime] INTO [output] FROM [1e7ed650-1d9e-50b9-0dcd-5db77c7add4c]
这里,

convertTolocal

是我的JavaScript UDF。

然后,您可以如下设置路径模式:

event_out/{ConvertedTimestamp}
ConvertedTimestamp 是列名称。

输出:

上一列的输出如下所示。

enter image description here

添加到路径模式后,它将创建文件夹。

以下是在存储中创建的文件夹。

enter image description here

有关 UDF 的更多信息,请参阅

this

© www.soinside.com 2019 - 2024. All rights reserved.