Seite 1 von 1

SQL in R transformierbar

Verfasst: Di Apr 14, 2020 12:56 pm
von hummeale
Hallo zusammen,
leider bin ich gezwungen einen Code den ich in SQL geschrieben hatte in R zu übernehmen, falls dies möglich ist. In R habe ich leider wenig Erfahrungen und weiß nicht sicher ob der Code ähnlich simple funktioniert
Den entsprechenden SQL Code findet ihr im Anhang. Anhand dieses Codes konnte ich über die Zeit hinweg(Reporting_dt) Deltas für die Var ECL_AMT bestimmen. Je nachdem konnte ich dies für 1 Periode machen oder in der 12 MOnate SIcht. Falls es keine Variable im letzten Monat gab wurde dafür eine Null gesetzt. Unterteilt war dies in Business_partner_id und reporting_dt.
Ich bin leider relativ ratlos und hoffe das es vielleicht hier jemanden gibt der sowohl mit R als auch SQL Erfahrung hat und mir hierbei weiterhelfen kann.
Vielen Dank im Voraus!
Codesql.PNG
Codesql.PNG (8.79 KiB) 3896 mal betrachtet

Re: SQL in R transformierbar

Verfasst: Di Apr 14, 2020 3:07 pm
von jogo
Hallo hummeale,

willkommen im Forum!
Es gibt verschiedene gangbare Wege:
1. Die Datenbankabfrage aus R heraus erledigen. Dafür gibt es für R entsprechende bindings - mehr oder weniger speziell für die jeweilige SQL-Datenbank.
2. Das Paket sqldf stellt SQL für die Arbeit mit Dataframes zur Verfügung.
3. Das Paket data.table stellt eine Syntax für den Umgang mit den Datenobjekten zur Verfügung, die strukturell ähnlich zu SQL ist.

Was für eine Datenbank liegt bei Dir vor?
Mit welchen Datenmengen soll jongliert werden?

Gruß, Jörg

Re: SQL in R transformierbar

Verfasst: Di Apr 14, 2020 3:53 pm
von EDi
Ich würde aus performanzgründen immer soviel wie möglich auf der Datenbank rechnen.
Geht auch wunderbar entweder mit SQL direkt oder auch in R Syntax die zu SQL umgeschrieben wird.

Hier ein Beispiel von jogos vorschlägen (+dplyr Beispiel) welche eine in-memory SQLite nutzt...

Code: Alles auswählen

library(dplyr)
library(DBI)

# spin up a SQLite in memory
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = ":memory:")

# add some example data
copy_to(con, 
        iris, 
        "iris",
        temporary = FALSE, 
        indexes = list(
          "Species"
        )
)


# 1 Query SQL directly. Send Query directly to DB

dbGetQuery(con, 'SELECT AVG("Sepal.Length") as mean_sepal_length FROM iris GROUP BY Species')

# 2 create SQL in R/dplyr Syntax, then send to DB
tbl(con, "iris") %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE))

# here is the created query
tbl(con, "iris") %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE)) %>%
  show_query()


# 3 Fetch all data and compute in R (less performant for bigger data)

df <- dbGetQuery(con, "SELECT * FROM iris") 

df %>%
  group_by(Species) %>%
  summarise(mean_sepal_length = mean(Sepal.Length, na.rm = TRUE)) 

# or
tapply(df$Sepal.Length, df$Species, mean)
# or many others

# 4 Fetch all data and compute in R using SQL Syntax (less performant for bigger data)
require(sqldf)
mydata <- iris
sqldf('SELECT AVG("Sepal.Length") as mean_sepal_length FROM mydata GROUP BY Species')
Oder willst du nur die Logik der Abfrage nach R portieren? Dann solltest du uns aber ein reproduzierbares Beispiel lieferen!

Re: SQL in R transformierbar

Verfasst: Mi Apr 15, 2020 1:43 pm
von hummeale
Danke für deine Antwort. Ja ich würde auch gerne so viel wie möglich über SQL machen. Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ? Das wäre mir am allerliebsten.
Ansonsten werd ich mal deinen Ansatz ausprobieren.
Besten Dank nochmal!

Re: SQL in R transformierbar

Verfasst: Mi Apr 15, 2020 2:02 pm
von jogo
hummeale hat geschrieben: Mi Apr 15, 2020 1:43 pm Danke für deine Antwort. Ja ich würde auch gerne so viel wie möglich über SQL machen. Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ?
Wenn Du so ein binding an eine Datenbank verwendest, liefern die SQL-Queries ein Dataframe-Objekt in R.

Kannst Du mir trotzdem meine Fragen beantworten?
Was für eine Datenbank liegt bei Dir vor?
Mit welchen Datenmengen soll jongliert werden?


Gruß, Jörg

Re: SQL in R transformierbar

Verfasst: Do Apr 16, 2020 12:06 am
von EDi
Ist es denn möglich meine Abfrageergebnisse aus SQL einfach in R zu exportieren ?
Kann, siehe mein dbGetQuery Beispiel. R kann mit fast alles Datenbanken umgehen, sofern man die Treiber ordentlich installiert hat...

Re: SQL in R transformierbar

Verfasst: Do Apr 16, 2020 5:19 pm
von schubbiaschwilli
Gude!

Vielleicht off-topic, wenn ja würde ich einen neuen Thread eröffnen:
Kennst du eine Möglichkeit, über Ubuntu auf .acccdb (MS Access) zuzugreifen? Ich nutzte in der MS-Welt odbc, kenne aber keinen ODBC-Treiber für ubuntu (bin aber auch kein ITler).

Dank&Gruß
schubbiaschwilli