无法将数据插入现有的BigQuery表?

时间:2019-08-26 13:33:51

标签: python-2.7 google-cloud-platform insert google-bigquery try-catch

我正在尝试将一些数据插入到已经存在的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)

执行此操作时,没有收到错误,但未将任何内容写入表中。如果有人提出对我有用的建议,那将是非常不错的。谢谢!

2 个答案:

答案 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)