Azure blob копирует раздел по дате

#azure #parquet #azure-data-factory #azure-blob-storage

#azure #parquet #azure-data-factory #azure-blob-хранилище

Вопрос:

У меня есть файлы в хранилище больших двоичных объектов Azure, подобные этому:

 entity
|- part001.parquet
|- part002.parquet
|- part003.parquet
|- part004.parquet
...
  

и эти данные parquet получили столбец даты, давайте назовем его transaction_date

Я хочу создать конвейер Azure Data Factory для переноса всех этих данных в другое хранилище больших двоичных объектов, например:

 entity
|- YYYY
    |-MM
        |- entity_YYYYMMDD.parquet
           ...
|- YYYY
    |-MM
        |- entity_YYYYMMDD.parquet
           ...
  

Таким образом, файлы будут содержать только транзакции с определенной датой на основе transaction_date , чтобы их было легче выбрать после.

Есть ли способ сделать это с помощью ADF или другого инструмента стека Azure?

Ответ №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 data factory? Предполагая, что вы используете Azure Data Factory v2 — сложно (не невозможно) создать раздел на основе значения поля, по сравнению с приведенным выше.

Сказав, что существует общедоступный предварительный просмотр потока данных Azure Data Factory, отображающий поток данных — под обложками он использует Azure Databricks для вычислений. Я не тестировал / и не играл, может быть, вы могли бы использовать действие преобразования, такое как условное разделение. Но опять же, использовать Databricks просто.

Комментарии:

1. Спасибо @databash, просто использовал ваш скрипт здесь, и на выходе я получил странные имена папок, например год = ГГГГ, месяц = ММ… Вы оставляете это как это? Есть ли способ написать как иерархия вопросов?

2. К сожалению, именно так Apache создает разделы spark. К нему прилагаются слова «год» и «месяц». Мы не можем настроить его так, как вам нужно. Когда вы читаете эту папку вниз по течению, вам нужно разобраться с ней.