Instrukcja fuzji delta-tabel Databricks z wykorzystaniem R

0

Pytanie

Ja ostatnio zacząłem pracować nad bazami danych i próbował znaleźć sposób na wykonanie instrukcji merge dla delta-tabele, choć z wykorzystaniem api R (najlepiej sparklyr). Ostatecznym celem jest, aby w jakiś sposób nałożyć "zdublowaną" ograniczenia, jak opisano tutaj. Powyższa dokumentacja opisuje proces roboczy Python :

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

jednak zastanawiałem się, czy istnieje prosty sposób, aby to osiągnąć za pomocą R. Każda pomoc/pomysły w tej sprawie będą wysoko oceniane, ponieważ jestem nowym użytkownikiem (jak wspomniano powyżej). Z góry dziękuję!

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

Oficjalnego API R dla Delta Lake nie ma, ale do tego można po prostu użyć polecenia SQL MERGE INTO (ja często robię to w Scala/Python, tylko dlatego, że jej łatwiej czytać, przynajmniej dla mnie). Musisz zarejestrować tymczasowe widok z danymi, które chcesz umieścić w tabeli docelowej, i po prostu uruchomić sqltak (wiersz podzielony jest dla czytelności):

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

To smutne, powołując się na brak oficjalnego wsparcia API R Delta Lake. W każdym razie, bardzo dziękuję za otrzymaną decyzję i zwrotne ; w każdym razie mogę uniknąć oglądania TempView? Przypuszczam, że nie, prawda?
takmers

Teoretycznie można nagrać go na dysk i używać, ale to byłoby gorsze, niż tymczasowe widok
Alex Ott

Przy okazji, wygląda na to, że wydana jakaś osłona dla R, choć nie oficjalna
Alex Ott
1

Udostępniając tę odpowiedź, ponieważ stwierdziły, że brak wsparcia dla API R Delta Lake. Teraz istnieje nowy pakiet R, który dostarcza API R dla Delta Lake: dlt. Składnia jest bardzo podobna do składni języka Python API dla Delta Lake.

W przypadku twojego przykładu:

# 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

W innych językach

Ta strona jest w innych językach

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