使用 dplyr 中转换后的数据替换 SQL 数据库表

2024-03-11

我经常在 dplyr 中转换数据时替换数据,尤其是在处理大型数据集时。当我使用 SQL 支持的数据集时,我不知道如何优雅地做到这一点,至少不是使用 SQLite。

我在 dplyr DB vignettes 或 SO 中找不到任何关于这个目标的讨论,这也让我想知道我所做的事情是否有问题;然而,这似乎是处理大型数据集的自然方式。

无论如何,最直观的方法是行不通的:

library(dplyr)
library(RSQLite)

db2 <- src_sqlite("trouble.sqlite", create = TRUE)
trouble <- data.frame(values = c(5, 1, 3))
trouble.db <- copy_to(db2, trouble, temporary = FALSE)

collect(trouble.db) # 5, 3, 1

trouble.db <- trouble.db %>% arrange(values)
collect(trouble.db) # 1, 3, 5

trouble.in <- tbl(db2, sql("SELECT * from trouble"))
collect(trouble.in) # 5, 3, 1

就地复制的另一种直观语法给出了“表已存在”错误:

trouble.db <- copy_to(db2, as.data.frame(trouble.db), name="trouble", temporary = FALSE)

一种解决方案是手动删除表并重建它,这就是我一直在做的事情:

db2$con %>% db_drop_table(table = "trouble")
trouble <- collect(trouble.db)
trouble.db <- copy_to(db2, trouble, temporary = FALSE)

另一种是放弃替换并创建一系列临时表,我觉得这不美观,但我认为这可能是推荐的范例:

trouble_temp <- data.frame(values = c(5, 1, 3))
trouble_temp.db <- copy_to(db2, trouble_temp, temporary = TRUE)
trouble <- trouble.db %>% arrange(values)
trouble.db <- copy_to(db2, trouble, temporary = FALSE)

我怀疑“删除并重新复制”最终会成为答案,但出于对美丽解决方案的热爱,我想我会问是否有更好的方法。


对于多年后发现这一点的人来说。

该声明

trouble.db %>% arrange(values)

创建一个 SQL 查询,该查询发送到数据库并在您执行操作时执行collect结果。

我们可以看到SQL是这样的

trouble.db %>% arrange(values) %>% show_query()
SELECT *
FROM `trouble`
ORDER BY `values`

显然,这样的查询无法修改它正在查询的实际数据。

要修改数据,我们可以使用dbWriteTable函数从DBI package

library(dplyr)
library(RSQLite)

# Will use this connection object for all our DB interactions
con <- DBI::dbConnect(RSQLite::SQLite(), dbname = ":memory:")

trouble <- data.frame(values = c(5, 1, 3))
trouble.db <- copy_to(con, trouble, temporary = FALSE)

collect(trouble.db) # 5, 3, 1

# This is just a query
trouble.db <- trouble.db %>% arrange(values)
collect(trouble.db) # 1, 3, 5

# The data shouldn't be modified yet
trouble.in <- tbl(con, sql("SELECT * from trouble"))
collect(trouble.in) # 5, 3, 1

# Now we are modifying the data
DBI::dbWriteTable(
  con, "trouble", collect(trouble.db),
  overwrite = TRUE
)

tbl(con, sql("SELECT * from trouble")) %>% collect() # 1, 3, 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dplyr 中转换后的数据替换 SQL 数据库表 的相关文章

  • 使用 r 以周为单位对数据进行分组

    I have a CVS file which has data for different countries at different weeks of this year I want to create a summary data
  • 获取数据集 R 包中所有对象名称的列表?

    如何获取对象中对象的确切名称列表datasets https stat ethz ch R manual R devel library datasets html 00Index html包裹 我在这里找到了很多 data package
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • 将 stat_smooth 添加到 ggplot2 中的仅 1 个方面

    我有一些数据 在某个因素的某个水平上 存在显着的相关性 在另一个层面上 则没有 并排绘制这些图很简单 使用 stat smooth 向它们添加一行 也很简单 但是 我不希望线条或其填充显示在两个面之一中 有没有一种简单的方法可以做到这一点
  • 内连接 3 个表

    我正在使用 PHP 和 PDO 我需要重新收集连接 3 个表的信息 photos albums 相册照片 该表具有以下结构 photos photo id int path varchar nick varchar date timesta
  • 如何在 Shiny 应用程序中访问/打印/跟踪当前选项卡选择?

    我正在一个闪亮的应用程序中工作 我希望能够访问用户在会话中当前所在选项卡上的信息 我有一个观察事件 用于侦听要单击的特定按钮 简而言之 我想存储 打印用户单击此按钮时所在的当前选项卡 单击此按钮后 选项卡将更改为带有 updateTabIt
  • Hibernate + SQLite 不创建数据库

    这是我的问题 我有一个使用 JavaFX Hibernate SQLite 的桌面应用程序 这是我的模型 Entity Table name usuario public class Usuario implements AbstractM
  • 更高效的 LINQ 查询

    有人可以帮我将此查询循环变成高效的 Linq 查询吗 我将其加载到 TreeView 中 因此必须附加每个项目 包含也非常低效 延迟加载项目也不起作用 事实上 这个查询访问数据库的次数比应有的要多 public IQueryable
  • SQLite 使用循环重新编号 ID

    您好 我有一个包含许多插入行的表 我需要按 id 对所有行重新编号并排序 我找到了这段代码 但它对我不起作用 SET i 100 UPDATE main Categories SET ID i i 1 WHERE Name White AL
  • 从一张表更新并插入另一张表

    我有两张桌子 table1 ID 代码 姓名 table2 ID 代码 姓名 具有相同的列 我想将数据从 table1 插入到 table2 或更新列 如果 table2 中存在 table1 ID table2 ID 执行此操作的简单方法
  • 如何删除MySQL中的所有事件

    如果我想删除某个事件 我需要查询类似的内容 DROP EVENT IF EXISTS eventname 但我找不到一次性删除所有事件的命令 必须一项一项地删除 有没有一次性删除所有事件的SQL DROP EVENT IF EXISTS S
  • 什么是更好的?子查询或内连接十个表?

    一个旧系统已抵达我们的办公室进行一些更改和修复 但它也存在性能问题 我们并不确切知道这种缓慢的根源是什么 当我们重构旧代码时 我们发现了几个具有以下模式的 sql 查询 出于示例目的 简化了查询 SELECT SELECT X FROM A
  • 如何使用 Rrank() 函数创建新的ties.method? [复制]

    这个问题在这里已经有答案了 我试图按人口和日期排序这个数据框 所以我使用order and rank 功能 gt df lt data frame idgeoville c 5 8 4 3 4 5 8 8 date c rep 1950 4
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • 在 Oracle 中如何将多行组合成逗号分隔的列表? [复制]

    这个问题在这里已经有答案了 我有一个简单的查询 select from countries 结果如下 country name Albania Andorra Antigua 我想在一行中返回结果 如下所示 Albania Andorra
  • ggplot2以限制为中心的多边形世界地图给出了有趣的边缘

    使用下面的代码我生成了一张以华盛顿特区为中心的地图 解决方案基于科斯克的解决方案在这里 https stackoverflow com questions 10620862 use different center than the pri
  • 如何在复杂的皂膜GAM中设置更平滑的边界条件?

    我正在对南太平洋岛屿泻湖中宽吻海豚的分布进行建模 我想使用肥皂膜平滑器来模拟海豚在二维表面 经度 x 纬度 上存在的概率 考虑到陆地边界 显然海豚不能在陆地上行走 我想知道如何将我的研究区域 陆地和近海水域 的边界固定为等于零的条件 因为我
  • 使用 sprintf 打印换行符 - 有光泽

    我试图在打印时进行换行 这是我的代码 temp lt LETTERS 1 11 print sprintf Rank s s n 1 11 temp output 1 Rank 1 A n Rank 2 B n Rank 3 C n Ran
  • 总结同一个 SQL 表上的两个条件

    给定一个 SQL 表 Transactions ID INT COMPANY ID INT STATUS INT where STATUS IN 0 1 表示免费交易并且STATUS IN 2 3 表示可计费交易 简单的 我希望 ANSI
  • 二部图匹配以匹配两个集合

    我是新手igraphR 中的包 我有两套A and B 每个都有N顶点 A1 A2 AN and B1 B2 BN 每个元素之间都有一个边缘A对每一个元素B 我有一个函数fWgt Ai Bj 返回之间的边的权重Ai and Bj 我一直在尝

随机推荐

  • 如何在cassandra中构建范围查询?

    CREATE TABLE users userID uuid firstname text lastname text state text zip int age int PRIMARY KEY userID 我想构造以下查询 selec
  • 独立 Java SE 应用程序的项目目录结构是什么?

    独立 Java SE 基于命令行 应用程序的标准项目目录结构是什么 src文件夹将包含我的所有 java正确组织的包中的文件 除此之外我还有bin文件夹将包含我的 class files 我的项目中有属性文件和 XML 配置文件 我应该将它
  • 使用 .htaccess 通过 index.php 重新路由除一组特定请求之外的所有请求

    所以我只是继承了一个网站 我想做的第一件事是构建一个漂亮的小标准 简单易用的 CMS 允许使用任何 URL 创建页面 例如 whatever html 因此 如果用户点击 example com whatever html 它应该获取wha
  • Android Webview - 当用户滚动时检测标题名称

    我有这种模式的 html 文件 a a h2 First Heading h2 a Some Text goes here a br br a a h2 Second Heading h2 Some Text goes here br br
  • 如何在 C++ 中将成员变量指针转换为泛型类型

    我的应用程序中有与此类似的代码 class A public int b class C public int d void DoThings void arg1 MYSTERYTYPE arg2 A obj a C obj c DoThi
  • 如何从 R 调用 Fortran 程序

    我对 Fortran 完全陌生 但对 R 很熟悉 我得到了一个巨大的 Fortran 程序 其中包含大约 30 个子例程和大约 15 个函数以及许多其他代码行 有人告诉我需要从R中调用Fortran程序 我一直在网上寻找方法 在 R 和 F
  • 如何使用 SBCL 正确保存 Common Lisp 图像?

    如果我想创建我的程序的 Lisp 映像 我该如何正确地做到这一点 有什么先决条件吗 它与 QUICKLISP 配合得很好吗 现在 如果我启动 SBCL 仅预加载 QUICKLISP 并保存图像 save lisp and die core
  • 如何用Java解析ini文件? [复制]

    这个问题在这里已经有答案了 这是一个示例 ini 文件 link 1 alias My Link 1 link https www yandex ru link 2 alias My Link 2 link https mail ru li
  • Python中的变量插值[重复]

    这个问题在这里已经有答案了 可能的重复 在Python中打印变量的非Pythonic方式 https stackoverflow com questions 3534803 unpythonic way of printing variab
  • kafka 是否有默认的 Web UI [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有几个关于卡夫卡的问题 1 Kafka 有默认的 Web UI 吗 2 我们如何优雅地关闭独立的kafka服务器 kafka控制台
  • 如何在悬停图像时向下滚动?

    我想当悬停图像时 它会向下滚动到图像的末尾 我有两个问题 当用户将鼠标悬停在图像上时如何滚动到图像的末尾 目前 我开始将鼠标悬停在图像上 它没有滚动到图像的末尾 如何控制鼠标悬停在图像上时滚动的速度 My code body margin
  • 用户未定义:Nodejs/Express + Passport

    我的问题非常类似于这个问题 https stackoverflow com questions 16434893 node express passport req user undefined然而答案似乎对我不起作用 我看到用户也从未选择
  • ASC2.0 和帧元标记

    显然 新的 ActionScript Compiler 2 0 不再支持旧的 frame 元标记 该元标记允许您将预加载器添加到纯 ActionScript 项目中 我已经验证了这个 IntelliJ 切换 首选 ActionScript
  • Eclipse DDMS 窗口不显示任何内容 +android

    在模拟器中运行我的应用程序时 我的 Eclipse DDms 窗口未显示任何内容 空 logcat 空文件浏览 等 有时 如果我重新启动 Eclipse 它会起作用 但并非总是如此 为什么要这样挂 即使我多次遇到同样的问题 我用来做的是转到
  • Blazor Timer 调用异步 API 任务来更新 UI

    我正在 Blazor 服务器端页面中设置计时器 目标是每 x 秒调用一次 API 并根据返回值更新 UI 我得到这个代码 private string Time get set protected override void OnIniti
  • Firefox 在 FF2 中加载 Google Analytics 时出现“加载脚本错误”

    我正在开发的项目使用 window onerror 事件处理程序来报告用户问题 我注意到有一个用户似乎无法加载 Google Analytics 脚本 我们的网站没有看到很多流量 所以我不确定这种情况有多普遍 但到目前为止 它似乎只影响了一
  • 如何从 Spark 堆中删除/处置广播变量?

    要广播变量以使变量在集群上每个节点的内存中只出现一次 可以执行以下操作 val myVarBroadcasted sc broadcast myVar 然后在 RDD 转换中检索它 如下所示 myRdd map blar gt val my
  • Javascript中的累积分布函数

    我正在寻找一种在 Javascript 中计算累积分布函数的方法 有没有实现这个的类 您有想法让它发挥作用吗 它不需要 100 准确 但我需要对其值有一个很好的了解 http en wikipedia org wiki Cumulative
  • 如何将视图放入 Bundle

    我将动态创建的 EditText 添加到布局 onClick 按钮方法 当我旋转屏幕时 添加的编辑文本消失 如何将它们添加到捆绑包中以将它们放入 onSavedInstanceState 方法中 或者 还有其他方法可以做到这一点吗 我知道我
  • 使用 dplyr 中转换后的数据替换 SQL 数据库表

    我经常在 dplyr 中转换数据时替换数据 尤其是在处理大型数据集时 当我使用 SQL 支持的数据集时 我不知道如何优雅地做到这一点 至少不是使用 SQLite 我在 dplyr DB vignettes 或 SO 中找不到任何关于这个目标