我想计算数据库中的Jaro-Winkler字符串距离。如果我将数据带入R(使用collect
),我可以轻松使用stringdist
包中的stringdist
函数。
但是我的数据非常大,我想在将数据拉入R之前过滤Jaro-Winkler距离。
有Jaro-Winkler的SQL代码(https://androidaddicted.wordpress.com/2010/06/01/jaro-winkler-sql-code/和T-SQL的版本),但我想我不确定如何最好地使用{{1的SQL代码}}。我很乐意尝试将dbplyr
函数映射到Jaro-Winkler stringdist
代码,但我不知道从哪里开始。但即使是在远程数据上直接从R执行SQL代码这样简单的事情也会很棒。
我曾希望sql
文档中的SQL translation可能有所帮助,但我不这么认为。
答案 0 :(得分:0)
您可以在R中构建自己的SQL函数。它们只需要产生一个有效的SQL查询字符串即可。我不知道Jaro-Winkler距离,但是我可以为您提供一个示例,供您参考:
union_all = function(table_a,table_b, list_of_columns){
# extract database connection
connection = table_a$src$con
sql_query = build_sql(con = connection,
sql_render(table_a),
"\nUNION ALL\n",
sql_render(table_b)
)
return(tbl(connection, sql(sql_query)))
}
unioned_table = union_all(table_1, table_2, c("who", "where", "when"))
这里的两个关键命令是:
sql_render
,它将使用dbplyr表并返回产生该表的SQL代码build_sql
,它从字符串中组合查询。您可以选择执行命令:
tbl(connection, sql(sql_query))
将返回结果表dbExecute(db_connection, as.character(sql_query))
将在不返回结果的情况下执行查询(可用于删除表,创建索引等)