jfe*_*aum 6 r stringdist dbplyr
我想计算数据库中的 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的版本),但我想我不知道如何最好让 SQL 代码与dbplyr. 我很高兴尝试将该stringdist函数映射到 Jaro-Winklersql代码,但我不知道从哪里开始。但即使是更简单的事情,比如直接从 R 对远程数据执行 SQL 代码也会很棒。
我曾希望文档中的SQL 翻译dbplyr可能有所帮助,但我不这么认为。
您可以在 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"))
Run Code Online (Sandbox Code Playgroud)
这里的两个关键命令是:
sql_render,它采用 dbplyr 表并返回生成它的 SQL 代码build_sql,它从字符串组装查询。您可以选择执行命令:
tbl(connection, sql(sql_query))将返回结果表dbExecute(db_connection, as.character(sql_query))将执行查询而不返回结果(对于删除表、创建索引等很有用)