Dplyr: postgresql schema.table을 dplyr νŒ¨ν‚€μ§€μ™€ μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2014λ…„ 02μ›” 06일  Β·  15μ½”λ©˜νŠΈ  Β·  좜처: tidyverse/dplyr

λ‚˜λŠ” GitHub/hadley/dplyr에 λŒ€ν•΄ μ•ŒκΈ° 전에 이 μ§ˆλ¬Έμ„ μΌμŠ΅λ‹ˆλ‹€.
http://stackoverflow.com/questions/21592266/i-cannot-connect-postgresql-schema-table-with-dplyr-package

dplyr, ggplots, reshape2 및 ..... κ°μ‚¬ν•©λ‹ˆλ‹€.

feature

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

FWIW, 일뢀 μ‚¬μš© μ‚¬λ‘€μ˜ 경우 μœ μš©ν•œ κ΄€μš©κ΅¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

dbSendQuery(con$con, build_sql("SET search_path TO ", schema_name))

그런 λ‹€μŒ ν•΄λ‹Ή 연결을 μ‚¬μš©ν•˜λŠ” 후속 μΏΌλ¦¬λŠ” ν•΄λ‹Ή μŠ€ν‚€λ§ˆ 내에 μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  15 λŒ“κΈ€

@hadley λ‹Ήμ‹ μ˜ λŒ€λ‹΅μ— λŒ€ν•΄ μƒκ°ν•˜κ³  전체 SQL λ¬Έμž₯을 μž‘μ„±ν•˜κΈ° μœ„ν•΄ μ™”μŠ΅λ‹ˆλ‹€

my_tbl = tbl(my_db, dplyr::sql('SELECT * FROM mortalidad.def0307'))

κ±°κΈ°μ—μ„œ μŠ€ν‚€λ§ˆμ™€ ν…Œμ΄λΈ”μ— μ—°κ²°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 정말 κ°μ‚¬ν•©λ‹ˆλ‹€. – 디에고

Greenplumκ³Ό ν•¨κ»˜ μž‘μ—…ν•  λ•Œ 이 λ™μΌν•œ 문제λ₯Ό κ²Œμ‹œν•˜λ €κ³  ν–ˆμŠ΅λ‹ˆλ‹€. 당신은 SQL λ°©λ²•μœΌλ‘œ λ‚΄ 문제λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 그것에 λ§Œμ‘±ν•œλ‹€. λ‚˜λ₯Ό κ±±μ •μ‹œν‚€λŠ” μœ μΌν•œ 것은 sql λ¬Έμ—μ„œ λ‹€μŒμ΄ κ΄€μ°°λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

SELECT "var1", count(*) AS "n" FROM (SELECT * FROM mortalidad.mort12)

κ·Έλ£Ήν™”κ°€ μ™„λ£Œλ˜λ©΄. FROM 뒀에 ν•˜μœ„ 쿼리가 있으며 이것이 SQL 쿼리의 νš¨μœ¨μ„±μ— μ–΄λ–€ μœ ν˜•μ˜ λ¬Έμ œκ°€ μžˆλŠ”μ§€ λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. μ €λŠ” μ „μ—Όλ³‘ν•™μžμ΄λ©° 이에 λŒ€ν•΄ 잘 λͺ¨λ¦…λ‹ˆλ‹€.

ν•΄λ‹Ή μŠ€ν‚€λ§ˆμ— μŠ€ν‚€λ§ˆμ™€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ postgresqlμ—μ„œ μ‹€ν–‰ν•  수 μžˆλŠ” 일련의 SQL λͺ…령을 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ—¬κΈ°μ—μ„œ 지연에 λŒ€ν•΄ μ£„μ†‘ν•©λ‹ˆλ‹€. κ³„νšμ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ λ³΄λƒ…λ‹ˆλ‹€.

CREATE TABLE schema_name.table_name
(
codigo 문자 λ³€ν™”(3),
nombre 문자 λ³€ν™”(51),
μ½˜ν‹°λ„¨νŠΈ 캐릭터 λ°”λ¦¬μ—μ΄μ…˜(7)
)

2014-03-19 18:56 GMT-03:00 Hadley Wickham [email protected] :

μ‹€ν–‰ν•  수 μžˆλŠ” 일련의 SQL λͺ…령을 μ•Œλ €μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?
postgresql을 μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή μŠ€ν‚€λ§ˆμ— μŠ€ν‚€λ§ˆμ™€ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μƒμ„±ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?

이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ Gi tHubhttps://github.com/hadley/dplyr/issues/244#issuecomment -38112148μ—μ„œ ν™•μΈν•˜μ„Έμš”.
.

디에고 κ°€λ₯΄μ‹€λΌμ‘°
μ˜μ‚¬
Departamento Programas de Salud
Instituto Nacional de Enfermedades Respiratorias
평균 Blas Parera 8260 // μ‚°νƒ€νŽ˜ // μ•„λ₯΄ν—¨ν‹°λ‚˜ //0342 - 4896850
http://www.anlis.gov.ar/inst/iner/

여기에 기본적으둜 두 가지 μ˜΅μ…˜μ΄ μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€.

  1. μ‹λ³„μžμ— 점이 μžˆμ„ λ•Œλ§ˆλ‹€ μ΄μŠ€μΌ€μ΄ν”„ μ²˜λ¦¬λ˜λŠ” 특수 μΌ€μ΄μŠ€μž…λ‹ˆλ‹€. 이것은 x.y 이 "x"."y" 둜 μ΄μŠ€μΌ€μ΄ν”„λ¨μ„ μ˜λ―Έν•©λ‹ˆλ‹€. 이것은 맀우 κ°„κ²°ν•˜λ‹€λŠ” μž₯점이 μžˆμ§€λ§Œ Rμ—μ„œ SQL둜 λ³€ν™˜λœ ν…Œμ΄λΈ”μ€ ν•„λ“œ 이름에 . λ₯Ό μ‚¬μš©ν•  수 μ—†λ‹€λŠ” 단점이 μžˆμŠ΅λ‹ˆλ‹€(맀우 μΌλ°˜μ μ΄μ§€λŠ” μ•ŠμŒ).
  2. μƒˆλ‘œμš΄ νƒˆμΆœ λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. μ•„λ§ˆλ„ 이것을 ν•˜λŠ” κ°€μž₯ μ‰¬μš΄ 방법은 ident() λ₯Ό ν™•μž₯ν•˜μ—¬ μ—¬λŸ¬ 인수λ₯Ό μ·¨ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(예: ident("x", "y") . λ˜λŠ” dot(x, y) μ“Έ 수 μžˆλ„λ‘ NSEλ₯Ό μˆ˜ν–‰ν•˜λŠ” dot() λ₯Ό μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이것은 더 λ§Žμ€ νƒ€μ΄ν•‘μ΄μ§€λ§Œ κΈ°μ‘΄ μ½”λ“œλ₯Ό μ†μƒμ‹œν‚€μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이것은 ν…Œμ΄λΈ” 이름(예: schema.table )κ³Ό 쑰인(예: table.field )μ—μ„œ ν•„λ“œ 이름을 λͺ…ν™•ν•˜κ²Œ ν•˜λŠ” 데 λͺ¨λ‘ μ€‘μš”ν•©λ‹ˆλ‹€.

μ €λŠ” ν˜„μž¬ λͺ…μ‹œμ μΈ dot() ν•¨μˆ˜μ— κΈ°λŒ€κ³  μžˆμŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄ μ΄μŠ€μΌ€μ΄ν”„κ°€ μ „μ—­μ μœΌλ‘œ μž‘λ™ν•˜λŠ” 방식을 λ³€κ²½ν•˜λŠ” 것이 μœ„ν—˜ν•΄ 보이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

흠, 이 μ‚¬μš© μ‚¬λ‘€μ˜ 경우 λ‹€μŒμ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

my_tbl <- tbl(my_db, sql('mortalidad.def0307'))

그리고 λ‚˜μ€‘μ— μ°Έμ‘°ν•  수 μžˆλŠ” λ‹€λ₯Έ μ½”λ“œ(μ„±κ³΅ν•˜μ§€ μ•ŠμŒ)

dot <- function(...) {
  args <- dots(...)
  is_name <- vapply(args, is.name, logical(1))
  if (any(!is_name)) {
    stop("All arguments to dot() must be names.")
  }

  dots <- vapply(args, as.character, character(1))
  class(dots) <- c("ident_multi", "ident", "sql", "character")
  dots
}

dot <- function(...) {
  out <- paste(escape(c(...), parens = FALSE), collapse = ".")
  class(out) <- c("ident", "sql", "character")
  out
}

#' <strong i="6">@export</strong>
escape.ident_multi <- function(x, parens = FALSE, collapse = ", ", con = NULL) {
  y <- vapply(x, escape_ident, FUN.VALUE = character(1), con = con)
  paste(y, collapse = ".")
}

#' <strong i="7">@export</strong>
format.ident_multi <- function(x, ...) paste0("<SQL> ", paste(x, collapse = "."))

# lahman_sqlite() %>% tbl("Batting")
# lahman_sqlite() %>% tbl("main.Batting")
# lahman_sqlite() %>% tbl(sql("main.Batting"))
# lahman_sqlite() %>% tbl(dot("main", "Batting"))

μ•ˆλ…• 해듀리,

λ‚˜λŠ” 같은 λ¬Έμ œκ°€ 있고 쀑첩이 μ„±λŠ₯에 λ¬Έμ œκ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€(제 κ²½μš°μ—λŠ” 1μ–΅ 개의 행이 μžˆλŠ” 데이터λ₯Ό μž‘μ—…ν•  λ•Œ μ‹¬κ°ν•œ λ¬Έμ œμž…λ‹ˆλ‹€). λ§ˆμ§€λ§‰ μ‹œλ„κ°€ μ‹€νŒ¨ν•œ 이유λ₯Ό μžμ„Ένžˆ μ„€λͺ…ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

감사 ν•΄μš”

FWIW, 일뢀 μ‚¬μš© μ‚¬λ‘€μ˜ 경우 μœ μš©ν•œ κ΄€μš©κ΅¬λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

dbSendQuery(con$con, build_sql("SET search_path TO ", schema_name))

그런 λ‹€μŒ ν•΄λ‹Ή 연결을 μ‚¬μš©ν•˜λŠ” 후속 μΏΌλ¦¬λŠ” ν•΄λ‹Ή μŠ€ν‚€λ§ˆ 내에 μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…• ν• λž€,

κ°μ‚¬ν•©λ‹ˆλ‹€ - 그리고 이미 그런 것을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€(μŠ€ν‚€λ§ˆλ‘œ 검색 경둜λ₯Ό ν™•μž₯ν•œλ‹€λŠ” 점만 μ œμ™Έν•˜κ³ . ν•˜μ§€λ§Œ μ§€κΈˆκΉŒμ§€λŠ” 도움이 λ©λ‹ˆλ‹€. 2개의 μŠ€ν‚€λ§ˆμ— 같은 이름을 가진 ν…Œμ΄λΈ”μ΄ μžˆλŠ” κ²½μš°μ—λŠ” 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€.

μ–΄μ¨Œλ“  base_scalar SQL λ³€ν™˜κΈ°μ—μ„œ '$' 기호λ₯Ό μ˜€λ²„λ‘œλ“œν•˜μ§€ μ•ŠλŠ” μ΄μœ κ°€ κΆκΈˆν•©λ‹ˆλ‹€.

그것은 r κ΄€μ μ—μ„œλ„ μ˜λ―Έκ°€μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

a$b$c, ν™˜κ²½(예: μŠ€ν‚€λ§ˆ), ba ν…Œμ΄λΈ” 및 ca 열이 μžˆμŠ΅λ‹ˆλ‹€. 그런 λ‹€μŒ μˆ˜μ •ν•΄μ•Ό ν•  μœ μΌν•œ 생각은 tbl_sql이며, table_name이 λ°μ΄ν„°λ² μ΄μŠ€μ— μ‘΄μž¬ν•˜λŠ” 경우 κ·Έλ ‡κ²Œ κ°„λ‹¨ν•œ λ°©μ‹μœΌλ‘œ ν™•μΈν•΄μ„œλŠ” μ•ˆ λ©λ‹ˆλ‹€. λŒ€μ‹  "SELECT" 문이 SQL 쿼리의 일뢀인지 확인할 수 있으며 그렇지 μ•Šμ€ 경우 μ•žμ— SELECT *λ₯Ό μΆ”κ°€ν•˜κ³  μ΄λŸ¬ν•œ λ°©μ‹μœΌλ‘œ λ³€μˆ˜λ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

이 경우 tbl κΈ°λŠ₯에 λŒ€ν•΄ NSEλ₯Ό ν™œμ„±ν™”ν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

μ•„, λŒ“κΈ€μ΄ ν•˜λ‚˜ 더 μžˆμŠ΅λ‹ˆλ‹€.

dbSendQuery

RJDBCμ—μ„œλŠ” μ’…μ’… μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€(적어도 μˆ˜μ§μ„ μ—μ„œλŠ”). μœ„μ˜ 쿼리, 즉 SET search_path TO ...

κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. dbSendQueryλŠ” ν•˜λ‚˜λ₯Ό κΈ°λŒ€ν•©λ‹ˆλ‹€. vertica의 경우 이것은 μž‘λ™ν•˜μ§€ μ•ŠμœΌλ©° dbSendUpdateλ₯Ό μ‚¬μš©ν•΄μ•Ό ν•©λ‹ˆλ‹€. MySQL의 κ²½μš°μ—λ„ λ§ˆμ°¬κ°€μ§€μž…λ‹ˆκΉŒ(λ˜λŠ” μ΅œμ†Œν•œ MySQL의 경우 dbSendUpdateκ°€ μ‹€νŒ¨ν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ?)

λ‚˜λŠ” $ 을 μ˜€λ²„λ‘œλ”©ν•˜λŠ” 아이디어λ₯Ό μ’‹μ•„ν•©λ‹ˆλ‹€. λ‹€μŒμ— dplyrμ—μ„œ μž‘μ—…ν•  λ•Œ ν™•μ‹€νžˆ μƒκ°ν•˜κ² μŠ΅λ‹ˆλ‹€.

@hhoeflin 버티카와 λŒ€ν™”ν•˜κΈ° μœ„ν•΄ RJDBC λŒ€μ‹  RPostgreSQL을 μ‚¬μš©ν•΄ λ³΄μ…¨μŠ΅λ‹ˆκΉŒ?

μ•„λ‹ˆμš” - RPostgreSQL이 μ˜΅μ…˜μΈμ§€ μ „ν˜€ λͺ°λžμŠ΅λ‹ˆλ‹€. μ–΄μ¨Œλ“  - 버티카 λ°±μ—”λ“œλŠ” 이제 RJDBC에 λŒ€ν•΄ 이미 κ΅¬ν˜„λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‹œλ„ν–ˆμ§€λ§Œ λ°μ΄ν„°λ² μ΄μŠ€μ— μ‘΄μž¬ν•˜λŠ” ν…Œμ΄λΈ”μ΄ λ‹€λ₯Έμ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ μ•‘μ„ΈμŠ€ν•˜λ €λŠ” postgres ν…Œμ΄λΈ”λ‘œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

이것은 DBIλ₯Ό 톡해 천천히 ν•΄κ²°λ˜κ³  μžˆμŠ΅λ‹ˆλ‹€. https://github.com/rstats-db/DBI/issues/24

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰