Databricks Delta Tabuľka Zlúčiť ziskov a strát použitím R

0

Otázka

Nedávno som začal pracovať na Databricks a ja som sa snažila nájsť spôsob, ako vykonať zlúčenie ziskov a strát na Delta tabuľky, keď používate R api (najlepšie sparklyr). Konečným cieľom je, aby sa nejako uložiť "duplikát", obmedzenia, ako je popísané tu. Vyššie uvedený dokumentácia popisuje: Python workflow :

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

avšak, bol som zvedavý, či tam je bezproblémová spôsob, ako tento cieľ dosiahnuť prostredníctvom R. Akúkoľvek pomoc/nápady na záležitosť bude veľmi ocenil, pretože som nový užívateľ (ako je uvedené vyššie). Vďaka vopred!

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

Nie je tam žiadny oficiálny R API pre Delta Lake, ale stačí použiť SQL je ZLÚČIŤ DO príkaz (často som to v Scala/Python, len preto, že je to jednoduchšie čítanie, aspoň pre mňa). Musíte sa zaregistrovať temp zobraziť údaje, ktoré chcete dať do cieľovej tabuľky, a stačí spustiť sql,, ako je tento (string je rozdelený na čitateľnosť):

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 je smutné, odkaz na žiadnu oficiálnu podporu pre R Delta Lake podporu API. V každom prípade, vďaka moc za riešenie a spätnú väzbu poskytujeme ; žiadnom prípade som sa môžete vyhnúť TempView? Myslím, že nie, správne?
takmers

Môžete teoreticky zapísať na disk a používať to, ale bolo by to horšie, než temp zobraziť
Alex Ott

Btw, to vyzerá ako nejaký wrapper pre R je uvoľnený, aj keď nie oficiálne
Alex Ott
1

Predpokladu, že na to odpovedať, pretože ste uviedol, že nie je R Delta Lake podporu API. Tam je teraz nový R balík, ktorý poskytuje R API pre Delta Lake: dlt. Syntax je veľmi podobná Python API pre Delta Lake.

V prípade vášho príklad:

# 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 iných jazykoch

Táto stránka je v iných jazykoch

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