Скопируйте данные из нескольких файлов CSV в один файл CSV - PullRequest
0 голосов
/ 26 июня 2019

У меня есть несколько CSV-файлов в моем хранилище BLOB-объектов Azure, которые я хочу добавить в один CSV-файл, который также хранится в хранилище BLOB-объектов Azure с использованием конвейера фабрики данных Azure. Проблема заключается в том, что все столбцы исходных файлов отсутствуют в файле приемника и наоборот, а также все исходные файлы не идентичны. Я просто хочу отобразить нужные мне столбцы из исходных файлов в столбцы в файле приемника. Операции копирования в фабрике данных не позволяют мне сделать это.

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Как сказал @LeonYue, теперь он не поддерживается на фабрике данных Azure.Однако, по моему опыту, в качестве обходного решения вы можете создать сценарий Python, используя для этого pandas, и запустить его как WebJob службы приложений Azure или на виртуальной машине Azure для ускорения между хранилищем Azure и другими службами Azure.

Шаги обходного решения, как показано ниже.

  1. Возможно, все эти CSV-файлы находятся в контейнере хранилища BLOB-объектов Azure, поэтому их необходимо перечислить в контейнере через list_blob_names и сгенерируйте их URL с токеном sas для функции панд read_csv , код как показано ниже.

    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))
    
  2. Для непосредственного чтения csvфайл с помощью функции read_csv для получения фрейма данных pandas.

    import pandas as pd
    
    for blob_url_with_token in blob_urls_with_token:
        df = pd.read_csv(blob_url_with_token)
    
  3. Вы можете следовать своему желанию управлять этим фреймом данных с помощью pandas, а затем записывать в хранилище BLOB-объектов Azure как один csvфайл с помощью Azure Storage SDK для Python.

Надеюсь, это поможет.

0 голосов
/ 28 июня 2019

Согласно моему опыту, если ваши CSV-файлы не имеют одинаковый формат или столбцы с файлом-получателем, вы не можете объединить или добавить один CSV-файл. На этапе Mapping мы не можем импортировать схему и сопоставить нужные столбцы.

Фабрика данных Azure не поддерживает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...