我在Azure Blob存储中有多个CSV文件,我希望将其附加到一个CSV文件中,也将使用Azure Data Factory Pipeline存储在Azure Blob存储中。问题在于,源文件的所有列都不存在于接收器文件中,反之亦然,所有源文件也不相同。我只想映射从源文件到接收器文件中的列所需的列。数据工厂中的复制活动不允许我这样做。
正如@leonyue所说,它现在不支持Azure Data Factory。但是,根据我的经验,作为解决方法解决方案,您可以考虑使用pandas
创建一个Python脚本来执行此操作,并作为Azure App Service的WebJob或在Azure VM上运行,以加速Azure Storage和其他Azure Services之间。
解决方案的步骤如下。
-
也许这些CSV文件都在Azure Blob存储的容器中,因此您需要通过
list_blob_names
在容器中列出它们,并使用pandas read_csv函数的SAS令牌生成其URL,代码如下。from azure.storage.blob.baseblobservice import BaseBlobService from azure.storage.blob import ContainerPermissions from datetime import datetime, timedelta account_name = '<your account name>' account_key = '<your account key>' container_name = '<your container name>' service = BaseBlobService(account_name=account_name, account_key=account_key) token = service.generate_container_shared_access_signature(container_name, permission=ContainerPermissions.READ, expiry=datetime.utcnow() + timedelta(hours=1),) blob_names = service.list_blob_names(container_name) blob_urls_with_token = (f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}" for blob_name in blob_names) #print(list(blob_urls_with_token))
-
通过
read_csv
函数直接读取CSV文件以获取Pandas DataFrame。import pandas as pd for blob_url_with_token in blob_urls_with_token: df = pd.read_csv(blob_url_with_token)
-
您可以按照您的脑袋操作这些数据框,然后通过使用python使用Azure Storage SDK来写入Azure Blob存储作为单个CSV文件。
希望它有帮助。
根据我的经验,如果您的CSV文件与接收器文件没有相同的格式或列,则无法合并或附加到一个CSV文件。在映射步骤中,我们无法导入模式并映射您需要的列。
Azure数据工厂不支持这样做。