Удаление записей в таблице с миллиардом записей с помощью Spark или Scala

у нас есть таблица в хранилище данных Azure с 17 миллиардами записей. Теперь у нас есть сценарий, в котором мы должны удалить записи из этой таблицы на основе некоторого условия. Мы пишем Spark на языке Scala в записных книжках Azure Databricks.

Мы искали различные варианты сделать это в Spark, но все предлагали сначала прочитать всю таблицу, удалить из нее записи, а затем перезаписать всю таблицу в Data Warehosue. Однако в нашем случае такой подход не сработает из-за огромного количества записей в нашей таблице.

Не могли бы вы подсказать, как мы можем достичь этой функциональности с помощью spark / scala?

1) проверил, можем ли мы вызвать хранимую процедуру через код spark / scala в лазурных модулях данных, но Spark не поддерживает хранимые процедуры.

2) Пытался сначала прочитать всю таблицу, чтобы удалить записи, но это заходит в бесконечный цикл.


person Mayur    schedule 30.07.2019    source источник
comment
Что плохого в том, чтобы просто запустить простой SQL-запрос DELETE FROM ... WHERE ...? При необходимости вы также можете запускать SQL-запросы от рабочих Spark.   -  person simpadjo    schedule 30.07.2019
comment
мы используем записную книжку Scala лазурных блоков данных. если я использовал запрос на удаление напрямую, он дает следующий результат: com.microsoft.sqlserver.jdbc.SQLServerException: ошибка обработки Ошибка анализа в строке: 1, столбец: 31: неправильный синтаксис рядом с 'DELETE'. произошел. [ErrorCode = 0] [SQLState = null] @simpadjo   -  person Mayur    schedule 30.07.2019
comment
Тогда вам нужно просто исправить свой SQL-запрос. Это отдельная проблема.   -  person simpadjo    schedule 30.07.2019
comment
Вы можете просто отправить запрос в sql dw вместо того, чтобы раскручивать кластер databricks, это немного похоже на оплату полета первым классом по всему миру, чтобы пройти 5 дверей по дороге   -  person Ed Elliott    schedule 30.07.2019
comment
В spark / hadoop база данных представляет собой файл с однократной записью и только для чтения. Это означает, что прямых команд для удаления и обновления нет. По этой причине люди предложили вам сначала прочитать всю таблицу, удалить записи из нее, а затем перезаписать всю таблицу в Data Warehosue.   -  person ramana_k    schedule 02.08.2019


Ответы (1)


Можно создать представление с предложением select в соответствии с вашими требованиями, а затем использовать представление

person Ravi    schedule 02.08.2019