【发布时间】:2017-10-31 16:06:06
【问题描述】:
我正在使用 Python 2.7 和适用于 Python 的 Google Cloud 客户端库 (v0.27.0) 将数据插入 BigQuery 表(使用 table.insert_data())。
我表中的一个字段的类型为“DATE”。
在我的 Python 脚本中,我已将日期数据格式化为“YYYY-MM-DD”,但不幸的是,Google Cloud 库对该字段返回“无效日期:”错误。
我尝试过以多种方式格式化日期字段(即“YYYYMMDD”、时间戳等),但到目前为止还没有成功...
不幸的是,API 文档 (https://googlecloudplatform.github.io/google-cloud-python/latest/) 没有提及 Python 中所需的日期格式/类型/对象。
这是我的代码:
from google.cloud import bigquery
import pandas as pd
import json
from pprint import pprint
from collections import OrderedDict
# Using a pandas dataframe 'df' as input
# Converting date field to YYYY-MM-DD format
df['DATE_VALUE_LOCAL'] = df['DATE_VALUE_LOCAL'].apply(lambda x: x.strftime('%Y-%m-%d'))
# Converting pandas dataframe to json
json_data = df.to_json(orient='records',date_format='iso')
# Instantiates a client
bigquery_client = bigquery.Client(project="xxx")
# The name for the new dataset
dataset_name = 'dataset_name'
table_name = 'table_name'
def stream_data(dataset_name, table_name, json_data):
dataset = bigquery_client.dataset(dataset_name)
table = dataset.table(table_name)
data = json.loads(json_data, object_pairs_hook=OrderedDict)
# Reload the table to get the schema.
table.reload()
errors = table.insert_data(data)
if not errors:
print('Loaded 1 row into {}:{}'.format(dataset_name, table_name))
else:
print('Errors:')
pprint(errors)
stream_data(dataset_name, table_name, json_data)
将我的日期插入 BigQuery DATE 字段所需的 Python 日期格式/类型/对象是什么?
【问题讨论】:
-
这很奇怪。因为它应该可以工作......你使用的是什么版本的python客户端?你也可以分享你的脚本吗?
-
我正在使用 v0.28.0 的 Python 客户端。我已经用代码示例更新了我的问题。谢谢!
-
您可能正在使用 v0.27.0 和 0.28 中的方法
insert_datano longer exists -
啊,21 小时前客户端更新了。你说得对,我用的是 0.27.0。我将重写我的代码以使其在 0.28.0 上运行并检查问题是否会得到解决