我在 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工具执行此操作的任何方法?
答案 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只是简单。