# Upload$insert\_rows

### Upload$<mark style="color:purple;">insert\_rows</mark>(*rows, update\_schema=FALSE*) → ***list***[\<insertRows response>](https://docs.redivis.com/api/rest-api/uploads/insertrows#response-body)

Insert rows into the upload. Can only be called on unreleased uploads of type `"stream".` Should be called at most once per second, per upload; for increased performance try batching multiple rows into a single request, up to a limit of 10MB per request.

### **Parameters:**

**`rows` :&#x20;*****data.frame | character***\
The rows to insert. Either a data.frame (or something that inherits from data.frame; e.g., a tibble), or a character vector that is a valid JSON string for an [insertRows payload](https://docs.redivis.com/api/rest-api/uploads/insertrows).

### **Returns:**&#x20;

**List**[**\<insertRows response>**](https://docs.redivis.com/api/rest-api/uploads/insertrows#response-body)

### Examples

```r
library(redivis)

dataset <- redivis$user("user_name")$dataset("dataset_name", version="next")
table <- dataset$table("table_name")

# Providing a schema with the initial request is optional (but recommended).
# If not set, schema will be inferred based on the first batch of rows.
schema <- list(
  list(name = "var1", type = "string"),
  list(name = "var2", type = "integer"),
  list(name = "var3", type = "dateTime")
)

# Construct a data.frame to send (or alternatively, a stringified JSON array of objects)
rows <- data.frame(
  var1 = c("hello", "world"),
  var2 = c(1, 2),
  var3 = c(NA, "2020-01-01T00:00:00.123")
)

upload <- table$upload(name="my_stream")

# Create, or get a reference to an exisiting upload named "my_stream"
upload.create(type="stream", schema=schema, if_not_exists=True) 

insert_response = upload.insert_rows(rows)

# See REST API / uploads / insertRows
print(insert_response)
```
