Databricks Delta Tabela de instrução Merge usando R

0

Pergunta

Eu recentemente comecei a trabalhar em Databricks e eu tenho tentado encontrar uma maneira de executar uma instrução merge em uma tabela de Delta, ainda que usando um R api (de preferência sparklyr). O objetivo final é, de alguma forma, impor uma "duplicata" restrição, conforme descrito aqui. A referida documentação descreve o Python fluxo de trabalho :

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

no entanto, eu estava me perguntando se existe uma maneira directa para conseguir isso através de R. de Qualquer ajuda/ideias sobre o assunto será muito apreciada desde que eu sou um novo utilizador (como mencionado acima). Obrigado antecipadamente!

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

Não há nenhum oficial R API para o Delta do Lago, mas você pode apenas usar o SQL do MESCLAR de comando para que (eu muitas vezes fazê-lo em Scala/Python, só porque é mais fácil de ler, pelo menos para mim). Você precisa registrar um temp ver com os dados que você deseja colocar na tabela de destino, e apenas executar sql, como este (seqüência de caracteres é dividido para facilitar a leitura):

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

Isso é triste, ref ao suporte não oficial para R Delta Lago suporte de API. De qualquer maneira, muito obrigado pela solução e feedback ; em qualquer caso, evitar o TempView? Eu suponho que não, correto?
takmers

Teoricamente você pode escrever para o disco e usá-lo, mas ele seria pior do que temp vista
Alex Ott

Btw, parece que alguns wrapper para R é lançado, apesar de não ser oficial
Alex Ott
1

Fornecer esta resposta, pois o que você comentou que não há R Delta Lago suporte de API. Existe agora um novo pacote que fornece um R API para o Delta do Lago: dlt. A sintaxe é muito semelhante ao da API Python para o Delta do Lago.

No caso do seu exemplo:

# 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

Em outros idiomas

Esta página está em outros idiomas

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