- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我们需要将一个数据库表与一个 excel 文件的内容连接起来。使用 dplyr
left_join
很简单,但需要在连接中设置 copy=TRUE
,因为数据不是来自同一源.这反过来意味着代码将仅在数据库用户具有 INSERT 权限时运行,以便 left_join
可以在/tmp 文件夹中创建临时表。
有没有办法在不授予 INSERT 权限的情况下执行 copy=TRUE
left_join
?访问数据进行分析的数据库用户实际上应该只是一个读者。
如果未授予插入权限,则会出现如下错误:
Error in .local(conn, statement, ...) :
could not run statement: INSERT command denied to user
'reader'@'192.168.135.1' for table 'utiexriryc'
将出现(每次连接时使用不同的随机表名称)。
一个简短的可重现示例是困难的,因为它需要一个数据库连接(在本例中是通过 src_mysql()
连接到 mysql)和一个 excel 文件(在本例中是用 readxl
读取的) >).连接看起来像:
df.biozones <- db.sites %>%
left_join(ef.join_site_ids, by=c("site_id"="id"), copy=TRUE) %>%
collect()
其中 db.sites 是一个 mysql 数据库表,ef.join_site_ids 是一个使用 readxl 读取的 excel 电子表格中的 data.frame。
有没有办法在 dplyr 中执行上述操作并避免为读取数据的用户授予 INSERT 权限?
最佳答案
虽然没有办法按照我直接要求的去做,正如@hadley 所说,但是有一种不同的方式来看待这个问题。我花了一些时间才明白 dplyr 将每个连接视为不同的源(或简称为 src
)。 src
上始终存在,它是内存中对象的集合。
所以在我的问题中,我实际上是在处理三个来源:
这三个中的任何一个之间的任何连接都需要 dplyr 的权限来创建临时表并插入其中。这三个中任何一个的任何连接都不是问题。因此,当您无法获得对数据库的额外权限时,(至少)有三种可能的方法来处理这个问题。
<强>1。将所有内容加载到内存中
如果您将所有需要的对象从两个数据库中获取到内存中,那么您将把它们放入一个共享的 src
中,并且能够对它们进行任何连接。 Dplyr 提供了 collect()
函数来执行此操作:
db_table_of_interest <- tbl(Database_1, "table_of_interest")
df_table_of_interest <- collect(db_table_of_interest).
您实际上会将表格变成本地数据框。您将需要对所有感兴趣的数据库中的所有感兴趣的表执行此操作。只要您有足够的 RAM 来存放您正在阅读的所有数据,它就可以正常工作。
<强>2。在数据库之间复制标识符
如果(如我们的情况)您需要在两个具有相同站点但 ID 不同的数据库之间加入记录标识符(如站点或样本 ID),那么最简单的方法是将两个表中的 ID 加倍数据库。因此,与其使用在其中列出每个数据库中每个站点的所有 ID 并设置匹配项的外部工作表,不如在每个数据库的 site_table 中添加一列并引用另一列。
只要不需要用实际数据建立连接表,就可以了。例如,如果您需要读取按物种分类的站点和按环境分类的站点表,其中物种和环境数据存储在单独的数据库中,并且每个站点具有不同的 ID。
如果您确实需要连接表,那么至少您可以在执行 collect()
并读取内存中的所有内容之前在两个数据库中进行预选。当有大量数据要读取时,这将节省您的内存需求。
<强>3。将所有内容复制到一个分析数据库中
如果由于某种原因无法使用更多内存,那么理论上您可以先将所有数据复制到一个数据库中。我无法想象这在任何情况下都是一个可行的选择,除了只有几个感兴趣的表,以便将它们合并到一个新的联合数据库中是可行的。也许在数据集非常大且不变的情况下。
如果我在此列表中遗漏了一个选项,我很乐意知道您可能找到了哪些其他解决方案。
关于mysql - 如何在不授予 INSERT 权限的情况下在 dplyr 中创建 left_join(..., copy=TRUE),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30489695/
如何授予 VSTS (TFVC) 用户从分支创建新分支的权限?我已经授予他对 ParentBranch 的“管理分支”和“合并”权限。 当他尝试从“ParentBranch”创建一个名为“ChildB
我在我的 oracle 过程中使用 dbms_crypto.encrypt 函数来加密密码。我已连接到 oracle 为: connect sqlplus as sysdba 然后授予权限: gran
如何在不连接到每一台计算机的情况下将我的 android 设备的 adb 访问权限授予我的所有计算机并按允许? 最佳答案 通过 adb 连接到设备时,每台计算机都会将代码写入 android 设备,以
我有一个 package A ,它在另一个 package B 中使用了一些变量和过程在 相同的架构 .现在想搬家package A到 新架构 .我应该授予 new schema 哪些权限用于使用 p
我需要获取数百个 MS Access DB 的元数据,因此我需要自动化元数据收集过程。 我想查询描述的内容 here ,但在查询数据库之前,我需要对 MSysObjects 进行读取 Access 表
我有一个 JApplet,我想授予它读写打印等权限。该小程序仅从本地文件系统加载 我已经阅读了java教程的控制小程序部分,并成功创建了一个策略文件,授予权限并指定代码库 http://docs.or
我正在使用 phpmyadmin 来调整用户的权限。 我删除了用户“root”的所有访问权限。现在我看不到表格了。 我尝试用另一个用户登录,但它不允许我。 此时我有什么选择? 第 1 步。 //Sto
Mysql 服务器允许从本地主机访问匿名用户。我也想将此权限扩展到其他机器...即,使用没有任何密码的匿名用户从机器 B 的 mysql 客户端访问在机器 A 中运行的 mysql_server。 我
为所有想要连接的新用户授予 MySQL 数据库访问权限的命令是什么? 考虑这个陈述: CREATE USER 'java'@'localhost' IDENTIFIED BY 'password';
我在尝试通过 t 为 mysql 用户授予数据库权限时遇到了一个问题。我认为这是因为数据库名称中的特殊字符。 这个正在工作: /usr/bin/mysql -uroot -pXz5eaCqwvsT0p
我可以在 GRANT 语句中使用静态数据库名称授予权限。 GRANT SELECT,INSERT ON database_name.table_name TO 'username'@'localhos
授予 Facebook 应用查看我的赞的权限是否允许该应用的所有其他用户也看到我的赞? 或者同一应用的其他用户能否看到我的点赞取决于我的点赞隐私设置? 例如,假设我只允许好友看到我的赞。这是否意味着该
我在这里敲了几个小时的脑袋。 我正在向数据库添加用户和密码,同时尝试授予权限。 GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TA
我正在尝试在 Flask 中创建一个自定义错误页面,我想让错误处理程序访问生成导致错误的 API 调用的请求,以便它返回的错误页面可以更改,具体取决于情况。例如,假设有两个端点: (1) @app.r
我已经编写了一个简短的快速代码来向查找器添加一个按钮,该按钮通过系统 touch 调用在当前目录中创建一个新的空白文件。该扩展可以很好地获取当前目录(通过 FIFinderSyncController
当我运行 hdf namenode -format 时,它想要删除目录 /home/hadoop/hadooptmpdata/dfs/name/current 但它没有权限执行此操作。如何授予它权限?
我正在用 C# 编写一个应用程序(对于我的一个 friend 来说,这是非常基础的),但是我有一个 StreamWriter 对象,它在 C: 中创建一个本地文件。我必须以管理员身份运行,它工作正常,
我已经安装了 Centos5,安装了 Web 服务器并设置了虚拟主机。主机几乎是这样设置的: > adduser user1 > mkdir -p /home/user1/public_html/do
我正从 MySQL 迁移到 PostgreSQL,但在用户权限方面遇到了瓶颈。我习惯于使用以下命令为用户分配对数据库所有表的所有权限: # MySQL grant all privileges on
我试图为特定用户授予对 UNC 路径的 NTFS 权限,但我看到了不同的行为,具体取决于 UNC 路径。下面是我用来授予权限的代码(来自 MSDN)以及每种情况下的结果, static void Gi
我是一名优秀的程序员,十分优秀!