#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. К нему прилагаются слова «год» и «месяц». Мы не можем настроить его так, как вам нужно. Когда вы читаете эту папку вниз по течению, вам нужно разобраться с ней.