in_schema returns 2 的列表不是 tbl

in_schema returns a list of 2 not a tbl

我连接到我们的数据库:

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

我知道 con 正在运行,因为我可以在右上角的连接窗格中看到我们所有的模式。

如果我想 select 一个特定的 table 作为 tbl 我可以去:

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

我预计这里的结果是 df 或 tbl,但它是 2 的列表。我试图提取 tbl 部分,但被这个列表弄糊涂了。

这是字符串:

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

如果您希望将 table 加载到 R 内存中(而不是远程使用它),请使用 mytbl %>% collect().

否则,我认为您看到的是标准遥控器table。这不是 in_schema 特有的。如果您尝试 class(mytbl),您应该会看到 "tbl" 作为其 类 之一。

默认情况下,R 不会将数据从远程 table 加载到内存中。要查看前几行,请尝试:mytbl %>% head().

您可以使用所有标准的 dplyr 命令来操纵 table。例如:

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().