Azure Blob复制按日期分区

时间:2019-04-01 23:23:23

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

我在 Azure Blob存储中有文件,如下所示:

declare class OktaSignIn {
  constructor(configuration: OktaSignInConfig);
}

interface OktaSignIn {
  renderEl(configuration: { el: string }): void;
  remove(): void;

  session: {
    get: (callback: (repsonse: any) => void) => void;
  };
}

interface OktaSignInConfigAuthParams {
  issuer: string;
  display: 'page';
  scopes: string[];
  responseType: string[];
}

interface OktaSignInConfigi18n {
  en: {
    'primaryauth.username.placeholder': string;
    'primaryauth.username.tooltip': string;
    'error.username.required': string;
    'error.password.required': string;
  };
}

interface OktaSignInConfig {
  baseUrl: string;
  logo: string;
  clientId?: string;
  redirectUri?: string;
  authParams: OktaSignInConfigAuthParams;
  i18n: OktaSignInConfigi18n;
}

此镶木地板数据有一个日期列,我们将其命名为entity |- part001.parquet |- part002.parquet |- part003.parquet |- part004.parquet ...

我想创建一个Azure数据工厂管道,以将所有这些数据迁移到另一个blob存储中,如下所示:

transaction_date

因此,这些文件将仅包含基于entity |- YYYY |-MM |- entity_YYYYMMDD.parquet ... |- YYYY |-MM |- entity_YYYYMMDD.parquet ... 的特定日期交易,以便以后更容易选择它们。

使用ADF或其他Azure Stack工具执行此操作的任何方法?

1 个答案:

答案 0 :(得分:1)

您需要的是动态分区或基于字段/列值的分区。

我们使用Azure Databricks处理此类事情,如果需要重复执行,则可以通过Azure Data Factory 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 Data Factory v2-与上面相比,它很难(不是不可能)基于字段值进行分区。

已经说过,Azure数据工厂映射数据流已经公开预览-在其幕后使用Azure Databricks进行计算。我尚未测试/玩过,也许您可​​以使用conditional split之类的转换活动。但是再次使用Databricks只是简单。