Google BigQuery

How to upload data to BigQuery: CSV, Google Drive and SQL

To upload a file to BigQuery, create a table from it in the console, or run a LOAD DATA statement for files in Cloud Storage. This guide covers the steps for a local CSV, larger files, Google Drive and Sheets, schema detection, and the errors that stop a load.

Google BigQueryAlyona Samovar5 min read

How to upload data to BigQuery: CSV, Google Drive and SQL

To upload a file to BigQuery you create a table from it. For a file on your computer that takes about a minute in the Google Cloud console. For bigger files, the file goes to Cloud Storage first and a load job or one SQL statement brings it in.

The file is Do this
on your computer, under 100 MB Create table in the console, source Upload
larger, or many files put it in Cloud Storage, then LOAD DATA
in Google Drive or a Google Sheet an external table over the Drive file

Limits and formats below are from Google’s batch loading and CSV loading pages, checked on 6 October 2026.

Note: Originally published in July 2023. Fully rewritten in October 2026 against Google’s current documentation.

Before you start

Before you start

  • A Google Cloud project with BigQuery enabled, and a dataset to hold the table.
  • Permission to create tables in it. The BigQuery Data Editor role includes that.
  • The file in a supported format: CSV, JSON (newline-delimited), Avro, Parquet or ORC.

Upload a CSV from your computer

Upload a CSV from your computer

  1. In the BigQuery console, find your dataset in the Explorer pane, open its menu and choose Create table.
  2. Under Create table from, choose Upload and select the file.
  3. Set File format to CSV.
  4. Give the table a name.
  5. Under Schema, tick Auto detect, or type the column names and types yourself.
  6. Open Advanced options and set Header rows to skip to 1 if the first row holds column names.
  7. Click Create table.

The console creates a load job. When it finishes, the table appears under the dataset.

Two limits apply to local uploads. A file cannot exceed 100 MB in the console, and files must be loaded one at a time: no wildcards, no lists.

The Turning Point

OWOX Data Marts

See your first report built in real time. 15 minutes.

  1. Connect your data warehouse
  2. Pick your metrics
  3. Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

Book a Demo

We'll use your actual use case

Larger files: Cloud Storage and LOAD DATA

Larger files: Cloud Storage and LOAD DATA

Upload the file to a Cloud Storage bucket, then load it with SQL:

LOAD DATA INTO mydataset.orders
FROM FILES (
  format = 'CSV',
  uris = ['gs://my-bucket/orders/2026-10-*.csv'],
  skip_leading_rows = 1
);

LOAD DATA INTO appends to the table and creates it if it does not exist. LOAD DATA OVERWRITE replaces its contents. From Cloud Storage you can use a wildcard, as above, to load many files in one statement. To fix the schema instead of detecting it, list the columns after the table name:

LOAD DATA OVERWRITE mydataset.orders
(order_id INT64, customer STRING,
 amount NUMERIC, order_date DATE)
FROM FILES (
  format = 'CSV',
  uris = ['gs://my-bucket/orders/orders.csv'],
  skip_leading_rows = 1
);

Both statements follow Google’s reference syntax. They were not run for this article, since they write to a dataset.

The same load can be done from the console by choosing Google Cloud Storage as the source in the Create table dialog, or with the bq load command.

Batch loading is free. You are charged for the storage of the loaded data, and for the file while it sits in Cloud Storage, so delete it there once the load is checked.

From Google Drive or Google Sheets

From Google Drive or Google Sheets

For a file in Drive, BigQuery can read it in place through an external table:

  1. In Create table, choose Drive as the source.
  2. Paste the file’s URL.
  3. Choose the format: CSV, JSON, Avro or Google Sheet. For a sheet you can name the tab and range.
  4. Set the schema and create the table.

Nothing is copied. Each query reads the file as it is at that moment, so edits in the sheet show up immediately, and so do mistakes. The account that runs the query needs access to the Drive file. For data a report depends on, materialize the external table into a normal one:

CREATE OR REPLACE TABLE mydataset.targets AS
SELECT * FROM mydataset.targets_sheet;

More on this route in how to connect Google Sheets to BigQuery.

Schema: detect it or declare it

Schema: detect it or declare it

Auto detect reads a sample of the file and guesses each column’s type. It is fine for a first look. For anything recurring, declare the schema, because detection can change its mind between files: a column of IDs that happen to be numeric this week becomes INT64, and next week’s file with one letter in it fails.

One documented quirk: if every column in a CSV is text, auto detect cannot tell the header row from the data. Declare the schema or add a numeric column.

Errors that stop a load

Errors that stop a load

  • Dates in the wrong layout. In CSV and JSON, a DATE column must be YYYY-MM-DD. Load 06/10/2026 as STRING and convert it with PARSE_DATE.
  • Thousands separators. 1,200 is not a number to a load job. Load as STRING and use PARSE_NUMERIC.
  • A byte order mark at the start of the file. Remove it; Google’s page says it can cause unexpected issues.
  • Nested data in CSV. CSV cannot hold arrays or structs. Use JSON, Avro or Parquet.
  • Compressed files. A gzip CSV loads, but not in parallel, and cannot exceed 4 GB. Compressed and uncompressed files cannot be mixed in one job.
  • Too many bad rows. A load fails on the first bad row unless you allow some under Advanced options. Allowing them hides the problem, so count what was skipped.

A sound pattern for messy files: load everything as STRING into a raw table, then build the typed table with a query that uses SAFE_CAST and counts the failures. See CAST and SAFE_CAST.

When uploading is the wrong tool

When uploading is the wrong tool

A manual upload is right for a one-off file: a list of targets, a mapping table, an export someone sent you. It is the wrong habit for anything that repeats. The third time you upload this week’s CSV, the task wants a scheduled load. The options, from the Data Transfer Service to connectors for ad platforms, are compared in how to load data into BigQuery.

For ad platforms and similar sources, OWOX Data Marts has open-source connectors that load into your warehouse on a schedule, and it keeps the queries you write over that data, with their owners and run history, in the same place. OWOX does not clean or reshape the files for you; the SQL stays yours.

Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

  • No AI hallucinations
  • Analyst-governed definitions
  • Every number traces to SQL
Get started free

FAQ

Frequently Asked Questions

How do I load data from Cloud Storage into BigQuery with SQL?

With the LOAD DATA statement: LOAD DATA INTO mydataset.table FROM FILES (format = 'CSV', uris = ['gs://bucket/path/*.csv']). INTO appends and OVERWRITE replaces the table's contents. Wildcards are allowed for Cloud Storage URIs.

What is the file size limit for uploading to BigQuery?

A local file uploaded through the console cannot exceed 100 MB, and files must be loaded one at a time. For larger files, upload to Cloud Storage and load from there. A gzip-compressed CSV cannot exceed 4 GB.

How do I get a Google Sheet into BigQuery?

Create a table with Drive as the source, paste the sheet's URL and choose Google Sheet as the format. This makes an external table that reads the sheet at query time. To keep a stable copy, create a native table from it with CREATE OR REPLACE TABLE ... AS SELECT.

Why does my CSV upload to BigQuery fail?

Usually a date that is not in YYYY-MM-DD form, a number with thousands separators, a byte order mark at the start of the file, or nested data that CSV cannot hold. Loading the column as STRING and converting it with SAFE_CAST or PARSE_DATE afterwards is the reliable fix.

Does uploading data to BigQuery cost money?

Batch loading is free using the shared slot pool. You pay for the storage of the loaded data, and for the file while it remains in Cloud Storage.

How do I upload a CSV file to BigQuery?

In the BigQuery console, open the dataset's menu, choose Create table, set the source to Upload, pick the file, set the format to CSV, name the table and choose Auto detect or enter the schema. Set Header rows to skip to 1 if the file has a header.

Should I use schema auto detect in BigQuery?

For a first look, yes. For a recurring load, declare the schema: detection samples the file and can pick a different type from one file to the next. If every column in a CSV is text, auto detect cannot identify the header row.

When should I stop uploading files manually?

When the same upload repeats. Use a scheduled load, the BigQuery Data Transfer Service for supported sources, or a connector for ad platforms and other tools, so the table refreshes without anyone remembering to do it.

Who wrote this

Alyona Samovar

Alyona Samovar · Senior Digital Analyst

Alyona Samovar is a Senior Digital Analyst who spent years at OWOX helping enterprise clients design analytics systems, build BigQuery reporting pipelines, and optimize marketing measurement. She specializes in SQL-based analytics, data modeling, and turning raw marketing data into actionable insights. Alyona writes about practical analytics workflows, BigQuery best practices, and data-driven decision-making.