Databricks Delta Tabulky Sloučit prohlášení pomocí R

0

Otázka

Nedávno jsem začal pracovat na Databricks a snažil jsem se najít způsob, jak provést sloučení prohlášení o Delta stole, když pomocí e R api (nejlépe sparklyr). Konečným cílem je, aby nějakým způsobem uložit "duplikát" omezení, jak je popsáno zde. Výše uvedená dokumentace popisuje Python workflow :

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

nicméně, byl jsem přemýšlel, zda je rovný-dopředu způsobem, jak toho dosáhnout prostřednictvím R. pomoc/nápady na věci bude velmi ocenil, protože jsem nový uživatel (jak je uvedeno výše). Díky předem!

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

Neexistuje žádný oficiální R. API pro Delta Lake, ale stačí použít SQL je SLOUČIT DO příkaz (to dělám často v Scala/Python, jen proto, že je snazší číst, alespoň pro mě). Musíte se zaregistrovat temp zobrazení s údaji, které chcete dát do cílové tabulky, a stačí spustit sql, jako je tento (řetězec je rozdělen pro čitelnost):

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

Je to smutné, rozhodčího, aby žádný oficiální podpora pro R Delta Lake API podporu. Každopádně, díky moc za řešení a zpětnou vazbu poskytnout ; každém případě mohu vyhnout TempView? Myslím, že ne, je to tak?
takmers

Můžete teoreticky zapsat na disk, a používat to, ale to by bylo ještě horší než teplota zobrazení
Alex Ott

Btw, vypadá to jako nějaký wrapper pro R je propuštěn, i když to není oficiální
Alex Ott
1

Poskytuje tuto odpověď od vás poznamenal, že není R Delta Lake API podporu. Tam je nyní nový R balíček, který poskytuje R API pro Delta Lake: dlt. Syntaxe je velmi podobná Python API pro Delta Lake.

V případě vašeho příkladu:

# 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

V jiných jazycích

Tato stránka je v jiných jazycích

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