我在 Azure blob 存储中有这样的文件:
entity
|- part001.parquet
|- part002.parquet
|- part003.parquet
|- part004.parquet
...
这个镶木地板数据有一个日期列,让我们把它命名为transaction_date
我想创建一个 Azure 数据工厂管道,将所有这些数据迁移到另一个 blob 存储中,如下所示:
entity
|- YYYY
|-MM
|- entity_YYYYMMDD.parquet
...
|- YYYY
|-MM
|- entity_YYYYMMDD.parquet
...
因此,这些文件将仅包含基于transaction_date
的特定日期事务,以便之后更轻松地选择它们。
有什么方法可以使用ADF或其他Azure Stack工具执行此操作?
您追求的是动态分区或基于字段/列值的分区。
我们使用 Azure Databricks 来处理此类事情,如果需要重复执行,则通过 Azure 数据工厂 v2 计划笔记本。在笔记本中,您可以拥有如下所示的 pyspark 脚本(请注意,此代码只是一个未经测试的模式(
extractData = spark.read.parquet("<<<input blob storage path>>>")
extractData = extractData
.withColumn("transaction_year", year("transaction_date"))
.withColumn("transaction_month", month("transaction_date"))
extractData.write.mode("overwrite")
.partitionBy("transaction_year", "transaction_month")
.parquet("<<<output blob storage path>>>")
是否可以仅使用 Azure 数据工厂?假设使用的是 Azure 数据工厂 v2 - 与上述相比,很难(并非不可能(基于字段值进行分区。
话虽如此,Azure 数据工厂映射数据流有公共预览版 - 在幕后,它使用 Azure Databricks 进行计算。我还没有测试/或玩过,您可能可以使用像条件拆分这样的转换活动。但同样,使用Databricks很简单。