SQL Create table from R - Cadena de datos, truncamiento a la derecha

Sep 02 2020

Estoy trabajando con Microsoft SQL Azure versión 12, operando en un servidor RStudio y la biblioteca DBI. Necesito crear varias tablas SQL a partir de marcos de datos con una variable de longitud 4000. Esto se puede hacer como

# Create dataframe
df <- data.frame("myid" = stringi::stri_rand_strings(5, 4000),
                 "mydate" = c(Sys.time(), Sys.time()-1, Sys.time()-2, Sys.time()-3, Sys.time()-4) )

# Create SQL table sschema.ttable
DBI::dbWriteTable(conn = connection,
                    name = DBI::Id(schema = "sschema", table = "ttable"),
                    value = df,
                    overwrite = TRUE)

Esto falla con el siguiente error

Error en result_insert_dataframe ( rs@ptr , valores, lotes_filas): nanodbc/nanodbc.cpp:1617: 00000: [Microsoft][Controlador ODBC 17 para SQL Server]Datos de cadena, truncamiento a la derecha

Lo intenté

  • Truncar variables (subóptimo)
  • Crear tabla> modificar variables para que tengan formato VARCHAR(6000)en lugar de VARCHAR(255)> agregar marco de datos. Esto da como resultado el mismo error "Datos de cadena, truncamiento a la derecha".

¿Alguna solución para crear tablas SQL directamente desde marcos de datos R?

Respuestas

obruzzi Sep 22 2020 at 22:22

La respuesta es definir las variables y su clase de variable SQL deseada con field.typescomo en

# Create SQL table sschema.ttable
DBI::dbWriteTable(conn = connection,
                    name = DBI::Id(schema = "sschema", table = "ttable"),
                    field.types=c(myid="varchar(6000)"),
                    value = df,
                    overwrite = TRUE)