in_schema возвращает список из 2 не TBL - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть соединение с нашей базой данных:

con <- dbConnect(odbc::odbc(), "myHive")

Я знаю, что кон работает, потому что я вижу все наши схемы в правой верхней панели соединений.

Если я хочу выбрать конкретную таблицу в качестве таблицы, я могу перейти:

mytbl <- tbl(con, in_schema("mydb", "mytable"))

Я ожидал, что результатом будет df или tbl, однако это список из 2. Я пытался извлечь часть tbl, но меня этот список смущает.

Вот стр: 1011 *

> str(mytbl)
List of 2
 $ src:List of 2
  ..$ con  :Formal class 'Hive' [package ".GlobalEnv"] with 4 slots
  .. .. ..@ ptr     :<externalptr> 
  .. .. ..@ quote   : chr "`"
  .. .. ..@ info    :List of 13
  .. .. .. ..$ dbname               : chr "HIVE"
  .. .. .. ..$ dbms.name            : chr "Hive"
  .. .. .. ..$ db.version           : chr "1.2.2"
  .. .. .. ..$ username             : chr ""
  .. .. .. ..$ host                 : chr ""
  .. .. .. ..$ port                 : chr ""
  .. .. .. ..$ sourcename           : chr "gdHive"
  .. .. .. ..$ servername           : chr "Hive"
  .. .. .. ..$ drivername           : chr "Hortonworks Hive ODBC Driver"
  .. .. .. ..$ odbc.version         : chr "03.52"
  .. .. .. ..$ driver.version       : chr "2.6.1.1001"
  .. .. .. ..$ odbcdriver.version   : chr "03.80"
  .. .. .. ..$ supports.transactions: logi FALSE
  .. .. .. ..- attr(*, "class")= chr [1:3] "Hive" "driver_info" "list"
  .. .. ..@ encoding: chr ""
  ..$ disco: NULL
  ..- attr(*, "class")= chr [1:3] "src_dbi" "src_sql" "src"
 $ ops:List of 2
  ..$ x   : 'ident_q' chr "mydb.mytable"
  ..$ vars: chr [1:188] "zzz1.order_id" "zzz1.row_id" "zzz1.order_ts" "zzz1.order_date" ...
  ..- attr(*, "class")= chr [1:3] "op_base_remote" "op_base" "op"
 - attr(*, "class")= chr [1:4] "tbl_dbi" "tbl_sql" "tbl_lazy" "tbl"

Что я здесь смотрю? Как я могу получить таблицу из mydb.mytable в виде таблицы?

1 Ответ

0 голосов
/ 15 июня 2019

Если вы хотите загрузить таблицу в память R (а не работать с ней удаленно), используйте mytbl %>% collect().

В противном случае, я думаю, что вы смотрите на стандартную удаленную таблицу. Это не относится к in_schema. Если вы попробуете class(mytbl), вы должны увидеть "tbl" в качестве одного из классов.

По умолчанию R не загружает данные из удаленной таблицы в память. Для просмотра первых нескольких строк попробуйте: mytbl %>% head().

Вы можете манипулировать таблицей, используя все стандартные команды dplyr. Например:

results = mytbl %>%
  rename(new_name = old_name) %>%
  mutate(new_col = 2*old_col) %>%
  group_by(new_col) %>%
  summarise(number = n()) %>%
  filter(number > 1000)

А потом, когда вам нужен результат в R: results = results %>% collect().

...