[英]Error with inserting data into BigQuery table
我嘗試將 pandas dataframe 中的數據插入 GBQ 表,但出現“無效數據錯誤”。 GBQ 表具有以下架構:
字段名稱 | 類型 | 模式 |
---|---|---|
ID | 細繩 | 必需的 |
order_id | 細繩 | 必需的 |
行動日期 | 日期 | 可空 |
產品名稱 | 細繩 | 可空 |
order_sum | 漂浮 | 可空 |
網站編號 | 細繩 | 可空 |
網站名稱 | 細繩 | 可空 |
網站管理員_id | 細繩 | 可空 |
站長 | 細繩 | 可空 |
而 dataFrame 具有這樣的結構:
ID | order_id | 行動日期 | 產品名稱 | order_sum | 網站編號 | 網站名稱 | 網站管理員_id | 網站管理員姓名 |
---|---|---|---|---|---|---|---|---|
830339411 | 970561 | 2022-02-25 | 產品_1 | 1000.0 | 123 | 站點 1 | 456 | 站長 1 |
830339412 | 970562 | 2022-02-25 | 產品_2 | 1500.0 | 120 | 站點 2 | 456 | 站長 1 |
和數據類型:
柱子 | 類型 |
---|---|
ID | object |
order_id | object |
行動日期 | object |
產品名稱 | object |
order_sum | float64 |
網站編號 | object |
網站名稱 | object |
網站管理員_id | object |
站長 | object |
最初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))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.