Azure数据工厂:从复制活动中输出复制的文件和文件夹信息

时间:2018-12-31 08:51:40

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

我正在使用Azure数据工厂中的自集成集成运行时将数据从本地源(普通文件系统)复制到Azure Blob存储目标。传输后,我想通过附加在Databricks群集上运行的Notebook来自动处理文件。管道工作正常,但我的问题与“复制活动”的输出有关。

是否可以获取每次运行的已传输文件和文件夹的信息?我会将这些信息作为参数传递给笔记本。

查看文档,似乎只有汇总信息可用:

https://docs.microsoft.com/en-us/azure/data-factory/copy-activity-overview

如果您传输大量文件,这是有道理的。如果不可能的话,我想一种替代方法是将复制过程留给自己,然后根据存储帐户事件创建另一个管道?还是将每次运行的新文件和文件夹信息存储在固定的文本文件中,还进行传输并在笔记本中阅读?

2 个答案:

答案 0 :(得分:0)

如果要从数据工厂读取文件或目录的信息,可以使用“获取元数据”活动来完成,请参见以下answer作为示例。

检测笔记本中新文件的另一种方法是对文件源使用结构化流。这工作得很好,您只需在复制活动之后调用笔记本活动即可。

为此,您定义了流输入数据帧:

streamingInputDF = (
   spark
     .readStream                     
     .schema(pqtSchema)               
     .parquet(inputPath) 
 )

,其中 inputPath 指向Blob存储中的输入目录。支持的文件格式为text,csv,json,orc,parquet,因此是否适合您取决于具体情况。

重要的是,在目标上使用一次触发选项,因此笔记本不需要永久运行,例如。 g。:

streamingOutputDF \
    .repartition(1) \
    .writeStream \
    .format("parquet") \
    .partitionBy('Id') \
    .option("checkpointLocation", adlpath +  "spark/checkpointlocation/data/trusted/sensorreadingsdelta") \
    .option("path", targetPath + "delta") \
    .trigger(once=True) \
    .start()

另一种方法可能是使用Azure队列存储(AQS),请参阅以下documentation

答案 1 :(得分:0)

在这种情况下,解决方案实际上非常简单。我刚刚在Azure数据工厂中创建了另一个管道,该管道由 Blob Created 事件触发,并将文件夹文件名作为参数传递给了我笔记本。似乎工作良好,并且所需的配置或代码量最少。基本过滤可以通过事件进行,其余的取决于笔记本。

对于在此情况下遇到困难的其他人,请参见以下详细信息:

https://docs.microsoft.com/en-us/azure/data-factory/how-to-create-event-trigger