我正在尝试将一些数据插入到已经存在的bigquery表中。但是我无法将这些数据放入表中。
我尝试了由Google(insert_rows)提供的标准示例,但没有运气。我也提到了这一点:https://github.com/googleapis/google-cloud-python/issues/5539 我也尝试过将这些数据作为tupple列表传递,但是同样存在问题。
from google.cloud import bigquery
import datetime
bigquery_client = bigquery.Client()
dataset_ref = bigquery_client.dataset('my_dataset_id')
table_ref = dataset_ref.table('my_destination_table_id')
table = bigquery_client.get_table(table_ref)
rows_to_insert = [
{u'jobName': 'writetobigquery'},
{u'startDatetime': datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S')},
{u'jobStatus': 'Success'},
{u'logMessage': 'NA'},
]
errors = bigquery_client.insert_rows(table, rows_to_insert)
执行此操作时,没有收到错误,但未将任何内容写入表中。如果有人提出对我有用的建议,那将是非常不错的。谢谢!
答案 0 :(得分:1)
对您的代码进行一些修改后,我可以使它按预期工作。我将您的行从一个只有一个值的字典列表更改为一个字典,其中所有列都在一行中。我还更改了日期时间格式,因为它对BigQuery无效(可以找到有效格式here)。因此,以下代码段应该可以正常运行:
from google.cloud import bigquery
import datetime
bigquery_client = bigquery.Client()
dataset_ref = bigquery_client.dataset('my_dataset_id')
table_ref = dataset_ref.table('my_destination_table_id')
table = bigquery_client.get_table(table_ref)
rows_to_insert = [
{u'jobName': 'writetobigquery',
u'startDatetime': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
u'jobStatus': 'Success',
u'logMessage': 'NA'}
]
errors = bigquery_client.insert_rows(table, rows_to_insert)
print "Errors occurred:", errors
答案 1 :(得分:0)
您的行不是字典列表吗?我假设您的表架构类似于jobName, startDatetime, jobStatus, logMessage
,然后:
rows_to_insert = [
{
u'jobName': 'writetobigquery',
u'startDatetime': datetime.datetime.now().strftime('%Y-%m-%d-%H%M%S'),
u'jobStatus': 'Success',
u'logMessage': 'NA'
}
]
errors = bigquery_client.insert_rows(table, rows_to_insert)