in_schema返回2而不是tbl的列表

时间:2018-11-14 22:58:06

标签: r dplyr dbplyr

我已连接到我们的数据库:

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

我知道缺点在起作用,因为我可以在右上方的连接窗格中看到我们所有的架构。

如果我想选择一个特定的表作为tbl,我可以去:

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

我希望这里的结果是df或tbl,但是它是2的列表。我试图提取tbl部分,但对此列表感到困惑。

这是str:

> 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中获取表作为tbl?

1 个答案:

答案 0 :(得分:0)

如果您希望将表加载到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()