问题标签 [dbplyr]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
398 浏览

r - 从 R 中的 SQLite 中的表中收集()

我正在尝试使用collect()函数 fromdplyr来查询comp_fleetSQLite 中的表 ()。以下代码有效:

但是,当我尝试时top_n(),出现错误:

由于这是一个巨大的表,我希望在收集之前在数据库中执行所有聚合功能。之前有没有使用该top_n()功能的方法collect()?或者等价的东西?

0 投票
1 回答
473 浏览

r - dbplyr R中TIMESTAMPDIFF mysql函数的月份差异

我正在尝试使用 dbplyr 包计算 R 中两个日期之间的月差,我想发送 sql 查询以使用 mysql 中的“timestampdiff”本机函数计算它,但出现错误:

但参数month没有被正确翻译,因为它看起来像 R 中的对象或函数:

UseMethod(“escape”)中的错误:没有适用于“escape”的方法应用于“function”类的对象

如果这样写:

我也会得到一个错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以了解在month, column_date_1, column_date_2) AS附近使用的正确语法diff_month

我相信这是因为 dbplyr 正在将带有双引号的“月”写入 mysql,它应该没有双引号,如下所示:

或者有没有更好的方法来使用 dbplyr 计算月差?

0 投票
0 回答
64 浏览

r - 从R中的数据库中选择一个表

我正在使用 dbplyr 从使用 Rstudio 的远程数据库中选择一个表。我使用 livy 与服务器中的 Spark 连接。它向我展示了我拥有的数据库,但是当我尝试访问其中一个模式中的一个表时,它失败了。

src_databases(sc) # sc 是通过 livy 的 spark 连接。它成功连接并显示了我拥有的所有数据库。

接下来,我想使用dbplyr 的 in_schema 函数连接到其中一个数据库中的表

browser = tbl(sc, in_schema('database_name', 'table_name'))

但它给出了下面的错误消息。可能是什么问题呢?我使用的 Spark 在 Qubole 中。我也尝试过这种方法,但它对我不起作用。

错误:在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 的 java.lang.reflect.InvocationTargetException ) 在 org.apache.spark.sql.hive.client.Shim_v0_13.getAllPartitions(HiveShim.scala:434) 在 org.apache.spark.sql 的 java.lang.reflect.Method.invoke(Method.java:606)。 hive.client.HiveClientImpl$$anonfun$getPartitions$1.apply(HiveClientImpl.scala:527) at org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$getPartitions$1.apply(HiveClientImpl.scala:524) at org.apache.spark.sql.hive.client.HiveClientImpl.liftedTree1$1(HiveClientImpl.scala: 上的 org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$withHiveState$1.apply(HiveClientImpl.scala:263) 210)在 org.apache.spark.sql。hive.client.HiveClientImpl.retryLocked(HiveClientImpl.scala:209) 在 org.apache.spark.sql.hive.client.HiveClientImpl.withHiveState(HiveClientImpl.scala:252) 在 org.apache.spark.sql.hive.client。 HiveClientImpl.getPartitions(HiveClientImpl.scala:524) 在 org.apache.spark.sql.hive.MetastoreRelation.allPartitions$lzycompute(MetastoreRelation.scala:150) 在 org.apache.spark.sql.hive.MetastoreRelation.allPartitions(MetastoreRelation. scala:150) 在 org.apache.spark.sql.hive.HiveMetastoreCatalog.org$apache$spark$sql$hive$HiveMetastoreCatalog$ 的 org.apache.spark.sql.hive.MetastoreRelation.getHiveQlPartitions(MetastoreRelation.scala:162) $convertToLogicalRelation(HiveMetastoreCatalog.scala:256) 在 org.apache.spark.sql.hive.HiveMetastoreCatalog$ParquetConversions$。org$apache$spark$sql$hive$HiveMetastoreCatalog$ParquetConversions$$convertToParquetRelation(HiveMetastoreCatalog.scala:376) at org.apache.spark.sql.hive.HiveMetastoreCatalog$ParquetConversions$$anonfun$apply$1.applyOrElse(HiveMetastoreCatalog.scala: 399) 在 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp 的 org.apache.spark.sql.hive.HiveMetastoreCatalog$ParquetConversions$$anonfun$apply$1.applyOrElse(HiveMetastoreCatalog.scala:384) $1.apply(TreeNode.scala:301) at org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$transformUp$1.apply(TreeNode.scala:301) at org.apache.spark.sql.catalyst。 trees.CurrentOrigin$.withOrigin(TreeNode.scala:69) at org.apache.spark.sql.catalyst.trees.TreeNode.transformUp(TreeNode.scala:300) at org.apache.spark.sql.catalyst.trees.TreeNode $$anonfun$4.apply(TreeNode.scala:298) 在 org.apache.spark.sql.catalyst。org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:321) 在 org.apache.spark 上的 trees.TreeNode$$anonfun$4.apply(TreeNode.scala:298)。 org.apache.spark.sql.catalyst.trees.TreeNode.transformChildren(TreeNode.scala:319) 在 org.apache.spark.sql.catalyst 的 sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:179)。 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$4.apply(TreeNode.scala:298) 在 org.apache.spark.sql.catalyst 上的 trees.TreeNode.transformUp(TreeNode.scala:298)。 org.apache.spark.sql.catalyst.trees.TreeNode$$anonfun$5.apply(TreeNode.scala:321) 在 org.apache.spark 上的 trees.TreeNode$$anonfun$4.apply(TreeNode.scala:298)。 org.apache.spark.sql.catalyst.trees.TreeNode.transformChildren(TreeNode.scala:319) 在 org.apache.spark.sql.catalyst 的 sql.catalyst.trees.TreeNode.mapProductIterator(TreeNode.scala:179)。树木。TreeNode.transformUp(TreeNode.scala:298) at org.apache.spark.sql.hive.HiveMetastoreCatalog$ParquetConversions$.apply(HiveMetastoreCatalog.scala:384) at org.apache.spark.sql.hive.HiveMetastoreCatalog$ParquetConversions$。在 org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:85) 处应用(HiveMetastoreCatalog.scala:363)。 sql.catalyst.rules.RuleExecutor$$anonfun$execute$1$$anonfun$apply$1.apply(RuleExecutor.scala:82) 在 scala.collection.LinearSeqOptimized$class.foldLeft(LinearSeqOptimized.scala:124) 在 scala.collection。 immutable.List.foldLeft(List.scala:84) at org.apache.spark.sql.catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:82) at org.apache.spark.sql。 scala.collection 中的catalyst.rules.RuleExecutor$$anonfun$execute$1.apply(RuleExecutor.scala:74)。immutable.List.foreach(List.scala:381) at org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:74) at org.apache.spark.sql.execution.QueryExecution.analyzed$ lzycompute(QueryExecution.scala:65) at org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:63) at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:49)在 org.apache.spark.sql.Dataset.(Dataset.scala:161) 在 org.apache.spark.sql.Dataset.(Dataset.scala:167) 在 org.apache.spark.sql.Dataset$.ofRows( Dataset.scala:65) 在 org.apache.spark.sql.SparkSession.sql(SparkSession.scala:583) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 57) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java。lang.reflect.Method.invoke(Method.java:606) 在 $line43.$read$$iw$$iw$Invoke.invoke(:144) 在 $line49.$read$$iw$$iw$StreamHandler.handleMethodCall (:140) 在 $line49.$read$$iw$$iw$StreamHandler.read(:83) 在 $line112.$read$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$LivyUtils$.invokeFromBase64(:158) at $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw.(:136) at $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw。 (:141) 在 $line172。$读$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:143) 在 $line172.$read$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw.(:145) 在 $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:147) at $ line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:149) 在 $line172。$读$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw.(:151) at $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:153) 在 $line172.$read$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw.(:155) at $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:157) 在 $line172.$read$$iw$$iw$$iw$$iw$$iw$ $iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw.(:159) 在 $line172。$读$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw $$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw.(:161) 在 $line172.$read$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$iw$$ iw$$iw$$iw

0 投票
0 回答
380 浏览

r - 如何在 R 中的数据库连接上的过滤器中使用字符向量?

编辑:我在下面的示例中发现了我的错误。stored_group我在过滤器中输入了一个错字。它按预期工作。

我想使用字符值来过滤数据库表。我dplyr直接在连接对象上使用函数。请参阅下面的步骤。

我连接到我的 MariaDB 数据库:

然后我想在数据库中的表上使用过滤器,dplyr直接在上面的连接上使用代码:

我有一个错误说Unknown column 'stored_group' in 'where clause'。所以我这样使用show_query()

我得到了:

在翻译中,stored_group被视为列名而不是 R 中的值。如何防止这种情况发生?

在 R 中的普通 data.frames 上,这是可行的。喜欢:

我刚刚测试了下面的解决方案,它可以工作。但是我的数据库表会增长。我想在收集之前直接在数据库上过滤。

有什么建议么?

0 投票
0 回答
208 浏览

sql - bigrquery 中的 percentile_cont

我想在 bigrquery 中使用 dplyr 语法获得大查询中列​​的第 20 个百分位,但我不断收到以下错误。这是一个可重现的示例:

我收到以下错误:

但是,不清楚如何在此处包含 OVER 子句。如何使用 dplyr 语法获得第 20 个百分位数?

0 投票
1 回答
331 浏览

r - 在 SQL Server 数据库上使用带有 dbplyr 的正则表达式

我很高兴看到 dbplyr 支持该str_detect()命令。但是,当我通过 ODBC 连接对 SQL Server 数据库进行查询时,它不能与正则表达式一起正常工作:特殊字符“。” 例如,它不被解释为通配符,而是被解释为它的字符,所以是一个句点。有什么解决方法吗?

例如,

将匹配“A123.4”,但不匹配“A123x4”。

0 投票
0 回答
718 浏览

r - 如何从 dplyr::tbl 获得详细的数据库错误消息?

我正在使用 R 绘制我从数据库中提取的一些数据(具体来说是Stack Exchange 数据转储):

该查询在 SEDE 上运行良好,但我在 R 控制台中收到此错误:

我认为“无法准备声明”。意味着 SQL Server 出于某种原因不喜欢该查询。不幸的是,它没有给出任何关于出了什么问题的提示。根据错误消息,在稍微摆弄了一下查询之后,我注意到它被包裹在一个子选择中。复制并执行由链中的一个库构建的完整查询,SQL Server 给了我这个信息更丰富的错误消息:

ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。

现在解决方案很明显:删除(或注释掉)该order by子句。但是R 控制台中的详细错误消息在哪里?我正在使用 Rstudio,如果有的话。如果我可以在我正在处理的代码旁边获得完整的异常,它将帮助我更快地修复错误。(为了清楚起见,我经常从 dplyr::tbl 收到神秘错误,并且通常使用二进制搜索调试来修复它们。)

0 投票
2 回答
1043 浏览

r - 在 SQL Server 中结合 dbplyr 和 case_when

我正在使用 dbplyr 在 SQL Server 中编写和运行查询,并且想要应用条件突变。这可以使用ifelse或使用来完成case_when。查询在使用时有效,ifelse但在使用时抛出异常case_when

问题似乎是这两个命令被翻译成的 SQL 语法。该case_when语法似乎不是有效的 SQL。你能告诉我为什么以及如何解决它吗?或者这是一个错误?

生成的 SQL 查询是:

运行此代码会引发错误

在预期条件的上下文中指定的非布尔类型的表达式,靠近“THEN”

但是ifelse查询按预期工作:

生成的 SQL 查询是:

请注意,在这两种情况下,SQL 语法都是使用show_query. 用于translate_sql生成 SQL 代码始终会生成更清晰的 SQL 语法,但这不是在服务器上运行的语法。

还有其他人得到这些 SQL 查询吗?关于什么是错的以及如何解决这个问题的任何建议?

更新

作为问题发布在 tidyverse 上,并被告知已经开发了一个解决方案,case_when(..., TRUE ~ "b")可以翻译成ELSE 'b'这里)。

但是,因为这没有解决导致此异常的语法。编辑问题以关注导致原因的语法。

更新 2

作为问题发布在 dbplyr 上。来自 Christophe Dervieux (cderv) 的响应表明原因似乎是 SQL 服务器需要一个特殊的翻译,case_when就像它对ifelse.

同时,用户可以使用多个ifelseorif_else语句。

0 投票
3 回答
198 浏览

r - 忽略 d(b)plyr 动词中的大小写

我正在查询的数据库在涉及列名时不区分大小写。例如,以下列存在于不同的表中:

PERSONID PERSONiD PersonID Personid PersonId

使用标准的 d(b)plyr 动词变得非常令人沮丧。是否可以关闭 dbplyr 动词的区分大小写?

0 投票
1 回答
175 浏览

r - 处理故意的命名空间冲突

我正在编写一个同时导入(和使用)SparkR::sqldbplyr::sql. 其他相关 问题涉及我随意的无意碰撞import

在我的NAMESPACE我有:

这两个函数都在脚本中使用,并且意识到冲突,我肯定总是在包名称前面加上前缀:

尽管如此,我在构建/检查包时收到了导入替换警告:

警告:在加载 'my_pkg' 时将之前的导入 'dbplyr::sql' 替换为 'SparkR::sql'</p>

我在编写 R 扩展中看到的似乎如下:

如果一个包只需要另一个包中的几个对象,它可以foo::f在代码中使用完全限定的变量引用 [ ] 而不是正式导入...这比正式导入效率略低,也失去了记录所有依赖项的优势在NAMESPACE文件中(但它们仍然需要记录在DESCRIPTION文件中)。评估foo::f将导致包foo被加载,但不附加,如果它还没有加载——这可能是延迟加载很少使用的包的一个优势。

我是否正确,这个/最佳实践的要点是:

  • 选择最常用的功能并将其添加到importFrom
  • 删除“不太频繁”的功能,importFrom但保留该包DESCRIPTION
  • 只需将::(可能在前面require())用于“不太频繁”的功能