有没有办法在R dplyr sql中关闭DESCRIBE

bin*_*ime 7 sql r impala dplyr

我正在使用R Shiny和dplyr连接到数据库并查询Impala中的数据。我执行以下操作。

con <- dbPool(odbc(),
Driver = [DIVER],
Host = [HOST],
Schema = [SCHEMA],
Port = [PORT],
UID = [USERNAME],
PWD = [PASSWORD])

table_foo <- tbl(con, [TABLE_NAME_FOO])
table_bar <- tbl(con, [TABLE_NAME_BAR])
Run Code Online (Sandbox Code Playgroud)

例如,当我运行查询时:

table %>% filter(name=greg) %>% collect()
Run Code Online (Sandbox Code Playgroud)

以下是在黑斑羚上运行的描述:

DESCRIBE TABLE 'table_foo'
DESCRIBE TABLE 'table_bar'
Run Code Online (Sandbox Code Playgroud)

所有的描述都在每个查询之前运行。(每个collect())我有很多表,这些描述都在浪费大量时间。特别是在一些描述的黑斑羚上,可能需要一段时间才能运行。

有没有办法关闭这些?有什么我可以做的吗?我看了看文档,却找不到任何东西:https : //db.rstudio.com/dplyr/

Sim*_*.A. 1

我的假设是,这是使用该pool包及其管理与数据库的多个连接的方式的结果。然而,您的问题没有提供足够的细节让我确定,我无法在我的本地环境中重现您的情况。

如果问题是软件包造成的pool,我的建议是dbplyr直接使用软件包。这提供了将命令翻译dplyr成数据库语言的功能。

# packages
library(DBI)
library(dplyr)
library(dbplyr)

# Connection string (see note below)
connection_string = "DRIVER = ...; DATABASE = ...; HOST = ..."
# connection
con = dbConnect(odbc::odbc(), .connection_string = connection_string)

# connect to two tables
table_foo <- tbl(con, "TABLE_NAME_FOO")
table_bar <- tbl(con, "TABLE_NAME_BAR")

# review queries
table_foo %>% explain()
table_foo %>% filter(name=greg) %>% explain()
# fetch data
table_foo %>% filter(name=greg) %>% collect()
Run Code Online (Sandbox Code Playgroud)

链接似乎提供了有关如何创建 Impala 连接字符串的说明。但考虑到您的设置,您可能有等效的方法。

如果您尝试上述操作,并且仍然观察到DESCRIBE TABLE正在运行,那么可能需要描述表才能返回结果,正如 @Lukasz 所建议的那样 - 而 Impala 连接的本质是它无法判断需要哪些表。

您还在开场白中提到您正在使用 R Shiny。闪亮应用程序的动态特性意味着代码的哪些部分运行并不总是直观的。因此,如果您没有单独测试上述内容,则可能是DESCRIBE TABLE由您没有意识到正在运行的闪亮应用程序的不同部分调用的。