使用数据湖分析复制数据 - U-SQL

时间:2018-04-22 16:36:32

标签: azure azure-data-lake u-sql

我有以下问题。我需要从ADLS(Azure数据湖存储)源复制到接收器ADLS,但只能复制最新的文件。每小时,到达源.csv文件,此文件必须复制到接收器数据湖。例如:

事件:Hour1 - file_01.csv到达源。 任务:将file_01.csv复制到sink数据库。 event:Hour2 - file_02.csv到达源头。 任务:将file_02.csv复制到sink数据湖。等等。

无论如何都要创建一个基于事件的触发器(新文件到达源中)?这是我的第一个想法。

另一种方法是创建一个由Azure Data湖分析运行的作业。在那里,我将提取系统日期&时间(我不知道该怎么做)。选择最新文件,然后将该文件复制到接收器数据湖中。如何使用u-sql声明包含日期和时间的变量?如何使用u-sql将数据复制到数据湖?

总结:如何在数据湖之间制作增量/更新副本?

由于

2 个答案:

答案 0 :(得分:1)

不幸的是,ADLS目前没有办法在文件到达时触发事件。话虽如此,我们正在努力提供这种支持,并且很快就会提供。

要执行增量复制,您可以执行诸如将文件组织到包含时间信息的文件夹中的操作。然后使用Azure Data Factory等工具仅复制特定当前时间范围内的文件。

谢谢, 萨钦谢思 Azure Data Lake项目经理。

答案 1 :(得分:0)

您可以使用DateTime.Now来获取作业的编译时间。您还可以提取文件的修改或创建时间。例如:

@data = 
  EXTRACT 
    vehicle_id int
  , entry_id long
  , event_date DateTime
  , latitude float
  , longitude float
  , speed int
  , direction string
  , trip_id int?
  , modified_date = FILE.MODIFIED()
  , created_date = FILE.CREATED()
  FROM "/Samples/Data/AmbulanceData/vehicle{*}"
  USING Extractors.Csv();

@res =
  SELECT *
  FROM @data
  WHERE created_date <= DateTime.Now.AddDays(-1);

我请商店团队成员回答有关文件触发器的问题。