Автоматический загрузчик DataBricks и обнаружение удаления исходных файлов ввода

При непрерывном приеме файлов из исходной корзины s3 я хотел бы иметь возможность обнаруживать случаи удаления файлов. Насколько я могу судить, автозагрузчик не может обнаружить файлы, удаленные в исходной папке. Следовательно, дело не может быть поддержано. Сначала я хочу это подтвердить, и если это действительно так, узнать о подходе или обходном пути, который люди используют для обработки этого сценария. 

Как только вы обнаружите, что объект был удален, что вы хотите, чтобы произошло? Пожалуйста, отредактируйте свой вопрос и добавьте дополнительную информацию о потоке информации и поведении, которое вы ищете.

John Rotenstein 19.05.2024 10:08

Я записываю содержимое файла в дельта-таблицу, и, по сути, мне хотелось бы удалить содержимое файла из дельта-таблицы.

MaatDeamon 20.05.2024 15:28

В качестве альтернативы вы можете просто создать внешнюю таблицу, указывающую на это место в Amazon S3. При каждом доступе к таблице Databricks считывает содержимое файлов в S3. Если файлы удалены, следующий запрос к таблице не будет включать данные, поскольку их больше нет в S3. Если у вас есть конвейер данных (например, с использованием dbt), вы можете просто выбрать из внешней таблицы таблицу Delta, и данные будут точно соответствовать тем, что сейчас находятся в S3. Никаких мероприятий не требуется.

John Rotenstein 21.05.2024 01:02

Спасибо. Я думаю, что не знаю о концепции внешней таблицы, просто чтобы убедиться, можете ли вы указать мне правильный документ, чтобы я мог провести комплексную проверку по этому вопросу?

MaatDeamon 21.05.2024 12:17

Нашёл medium.com/@harshavardhan.achyuta/…

MaatDeamon 21.05.2024 12:21

Хотя я не уверен, что мне это подойдет. Мне нужно будет лучше расширить объяснение варианта использования.

MaatDeamon 21.05.2024 12:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
107
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Согласно документации Databricks в настоящее время нет, AutoLoader срабатывает только при создании объекта (например, событий ObjectCreated) и поэтому не поддерживает обнаружение удаленных файлов; а также рабочие процессы Databricks с помощью таких средств, как триггер прибытия файлов.

Идеальное решение будет зависеть от того, что вы хотите сделать с удаленными файлами. Однако, вообще говоря, возможным обходным решением было бы создание собственной лямбда-функции AWS, которая запускается на основе событий s3:ObjectRemoved:* (вы можете запускать лямбда-функции с помощью уведомлений о событиях S3). В зависимости от того, что вам нужно сделать с удаленным файлом, вы можете предпочесть полностью выполнить обработку с помощью этой функции Lambda. Или вы можете реализовать функцию Lambda, чтобы просто скопировать файл в другое место, что можно использовать в рабочем процессе Databricks либо с помощью AutoLoader, либо с помощью триггера прибытия файлов.

  • (вариант 1): Уведомление о событии S3 -> Lambda (обработка)
    • Это самый компактный вариант с меньшим количеством движущихся частей и более экономичный, но может ограничивать вас с точки зрения вычислительной мощности и возможностей Spark.
  • (вариант 2): Уведомление о событии S3 -> Lambda -> скопировать файл в другое расположение S3 -> Процессы заданий Databricks с триггером прибытия файла
    • Это более сложная задача, поскольку Lambda уже управляется событиями, но, возможно, вам потребуется более длительная обработка или возможности, доступные только в Databricks, поэтому вы все равно можете использовать этот вариант.
  • (вариант 3): Уведомление о событии S3 -> Lambda -> скопировать файл в другое расположение S3 -> Процессы заданий Databricks с помощью AutoLoader
    • Это было бы идеально, если вы хотите выполнить пакетную обработку удаленных файлов из карантина и иметь доступ ко всем возможностям Databricks или Spark.

Я принимаю это, поскольку это действительно решение проблемы. Спасибо тебе за это.

MaatDeamon 25.05.2024 15:06

Это вообще гениально :) !!! Моя нынешняя архитектура немного отличается, но нестандартное мышление определенно поможет, спасибо.

MaatDeamon 25.05.2024 15:17

к сожалению, на секунду, хотя кажется, что возникнет проблема. Чтобы получить доступ к файлу, мне нужно, чтобы файл все еще был доступен в корзине. Однако данное решение не позволит этого. Итак, единственное, что я здесь вижу, это наличие логики для перемещения объекта в другую папку.

MaatDeamon 31.05.2024 18:10

Другие вопросы по теме

Похожие вопросы

Как работает развертывание с нулевым временем простоя с помощью ECS?
Сервисный модуль Systemd не может получить доступ к Jarfile в Ubuntu при запуске документа SSM
Есть ли способ прикрепить политики ServiceRoles к роли, созданной вручную, с помощью AWS CDK?
Как создать несколько правил группы безопасности AWS, прочитав несколько файлов yaml с помощью terraform?
Как избежать ошибки «Неверный тип аргумента» при выполнении, казалось бы, допустимой команды AWS CLI, созданной с использованием jq и bash?
Поместите объект/файл в S3 (паркет или CSV)
Импортируйте существующие ресурсы AWS с помощью CDK
Почему мой шаблон исключения Glue Crawler не применяется?
Какой API нам следует использовать, чтобы получить назначенные роли из ключа доступа AWS и секретного ключа доступа AWS?
Невозможно загрузить PDF в корзину S3 через заранее назначенный URL-адрес, созданный из моего бэкэнда Node