首页 > 解决方案 > 如何获取 Azure 数据工厂中的分区总数?

问题描述

我正在尝试按模式设置拆分文件名,但我不知道如何获取分区总数。

我要查找的文件的名称是my_file_name_pattern_[n]of[N].txt

分区由键列动态设置。

我怎样才能得到[N]

标签: azure-data-factory

解决方案


好吧,我得到了微软的答复:

我们正在向 AzDF 添加一个新的“缓存查找”功能,该功能基于现有的查找/接收器转换,例如,我们可以访问聚合的输出并在数据流的另一个转换中使用该值。

更新!

现在我们可以在数据流中设置值,而无需使用接收器在 Blob 存储中加载文件并使用额外的活动来读取它。检查Cached lookup文档:

缓存接收
器缓存查找

Sink我们可以选择Cache而不是数据集...

然后我们可以在任何其他活动中使用该值:

喜欢mySinkName#outputs()[myRowNumber].yColumnName

缓存查找之前的解决方法

在发布此新功能时。我得到了一种使用As data in columnopt 而不是Pattern命名文件的方法,这里是解决方案:

在数据流中,我有两个来源:

  • Source1:从计算中获取分区数。输出将处于Select具有一个值的转换中:
    | partitions |
    |      3     |

  • 来源2
    1. 连接到Synapse/Hive要拆分为多个文件的表 ( )
    2. 添加从, 列名Surrogate Key开始的转换1SK

  1. 添加Union转换并使用Custom (cross)连接,在条件下使用true()

  1. 添加 aDerived column以获取用于拆分文件的键列partition_number=mod(SK, partitions) + 1

  1. 添加另一个Derived column以获得列files names=concat($target_folder, '/', $fileName, '_', toString(partition_number), 'of', toString(partitions), '.', $extension)

5.1。选项中的Optimize使用partition_number中列Key

  1. 在选项卡集中添加一个Sinkto and并使用列ADLSsettingAs data in columnfile_nameColumn with file name

6.1。在Mapping选项卡中用于rule-based mapping忽略流中创建的临时列。- 输入列:!in(['SK','partition_number','partitions','file_names'], name) - 输出列:$$

注意:在工作中,我们有一个自定义的 AzDF,并且我们的一些活动被锁定或禁用。这就是为什么这种解决方法而不是在管道级别使用SPand的原因。Lookup此外,我不喜欢以任何分隔格式在 ADLS 中保存一些数据,然后将其与查找活动一起使用以提取值并设置一些参数……这似乎是一个简单解决方案的步骤。


推荐阅读