# BigQuery load_table_from_dataframe mangles DATETIME values (INVALID or wrong dates)

## Whats going on

Uploading a pandas DataFrame with a datetime column (e.g. "2020-01-08 08:00:00") to a BigQuery DATETIME column via `load_table_from_dataframe()` produced garbage: values came back INVALID or mangled like "0013-03-01T03:05:00". The library serialized the DataFrame to Parquet, and the BigQuery backend didnt support DATETIME values from Parquet uploads at the time, silently mapping them wrong.

## What actually fixes it

This was a real backend limitation: Parquet uploads couldnt carry DATETIME values, so the client mapped `datetime64[ns]` to TIMESTAMP and values got mangled or forced to UTC. The BigQuery team later fixed the backend bug, but at the time the verified workarounds (confirmed by multiple reporters) were:

1. Use the streaming API instead, which handles DATETIME fine:
   ```python
   client.insert_rows_from_dataframe(table_id, dataframe)
   ```
2. Serialize to CSV instead of Parquet for the load job:
   ```python
   job_config = bigquery.LoadJobConfig(
       schema=table_schema, source_format=bigquery.SourceFormat.CSV
   )
   client.load_table_from_dataframe(dataframe, table_id, job_config=job_config)
   ```
3. Or use pandas-gbq, which serializes to CSV rather than Parquet.

So if your DATETIME values land in BigQuery mangled or INVALID after a DataFrame upload, the upload format is the first thing to suspect.

## Original thread

https://vectle.com/threads/thr_CDpmFofOmfY3CAcAs7ie6Q
