Как предотвратить попадание повторяющихся записей в дельта-озеро хранилища Azure

У меня есть Dataframe, хранящийся в формате дельты в Adls, теперь, когда я пытаюсь добавить новые обновленные строки в это озеро дельты, это должно быть, есть ли способ, где я могу удалить старую существующую запись в дельте и добавить новую обновленную запись.

Существует уникальный столбец для схемы DataFrame, хранящейся в Delta. с помощью которого мы можем проверить, обновлена ​​ли запись или новая.


person Korada Ganesh    schedule 10.06.2021    source источник


Ответы (1)


Это задача для команды слияния - вы определяете условие для слияния (ваш уникальный столбец), а затем действия. В SQL это может выглядеть следующим образом (column - ваш уникальный столбец, а updates может быть вашим фреймом данных, зарегистрированным как временное представление):

MERGE INTO destination
USING updates
ON destination.column = updates.column
WHEN MATCHED THEN
  UPDATE SET *
WHEN NOT MATCHED
  THEN INSERT *

В Python это могло выглядеть так:

from delta.tables import *

deltaTable = DeltaTable.forPath(spark, "/data/destination/")

deltaTable.alias("dest").merge(
    updatesDF.alias("updates"),
    "dest.column = updates.column") \
  .whenMatchedUpdateAll() \
  .whenNotMatchedInsertAll() \
  .execute()
person Alex Ott    schedule 10.06.2021
comment
Привет, Алекс Отт, Ваше решение действительно сработало, спасибо за это. Есть ли способ, которым мы можем уменьшить рассмотрение нашей дельта-таблицы, например, изменить ее на, до учета только определенных разделов, а не всей дельта-таблицы. Это действительно поможет - person Korada Ganesh; 11.06.2021
comment
Вам просто нужно правильно построить условие ON - person Alex Ott; 11.06.2021
comment
Привет, Алекс, не могли бы вы объяснить это более кратко относительно синтаксиса. Я использовал упомянутый вами код Python. deltaTable = DeltaTable.forPath (spark, / data / destination /), поэтому можем ли мы упомянуть здесь что-нибудь, вместо того, чтобы читать всю таблицу, читать только определенные разделы дельта-таблицы, поскольку по мере прохождения дней данные будут увеличиваться. - person Korada Ganesh; 12.06.2021
comment
разверните условие "dest.column = updates.column", чтобы включить проверку ключа раздела - person Alex Ott; 12.06.2021