按日期的 Azure Blob 复制分区

标签 azure parquet azure-data-factory azure-blob-storage

我的 Azure Blob 存储中有这样的文件:

entity
|- part001.parquet
|- part002.parquet
|- part003.parquet
|- part004.parquet
...

这个 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 数据工厂映射数据流有公共(public)预览版 - 在幕后它使用 Azure Databricks 进行计算。我还没有测试/或玩过,也许你可以使用类似 conditional split 的转换事件。但使用 Databricks 也很简单。

关于按日期的 Azure Blob 复制分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464883/

相关文章:

azure - 如何通过 MS Graph/Graph Explorer 更新 B2B 管理策略?

python - 检查 python azure 中是否存在 blob

python - 如何在 python 中使用 pyarrow 从 S3 读取分区 Parquet 文件

hadoop - 是否可以在具有不同模式的 Parquet 文件上创建外部配置单元表?

python - 如何在没有 RLE_DICTIONARY 编码的情况下将 CSV 转换为 Parquet 文件?

azure - 我们可以在 ADF 数据流中选择以特定字符串开头的列吗?

azure - 打开 Redshift 和数据工厂的 IP 地址

azure - 使用不同可用区的计数来部署虚拟机

azure - 带有 Kubernetes 和 Helm 的 Microsoft Azure "The maximum number of data disks allowed to be attached to a VM of this size is 4."