我的azure blob存储中有多个csv文件,希望将它们附加到一个使用azure数据工厂管道存储在azure blob存储中的csv文件中。问题在于,源文件中的所有列都不存在于接收器文件中,反之亦然,并且所有源文件也不相同。我只想将我需要的列从源文件映射到接收器文件中的列。数据工厂中的复制活动不允许我这样做。
答案 0 :(得分:0)
根据我的经验,如果您的csv文件与接收器文件的格式或列不同,则无法合并或追加到一个csv文件。在“映射”步骤中,我们无法导入架构并映射所需的列。
Azure Data Factory不支持这样做。
答案 1 :(得分:0)
正如@LeonYue所说,Azure Data Factory现在不支持。但是,根据我的经验,作为一种解决方法,您可以考虑使用pandas
创建Python脚本来执行此操作,并作为Azure应用服务的WebJob或在Azure VM上运行,以在Azure存储和其他Azure服务之间加速。
解决方法的步骤如下。
也许这些csv文件都在Azure Blob存储的容器中,所以您需要通过list_blob_names
在容器中列出它们,并使用sas令牌为熊猫read_csv函数生成其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文件以获取熊猫数据框。
import pandas as pd
for blob_url_with_token in blob_urls_with_token:
df = pd.read_csv(blob_url_with_token)
您可以按照需要通过熊猫操作这些数据框,然后通过使用适用于Python的Azure存储SDK将其作为单个csv文件写入Azure Blob存储。
希望有帮助。