chciałbym wyodrębnić wszystkie Create Statements
w moim 50 MySQL
baz danych poprzez SHOW CREATE TABLE db.table
lub SHOW CREATE TABLE db1.mytable
lub SHOW CREATE TABLE db2.sometable
lub SHOW CREATE TABLE db3.mytable1
. W ten sposób każda z DBS kilka stołów wewnątrz db1(table,mytable...) db2(table1,sometable) and so on
Jak wyodrębnić instrukcje tworzenia z różnych tabel baz danych MySQL?
Aby zilustrować DB poprzez przykład zapytania:
SELECT *
FROM db.table1 m
LEFT JOIN db1.sometable o ON m.id = o.id
LEFT JOIN db2.sometables t ON p.id=t.id
LEFT JOIN db3.sometable s ON s.column='john'
library(RMySQL)
library(DBI)
con <- dbConnect(RMySQL::MySQL(),
username = "",
password = "",
host = "",
port = 3306,
dbname= mydbname)# when using dbs<-dbGetQuery(con ,"SHOW DATABASES") I have to ## dbname= mydbname## to get all DBs
Stosując dbs<-dbGetQuery(con ,"SHOW DATABASES")
można wyodrębnić wszystkich baz danych 50 w DbConnection w postaci wektora. Chciałbym zapętlić każdy DB w dbs
i zastosować SHOW CREATE TABLE
do każdego wiersza/db. Przypuszczam, że muszę przeanalizować każdy wiersz/db w dbname= mydbname
i dbs<-dbGetQuery(con ,"SHOW CREATE TABLE")
. Ale ja po prostu nie mogę dowiedzieć się, jak zrobić pętle
próbowałem:
apply(dbs, 1, function(row) {
dbname <- row[]
for (i in 1:length(dbname)) {
create<-dbGetQuery(con,"SHOW CREATE TABLE") }
})
ale że nie robi wydaje się słuszne. Przypuszczam, że muszę jakoś włączyć do pętli con
. Inaczej dostanę: Error in .local(drv, ...) : object 'dbname' not found
Tak próbowałem:
apply(dbs, 1, function(row) {
dbname <- row[]
for (i in 1:length(dbname)) {
con <- dbConnect(RMySQL::MySQL(),
username = "",
password = "",
host = "",
port = 3306,
dbname= [i])
create<-dbGetQuery(con,"SHOW CREATE TABLE") }})
Przypuszczam, że zbliża się do rozwiązania, ale tęsknię za coś:
dbs<-dbGetQuery(con,"show databases")
library(foreach)
foreach(i = 1:(length(dbs))%dopar%{
query<-paste("SHOW CREATE TABLE",dbs[i])
creates<-dbGetQuery(con,query)
})
To nawet lepiej niż się spodziewałem. Dziękuję Ci bardzo!! – Googme
@ Parfait. Czy mogę zadać ci jedno pytanie dotyczące 'stmtsdf <- do.call (rbind, createstmts)' Moje 'creatstmts'jest dość duże, prawie 2MB i otrzymam' Error in rbind (deparse.level, ...): liczba kolumn argumentów nie pasuje "Czy istnieje ogólne podejście do radzenia sobie z tym? – Googme
Myślę, że w moim DB są też 'Widok'. Przypuszczam, że w jakiś sposób zmienia strukturę danych dla 'rbind' – Googme