跳到内容

将CSV文件直接读入DuckDB,尝试检测并为其创建正确的schema。这通常比将数据读入R再写入DuckDB快得多。

用法

duckdb_read_csv(
  conn,
  name,
  files,
  ...,
  header = TRUE,
  na.strings = "",
  nrow.check = 500,
  delim = ",",
  quote = "\"",
  col.names = NULL,
  col.types = NULL,
  lower.case.names = FALSE,
  sep = delim,
  transaction = TRUE,
  temporary = FALSE
)

参数

conn

一个 DuckDB 连接,由 dbConnect() 创建。

name

要注册或取消注册的虚拟表的名称

files

一个或多个CSV文件名,但它们都应具有相同的结构

...

保留供将来扩展使用,必须为空。

header

CSV文件的第一行是否包含单独的标题

na.strings

CSV文件中哪些字符串应被视为NULL

nrow.check

应从CSV文件读取多少行来确定数据类型

delim

应使用哪个字段分隔符

quote

CSV文件中列使用的引用字符是什么

col.names

覆盖检测到或生成的列名

col.types

与 col.names 顺序相同的列类型字符向量,或一个命名字符向量,其中名称是列名和类型对。有效类型是 DuckDB数据类型,例如 VARCHAR, DOUBLE, DATE, BIGINT, BOOLEAN 等。

lower.case.names

将列名转换为小写

sep

delim 的兼容性别名

transaction

整个操作是否应使用事务

temporary

设置为 TRUE 以创建临时表

返回值

结果表中的行数,不可见。

详情

如果表已存在于数据库中,则CSV数据将附加到该表中。否则,将创建该表。

示例

if (FALSE) { # duckdb:::TEST_RE2
con <- dbConnect(duckdb())

data <- data.frame(a = 1:3, b = letters[1:3])
path <- tempfile(fileext = ".csv")

write.csv(data, path, row.names = FALSE)

duckdb_read_csv(con, "data", path)
dbReadTable(con, "data")

dbDisconnect(con)


# Providing data types for columns
path <- tempfile(fileext = ".csv")
write.csv(iris, path, row.names = FALSE)

con <- dbConnect(duckdb())
duckdb_read_csv(con, "iris", path,
  col.types = c(
    Sepal.Length = "DOUBLE",
    Sepal.Width = "DOUBLE",
    Petal.Length = "DOUBLE",
    Petal.Width = "DOUBLE",
    Species = "VARCHAR"
  )
)
dbReadTable(con, "iris")
dbDisconnect(con)
}