问题标签 [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.
r - 从 R 中的 SQLite 中的表中收集()
我正在尝试使用collect()
函数 fromdplyr
来查询comp_fleet
SQLite 中的表 ()。以下代码有效:
但是,当我尝试时top_n()
,出现错误:
由于这是一个巨大的表,我希望在收集之前在数据库中执行所有聚合功能。之前有没有使用该top_n()
功能的方法collect()
?或者等价的东西?
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 计算月差?
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
r - 如何在 R 中的数据库连接上的过滤器中使用字符向量?
编辑:我在下面的示例中发现了我的错误。stored_group
我在过滤器中输入了一个错字。它按预期工作。
我想使用字符值来过滤数据库表。我dplyr
直接在连接对象上使用函数。请参阅下面的步骤。
我连接到我的 MariaDB 数据库:
然后我想在数据库中的表上使用过滤器,dplyr
直接在上面的连接上使用代码:
我有一个错误说Unknown column 'stored_group' in 'where clause'
。所以我这样使用show_query()
:
我得到了:
在翻译中,stored_group
被视为列名而不是 R 中的值。如何防止这种情况发生?
在 R 中的普通 data.frames 上,这是可行的。喜欢:
我刚刚测试了下面的解决方案,它可以工作。但是我的数据库表会增长。我想在收集之前直接在数据库上过滤。
有什么建议么?
sql - bigrquery 中的 percentile_cont
我想在 bigrquery 中使用 dplyr 语法获得大查询中列的第 20 个百分位,但我不断收到以下错误。这是一个可重现的示例:
我收到以下错误:
但是,不清楚如何在此处包含 OVER 子句。如何使用 dplyr 语法获得第 20 个百分位数?
r - 在 SQL Server 数据库上使用带有 dbplyr 的正则表达式
我很高兴看到 dbplyr 支持该str_detect()
命令。但是,当我通过 ODBC 连接对 SQL Server 数据库进行查询时,它不能与正则表达式一起正常工作:特殊字符“。” 例如,它不被解释为通配符,而是被解释为它的字符,所以是一个句点。有什么解决方法吗?
例如,
将匹配“A123.4”,但不匹配“A123x4”。
r - 如何从 dplyr::tbl 获得详细的数据库错误消息?
我正在使用 R 绘制我从数据库中提取的一些数据(具体来说是Stack Exchange 数据转储):
该查询在 SEDE 上运行良好,但我在 R 控制台中收到此错误:
我认为“无法准备声明”。意味着 SQL Server 出于某种原因不喜欢该查询。不幸的是,它没有给出任何关于出了什么问题的提示。根据错误消息,在稍微摆弄了一下查询之后,我注意到它被包裹在一个子选择中。复制并执行由链中的一个库构建的完整查询,SQL Server 给了我这个信息更丰富的错误消息:
ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP、OFFSET 或 FOR XML。
现在解决方案很明显:删除(或注释掉)该order by
子句。但是R 控制台中的详细错误消息在哪里?我正在使用 Rstudio,如果有的话。如果我可以在我正在处理的代码旁边获得完整的异常,它将帮助我更快地修复错误。(为了清楚起见,我经常从 dplyr::tbl 收到神秘错误,并且通常使用二进制搜索调试来修复它们。)
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
.
同时,用户可以使用多个ifelse
orif_else
语句。
r - 忽略 d(b)plyr 动词中的大小写
我正在查询的数据库在涉及列名时不区分大小写。例如,以下列存在于不同的表中:
PERSONID
PERSONiD
PersonID
Personid
PersonId
使用标准的 d(b)plyr 动词变得非常令人沮丧。是否可以关闭 dbplyr 动词的区分大小写?
r - 处理故意的命名空间冲突
我正在编写一个同时导入(和使用)SparkR::sql
和dbplyr::sql
. 其他相关 问题涉及我随意的无意碰撞import
。
在我的NAMESPACE
我有:
这两个函数都在脚本中使用,并且意识到冲突,我肯定总是在包名称前面加上前缀:
尽管如此,我在构建/检查包时收到了导入替换警告:
警告:在加载 'my_pkg' 时将之前的导入 'dbplyr::sql' 替换为 'SparkR::sql'</p>
我在编写 R 扩展中看到的似乎如下:
如果一个包只需要另一个包中的几个对象,它可以
foo::f
在代码中使用完全限定的变量引用 [ ] 而不是正式导入...这比正式导入效率略低,也失去了记录所有依赖项的优势在NAMESPACE
文件中(但它们仍然需要记录在DESCRIPTION
文件中)。评估foo::f
将导致包foo
被加载,但不附加,如果它还没有加载——这可能是延迟加载很少使用的包的一个优势。
我是否正确,这个/最佳实践的要点是:
- 选择最常用的功能并将其添加到
importFrom
- 删除“不太频繁”的功能,
importFrom
但保留该包DESCRIPTION
- 只需将
::
(可能在前面require()
)用于“不太频繁”的功能