【问题标题】:Get week of year - expressions and functions in azure data factory获取一年中的一周 - 天蓝色数据工厂中的表达式和函数
【发布时间】:2021-02-04 10:44:16
【问题描述】:

我对 ADF 很陌生,我正在尝试对一个变量进行参数化,该变量将作为输入年份和一年中的一周;例如,202042 或 202102

经过一番挖掘,我创建了以下函数,但似乎 weekOfYear 不可用。

在 ADF 中获取 weekOfYear 的方法是什么?

@concat('PREFIX',
formatdatetime(utcnow(), 'yyyy'),
weekOfYear((formatdatetime(utcnow(), 'yyyyMMdd'))),
‘.SUFFIX’)

【问题讨论】:

    标签: azure azure-devops azure-data-factory azure-data-factory-2


    【解决方案1】:

    最简单的方法是在您的日期仓库日期维度中查找它,该维度应该有此列。如果没有,请咨询您的数据架构师。

    如果您确实需要计算它,那么如果您有一些 SQL 计算,您可以使用 Lookup 活动和如下所示的 SQL:

    sp_executesql N'select datepart(week,getdate()) weekOfYear'

    这返回了以下结果:

    Output
    {
        "firstRow": {
            "weekOfYear": 6
        },
    ...
    

    Microsoft SQL 数据库(无论是 IaaS/box 产品、Azure SQL DB、托管实例还是 Azure Synapse Analytics)也支持 ISO week 作为DATEPART 函数的一部分,因此您可以这样做:

    sp_executesql N'SELECT DATEPART( iso_week, GETDATE() ) isoWeekNum'
    

    这也可以在核心 ADF(不是映射数据流)中使用内置函数实现。根据维基百科的文章,ADF 确实支持日期函数 dayOfYeardayOfWeekWeek of Year 实际上只是使用这两个变量的数学:

    此计算在 ADF 中作为表达式实现如下:

    @string(div(sub(add(10, dayOfYear(utcNow())), dayOfWeek(utcNow())),7))
    

    NB这是不是 ISO 周,而是一年中的一周,并且 ADF dayOfWeek 函数从星期日开始,按照 @ 0 987654323@。我在这里将其转换为字符串,以便将其分配给 ADF 中的变量,但这取决于您使用表达式的位置。

    Mapping Data Flows 也支持weekOfYear 函数,所以如果您已经在使用 Mapping Data Flows,请考虑一下。

    【讨论】:

    • 你能举个例子说明如何使用内置的 adf 函数
    • 可以,您能确认一下您一年中的一周计算值是多少吗?即与上面的 SQL Server 实现相同还是例如 ISO 周?
    • 今天是 ISO 周
    • 我已经用更多示例更新了帖子,看看你的进展如何。 ISOWeek 在 SQL 中可用,因此这仍然是最简单的方法,但我还添加了一个使用内置 ADF 函数计算此类事物的示例,以获得“一年中的一周”(不是 ISOweek)。
    【解决方案2】:

    目前无法直接使用,您必须使用映射数据流。

    您可以通过this链接获取更多信息

    【讨论】:

    • 启动整个 Apache Spark 集群来计算一年中的星期几?我不会。额外的成本和复杂性(即需要维护的额外组件)是不值得的。只需在您的仓库日期维度中查找即可。
    • 您不会启动 Spark 集群,也不会维护它。 ADF 为您提供无服务器计算。在数据流中计算字段绝对是在 ADF 中执行此操作的正确位置。
    • 正确!这就是我推荐它的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多