Инструкция слияния дельта-таблиц Databricks с использованием R

0

Вопрос

Я недавно начал работать над базами данных и пытался найти способ выполнить инструкцию merge для дельта-таблицы, хотя и с использованием api R (предпочтительно sparklyr). Конечная цель состоит в том, чтобы каким-то образом наложить "дублирующее" ограничение, как описано здесь. Вышеупомянутая документация описывает рабочий процесс Python :

deltaTable.alias("logs").merge(
    newDedupedLogs.alias("newDedupedLogs"),
    "logs.uniqueId = newDedupedLogs.uniqueId") \
  .whenNotMatchedInsertAll() \
  .execute()

тем не менее, мне было интересно, существует ли прямой способ добиться этого с помощью R. Любая помощь/идеи по этому вопросу будут высоко оценены, так как я новый пользователь (как упоминалось выше). Заранее спасибо!

databricks delta-lake duplicates r
2021-11-23 14:03:15
2
1

Официального API R для Delta Lake нет, но для этого вы можете просто использовать команду SQL MERGE INTO (я часто делаю это в Scala/Python, просто потому, что ее легче читать, по крайней мере для меня). Вам нужно зарегистрировать временное представление с данными, которые вы хотите поместить в целевую таблицу, и просто запустить sql, вот так (строка разделена для удобства чтения):

library(SparkR)
updates_df <- ...get updates...
createOrReplaceTempView(updates, "updates")
result <- sql(
  "MERGE INTO <your_table> AS target USING updates 
   ON target.id = updates.id WHEN NOT MATCHED THEN INSERT *")
2021-11-23 16:56:28

Это печально, ссылаясь на отсутствие официальной поддержки поддержки API R Delta Lake. В любом случае, большое спасибо за предоставленное решение и обратную связь ; в любом случае я могу избежать просмотра TempView? Я полагаю, что нет, верно?
takmers

Теоретически вы можете записать его на диск и использовать, но это было бы хуже, чем временное представление
Alex Ott

Кстати, похоже, что выпущена какая-то оболочка для R, хотя и не официальная
Alex Ott
1

Предоставляя этот ответ, так как вы прокомментировали, что нет поддержки API R Delta Lake. Теперь существует новый пакет R, который предоставляет API R для Delta Lake: dlt. Синтаксис очень похож на синтаксис Python API для Delta Lake.

В случае вашего примера:

# Install and laod the `dlt` package
remotes::install_gitlab("zero323/dlt")
library(dlt)
...

# Use the Delta Lake R API from the dlt package
deltaTable <- dlt_for_path("<path to table>")

deltaTable %>%
  dlt_alias("logs") %>%
  dlt_merge(alias(newDedupedLogs, "newDedupedLogs"), expr("newDedupedLogs.uniqueId = logs.uniqueId")) %>%
  dlt_when_not_matched_insert_all() %>%
  dlt_execute()
2021-11-27 18:23:06

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Популярное в этой категории

Популярные вопросы в этой категории