# Import data > Load a CSV, JSON, Excel, Parquet or Avro file, a Google Sheet, or whatever is on your clipboard into a BigQuery table. Schema is detected from the first 1,000 rows and editable before anything is written. Source: https://docs.querylab.io/data-management/import/ **Import Data tab**

Drop file here to import
or click to browse your files

CSV JSON Excel Parquet Avro
or import from
Google Drive Google Sheets Clipboard
A dropped file goes straight to the schema step. ## Opening it - Drag a file onto the app window. `.sql` and `.bqsql` files open as query tabs instead. - Right-click a dataset or table in the schema tree → **Import**. - `⌘` `K` → **Import data**. Only one Import tab exists at a time; opening it again switches to the existing one. Importing needs a signed-in Google account; it's unavailable in the playground. ## Sources | Source | What it accepts | | ----------------- | ------------------------------------------------------------------ | | Drop zone | `.csv` `.json` (array or NDJSON) `.xlsx` `.xls` `.parquet` `.avro` | | **Google Drive** | The same formats from the Drive picker | | **Google Sheets** | A spreadsheet from the Drive picker (filtered to Sheets) | | **Clipboard** | JSON, tab-separated, comma-separated, or one value per line | Google Drive files are limited to 200 MB and clipboard text to 10 MB. Picking a Google Sheet from the Drive picker reroutes you to the Sheets flow. The clipboard format is detected from the text; check the preview before importing. ## The schema step Once a source is loaded the tab splits: sections on the left, **Data preview** on the right (`Showing 100 of 15,847 rows`; the preview caps at 100) plus a list of skipped rows and why. Everything you change on the left is reflected in the preview before you import. **Import Data tab → schema step**
Destination
- Project: ace-analytics - Dataset: warehouse - Table Name: orders_2026. 14 existing tables available - Import as temporary table
Write Mode
- Create if needed (selected): Create table if it does not exist - Append to table: Add rows to existing table - Overwrite table: Replace all existing data
Schema (6)
- First row is header (selected)
Options
- None (selected) - Ingestion time - By column Left panel, top to bottom. Options is collapsed by default. The Table Name helper reads Enter a new table name while the dataset is empty. ### Choosing where the data goes Project and dataset are selects; the project defaults to the one you used last. **Table Name** autocompletes over existing tables and must start with a letter or underscore. With **Create if needed**, the app checks first and refuses to overwrite an existing table: switch to **Append to table** or **Overwrite table**, or pick another name. **Import as temporary table** adds an **Expires after** select (1, 6, 24 or 72 hours; default 24) and sets the table's expiration. ### Editing the detected schema Each detected column is a row you can edit in place: - Click the name to rename it, the italic _No description_ to describe it. - Click the type badge to change it (STRING, INT64, FLOAT64, BOOL, DATE, TIMESTAMP, DATETIME, TIME, JSON, STRUCT, ARRAY, BYTES, NUMERIC, BIGNUMERIC, GEOGRAPHY). Numbers that look like epochs get an extra **Epoch Conversion** choice: seconds or milliseconds to TIMESTAMP, or keep as INT64. - Click NULLABLE / REQUIRED to toggle the mode. - Drag rows to reorder. Columns can't be removed. Untick **First row is header** (CSV and Excel) to get `column_1 … column_n`, all STRING. With Prism AI enabled, **Fill with AI** names and describes columns for you, with undo. Excel files with several sheets get a **Sheet** select above the schema. ### Partitioning, clustering and CSV parsing - **Partitioning**: None, Ingestion time, or By column. By column needs a DATE, TIMESTAMP or DATETIME column and asks for a **Granularity** (DAY, HOUR, MONTH, YEAR). - **Clustering (up to 4 columns)**. - CSV only: **Delimiter** (comma, tab, semicolon, pipe; the detected one is marked) and **Null marker**. ## Running it **Start Import** uploads the file and runs a BigQuery load job; the progress card shows rows so far, the destination and elapsed time, with **Cancel**. On success you get the row count, duration and size, plus **Query This Table**, a new tab with `SELECT * FROM … LIMIT 100`, and **Import Another**. The schema tree refreshes on its own. Load jobs are free in BigQuery; you pay for storage only. ## Google Sheets A **Google Sheets** section appears above Destination with a **Sheet tab** select, a **Range** field in A1 notation (`A1:D100`, `A:D`) and **Apply** to re-fetch. Formula errors in the first 100 rows (`#REF!`, `#N/A`, `#DIV/0!` …) surface as a warning per column. Tick **Connected table** to create an external table instead of copying the data: _BigQuery reads live data from Sheet. No column reordering, type mapping, or partitioning._ The Schema and Options sections, write mode and the temporary-table option disappear, and the button becomes **Create Connected Table**. > A connected table is only as available as the sheet. Delete the spreadsheet or revoke access and every query against the table fails, and each query is billed for the bytes read from the sheet.