我尝试将熊猫数据帧中的数据插入GBQ表,发现“无效数据错误”。GBQ表有以下模式:
dataFrame有这样的结构:
和dtype:
最初action_date
列的格式类似于2022-02-25T20:31:02
,但我已经将其转换为2022-02-25
all_orders['action_time'] = pd.to_datetime(df['action_time'])
all_orders['action_date'] = all_orders['action_time'].dt.date
因此,当我尝试向GBQ插入一些行时,我收到一个错误:
'errors': [{'reason': 'invalid', 'location': 'action_date', 'debugInfo': '', 'message': "Invalid date: '1644019200000'"}]
看起来GBQ将列中action_date日期视为unix时间戳。如何修复它?
写入前无需解析2022-02-25T20:31:02
格式,使用以下内容并写入表。
dataframe['action_time'] = pandas.to_datetime(dataframe['action_time'], infer_datetime_format=True)
这是一个关于将日期写入BigQuery的完整功能示例:
import datetime
from google.cloud import bigquery
import pandas
import pytz
client = bigquery.Client()
table_id = "<project>.<ds>.<table>"
records = [
{
"date": '2022-12-25T20:31:02',
"data": "Final Teste",
},
]
dataframe = pandas.DataFrame(
records,
columns=[
"date",
"data",
],
)
dataframe['date'] = pandas.to_datetime(dataframe['date'], infer_datetime_format=True)
job_config = bigquery.LoadJobConfig(
schema=[
bigquery.SchemaField("date", bigquery.enums.SqlTypeNames.DATE),
bigquery.SchemaField("data", bigquery.enums.SqlTypeNames.STRING),
],)
job = client.load_table_from_dataframe(dataframe, table_id)
job.result()
table = client.get_table(table_id) # Make an API request.
print("Loaded {} rows and {} columns to {}".format(table.num_rows, len(table.schema), table_id))