Skip to main content
Create a new Big Table, define its structure, and (optionally) populate it with data. Row IDs for any added rows are returned in the response in the same order as the input row data is passed in the request. Row data may be passed in JSON, CSV, or TSV format. When using a CSV or TSV request body, the name of the table must be passed as a query parameter and the schema of the table is always inferred from the content. Alternatively, the CSV/TSV content may be stashed, and then the schema and name may be passed in the regular JSON payload. If a schema is passed in the payload, any passed row data must match that schema. If a column is not included in the passed row data, it will be empty in the added row. If a column is passed that does not exist in the schema, or with a value that does not match the column’s type, the default behavior is for the table to not be created and the API call to return an error. However, you can control this behavior with the onSchemaError query parameter.

Examples

If you want to create a table and populate it with an initial dataset, you can do so by providing the data inline in the rows field (being sure that row object structure matches the table schema):
{
    "name": "Employees",
    "schema": { ... },
    "rows": [
        {
            "fullName": "Alex Bard",
            "ageInYears": 30,
            "hiredOn": "2021-07-03"
        }
    ]
}
However, this is only appropriate for relatively small initial datasets (around a few hundred rows or less, depending on schema complexity). If you need to work with a larger dataset you should utilize stashing.
Stashing is our process for handling the upload of large datasets. Break down your dataset into smaller, more manageable, pieces and upload them to a single stash ID.Then, to create a table from a stash, you can use the $stashID reference in the rows field instead of providing the data inline:
{
    "name": "Employees",
    "schema": { ... },
    "rows": {
        "$stashID": "20240215-job32"
    }
}