Skip to content

Start from a CSV file

6 min read · Updated 4 Nov 2026

Use this page when your data is a CSV file, for example an export from a spreadsheet, rather than a table already in a database. You upload the file in the semantic layer editor, Astrato loads it into a new table in your data connection, and the table lands on the map ready to model. From there, Your first Data App carries on as usual.

  • Your role must be Creator, Admin or Owner. The semantic layer editor is in Data & AI. A Designer does not have it on the rail, and a Viewer can only be given View on a layer. See Roles.
  • You still need a data connection. The upload is stored as a real table, so it goes into a data connection your workspace already has, and that connection must allow writes: Astrato creates a schema for uploads in it, named Astrato. A read-only connection is refused before you can pick a file. If you have no connection at all, create one first in Data connections, or ask whoever administers your workspace which connection takes uploads. Only read-only connections to hand? A table of up to 100 cells, such as the sample below, can go into an inline table instead; see No writable connection?.
  • You need a semantic layer on that connection. Create one in Data & AI → Semantic Layers with Create, then New Semantic Layer, selecting the connection as the Datasource. See Create a semantic layer.
  • Check the file’s size. An upload takes up to 10 MB, 100,000 rows and 1,000 columns.
  • Save the file as CSV. The file picker accepts .csv files. In a spreadsheet, use your application’s save or download option for comma-separated values. A semicolon-separated export works too: the delimiter is detected from the file.

To try the steps without your own data, copy these lines into a text file and save it as sales.csv.

order_date,region,product,units,revenue
2026-01-05,North,Road bike,2,2400
2026-01-09,South,Helmet,10,450
2026-01-14,East,Road bike,1,1200
2026-01-20,West,Mountain bike,3,4200
2026-02-02,North,Helmet,6,270
2026-02-11,South,Mountain bike,2,2800
2026-02-17,East,Gloves,12,300
2026-02-25,West,Road bike,2,2400
2026-03-03,North,Gloves,8,200
2026-03-10,South,Road bike,1,1200
2026-03-18,East,Mountain bike,1,1400
2026-03-27,West,Helmet,5,225

The rest of this page, and the worked example in Your first Data App, uses this file.

  1. Open your semantic layer in the editor and stay on the Map tab.

  2. Select Add in the toolbar, then Upload a CSV file under Data. The Upload a CSV file dialog opens.

    The Add menu on the Map tab with Upload a CSV file under Data

  3. Wait while the dialog shows Checking where this connection stores uploaded files…. When the connection can take an upload, a drop area appears with the size limits and a line such as Uploaded files become tables in the Astrato schema.

    The Upload a CSV file dialog with its drop area, the size limits and the Astrato schema note

  4. Drag your file onto the drop area, or select browse and pick it.

  5. Check the preview:

    • Table name starts as the file name without .csv, for example sales. Change it if you like.
    • Set the first row as the header is ticked. Untick it if your file has no header row.
    • Each column has a tick box and a data type. Untick a column to leave it out, and change a type if it was guessed wrong. The types offered are boolean, date, float, int, string, time and timestamp.
    • The preview shows up to the first 20 rows. Every row in the file is imported.

    The preview of sales.csv with the table name sales, Set the first row as the header ticked and a type for each column

  6. Select Save. The dialog shows Uploading and importing… while it works.

Result: the dialog closes, a message such as Imported 12 rows from sales.csv as “sales” appears, and the new table sits on the map with all its columns as fields. The table is selected. The change is in your draft until you publish the layer.

The new sales table in the Astrato schema selected on the map, with the message Imported 12 rows from sales.csv as “sales”

Column names can change on the way in: the importer normalises headers, so a header such as firstName can become first_name. Use the names you see on the map.

  • The dialog shows a message instead of the drop area. The connection cannot take an upload, usually because it is read-only, or the layer has no data connection. Use a connection that allows writes, or ask its owner to give the connection’s credentials the right to create a schema and tables.
  • Save stays unavailable. Hover over it to see why. It needs a file, a table name and at least one ticked column. A name that is already used in the upload schema is refused: choose another.
  • The file is refused when you pick it. The message says why, for example That file has no rows. Check that it is a CSV file with at least one row of data.
  • The import fails after you select Save. The dialog stays open with the reason and keeps your file, so you can fix the name or a column type and select Save again.
  • The table is not where you expected. Open Add, then Tables & Views, and look in the upload schema named in the dialog.

No writable connection? Paste a small table

Section titled “No writable connection? Paste a small table”

An Inline table keeps its rows in the semantic layer itself rather than in your database, so it works on a read-only connection. It holds up to 100 cells and 20 columns, which suits the sample above (12 rows of 5 columns) and short lookup lists, not a full data set.

  1. Open your semantic layer in the editor and stay on the Map tab.

  2. Select Add in the toolbar, then Inline table under Data. The Create inline table dialog opens.

  3. Enter a Table name, for example sales.

  4. Copy the whole sample, header row included, from a text file or a spreadsheet. Click the first column’s name in the grid and paste. The column names and rows fill in from what you pasted; the counter above the grid shows how many of the 100 cells you have used. If every line lands in the first column instead, copy again with an empty line at the end and paste once more.

  5. Check the data type above each column, and change any that is wrong: units and revenue are numbers, order_date is a date.

    The Create inline table dialog with the table name sales and the sample pasted in: 5 columns, 12 rows and 60 of 100 cells used, with order_date typed as Date, region and product as String, and units and revenue as Int, above the Save table button

  6. Select Save table. It stays unavailable until the table has a name that is not already used, at least one value, and every value matches its column’s data type; hover over it to see why.

The table appears on the map like any other, and Your first Data App carries on from there. As with an upload, the table is in your draft until you publish the layer.

Prefer to ask Nash? You can also attach a CSV file to a message in the Nash panel and Nash imports it the same way. See Attach a file to a message.