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.2.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.2.1.tar.gz | 10.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bqcsv-1.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 21.2 kB
Release files / bqcsv-1.2.1.tar.gz
| Download URL | bqcsv-1.2.1.tar.gz |
|---|---|
| Size | 10.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b543c87a7e0b82119afacff34ae15778b9af5abc616c824b86a5c2183d66195c
|
|
BLAKE2b-256 checksum How to use checksums |
cac0a3fe3613a59f721d53363f66cc79f4966872df540f1d0b61ad994d404b68
|
| 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.2.1-py3-none-any.whl
| Download URL | bqcsv-1.2.1-py3-none-any.whl |
|---|---|
| Size | 10.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5ddce2c77335a3dac7640e301a711872ce53da7e72cd8e669b80ebdd04b2d439
|
|
BLAKE2b-256 checksum How to use checksums |
a2626a030c082fcabb786653cda4b3866760adf79b5a6a9887fd45012e3187ba
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.0
|