bqcsv
Upload a local CSV file to BigQuery using the bq CLI and your existing gcloud authentication.
Why a dedicated CLI tool?
Out of the box, Google's bq CLI cannot create a table with column names inferred from a CSV file.
bqcsv fixes that:
- detects the schema from the CSV file
- creates a table with proper column names and types
- loads the CSV file using
bq load
Authentication
No additional authentication is needed.
bqcsv uses your existing authentication via gcloud auth login.
Requirements
- Python 3.10+
- Google Cloud SDK with
bqon yourPATH
How to use bqcsv
Upload a CSV file to a table
To upload a CSV file, specify your project ID, dataset ID, and table name:
bqcsv data.csv --project my-gcp-project --dataset staging --table events_raw
The --table argument is optional. By default, bqcsv derives the table name from the CSV file:
bqcsv data.csv --project my-gcp-project --dataset staging
# is identical to
bqcsv data.csv --project my-gcp-project --dataset staging --table data
Saving your configuration
To avoid passing --project, --dataset, or --table on every run, save them to your local config:
bqcsv config set --project my-gcp-project --dataset analytics --table events
bqcsv config show
Defaults are stored in ~/.config/bqcsv/config.toml.
After you set your defaults, you can call bqcsv without arguments:
bqcsv data.csv
If you have not set a default --table value, the table name is derived from the CSV file.
Development
Install from your local repo
pip install -e .
Testing
To delete a test table, use bq:
bq rm -f -t PROJECT_ID:DATASET_ID.TABLE_NAME
You can run the module directly when working on a new feature or fixing a bug:
python -m src.cli config set --project PROJECT_ID --dataset DATASET_ID --table TEST_TABLE_NAME
Releasing to PyPI
-
Bump the version in both places (they must match):
pyproject.toml→[project].versionsrc/__init__.py→__version__
-
Install build tools (one-time):
pip install build twine
-
Run tests and commit the version bump.
-
Build the package:
python -m build
This creates
dist/bqcsv-<version>.tar.gzanddist/bqcsv-<version>-py3-none-any.whl. -
Upload to PyPI:
twine upload dist/*
On first upload, create an account at pypi.org and use an API token as the password (
__token__as the username). -
Tag the release (optional but recommended):
git tag v0.2.0 git push origin v0.2.0
After publishing, users can install the new version with:
pip install --upgrade bqcsv
Metadata
Release files for bqcsv 1.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| bqcsv-1.0.1.tar.gz | 9.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bqcsv-1.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.0 kB
Release files / bqcsv-1.0.1.tar.gz
| Download URL | bqcsv-1.0.1.tar.gz |
|---|---|
| Size | 9.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
31c49a14d9da49f9948ba8edfe005bb3498313d5ce610c0c4e141cd3bde7b266
|
|
BLAKE2b-256 checksum How to use checksums |
dbc6b7175e32a639a40a730ac9c546eb12e025b0d6acb3b35671e758510bcc96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|
Release files / bqcsv-1.0.1-py3-none-any.whl
| Download URL | bqcsv-1.0.1-py3-none-any.whl |
|---|---|
| Size | 10.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5cb98665ac03556fe4357aebc5363f9d39506095ddefe6f910ff14194dd86741
|
|
BLAKE2b-256 checksum How to use checksums |
f635367cb7067dec415e29801df7ccc5caac54308b935eba956d6066b20e6d97
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|