Skip to content

bigquery.table.Table.upload_from_file() doesn't check the initial request response status #2132

@theacodes

Description

@theacodes

If you try to add data to a table from a file without a schema:

bigquery_client = bigquery.Client()
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(table_name)

    with open(source_file_name, 'rb') as source_file:
        job = table.upload_from_file(
            source_file, source_format='text/csv', rewind=True)

job.begin()

This will fail with an opaque error:

Traceback (most recent call last):
  File "load_data_from_file.py", line 74, in <module>
    args.source_file_anme)
  File "load_data_from_file.py", line 40, in load_data_from_gcs
    source_file, source_format='text/csv', rewind=True)
  File "/Users/jonwayne/workspace/python-docs-samples/bigquery/cloud-client/env/lib/python3.4/site-packages/gcloud/bigquery/table.py", line 913, in upload_from_file
    return client.job_from_resource(json.loads(response_content))
  File "/Users/jonwayne/workspace/python-docs-samples/bigquery/cloud-client/env/lib/python3.4/site-packages/gcloud/bigquery/client.py", line 119, in job_from_resource
    config = resource['configuration']
KeyError: 'configuration'

Inspection of the response from the initial upload request reveals the problem:

status: 400
body:
{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "invalid",
    "message": "Empty schema specified for the load job. Please specify a schema that describes the data being loaded.",
...

It seems we should check the response before constructing the job.

Metadata

Metadata

Assignees

Labels

api: bigqueryIssues related to the BigQuery API.type: bugError or flaw in code with unintended results or allowing sub-optimal usage patterns.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions