我缺乏经验T-sql
批量导入和导出,但这很可能是您找到答案的地方。
library(arrow)
library(DBI)
test <- data.frame(matrix(rnorm(20), nrow=10))
f <- tempfile(fileext = '.parquet')
write_parquet(test2, f)
#Upload table using bulk insert
dbExecute(connection,
paste("
BULK INSERT [database].[schema].[table]
FROM '", gsub('\\\\', '/', f), "' FORMAT = 'PARQUET';
")
)
我在这里使用T-sql
's own bulk insert https://learn.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-ver15命令。
免责声明我还没有使用过这个命令T-sql
,所以它可能充满错误。例如,我在文档中看不到指定快速压缩的地方,尽管如果使用以下命令定义自定义文件格式,则可以指定它CREATE EXTERNAL FILE FORMAT https://learn.microsoft.com/en-us/sql/t-sql/statements/create-external-file-format-transact-sql?view=sql-server-ver15.
现在上面的内容只插入到现有的表中。对于您的具体情况,您想从文件创建一个新表,您可能会寻找更多OPENROWSET https://learn.microsoft.com/en-us/sql/t-sql/functions/openrowset-transact-sql?view=sql-server-ver15 using CREATE TABLE AS [select statement] https://learn.microsoft.com/en-us/sql/t-sql/statements/create-table-transact-sql?view=sql-server-ver15.
column_definition <- paste(names(column_defs), column_defs, collapse = ',')
dbExecute(connection,
paste0("CREATE TABLE MySqlTable
AS
SELECT *
FROM
OPENROWSET(
BULK '", f, "' FORMAT = 'PARQUET'
) WITH (
", paste0([Column definitions], ..., collapse = ', '), "
);
")
where column_defs
将是一个named描述为每列提供 SQL 数据类型定义的列表或向量。从 R 数据类型到(或多或少)完整的转换可在T-sql 文档页面 https://learn.microsoft.com/en-us/sql/machine-learning/r/r-libraries-and-data-types?view=sql-server-ver15(注意两个非常必要的翻译:Date
and POSIXlt
不存在)。再次免责声明:我在 T-sql 中的时间没有达到 BULK INSERT 或类似的。