BigQuery更新如何获取更新的行数

时间:2019-11-21 08:25:45

标签: python-3.x google-bigquery google-cloud-functions

我正在使用Google Cloud Functions连接到Google Bigquery数据库并更新一些行。 cloud函数是使用Python 3编写的。

每当我通过该函数运行update dml时,我都需要帮助弄清楚如何获取结果消息或更新/更改的行数。有任何想法吗?

from google.cloud import bigquery

def my_update_function(context,data):

    BQ = bigquery.Client()
    query_job = BQ.query("Update table set etc...")
    rows = query_job.result()
    return (rows)

我知道行总是作为_emptyrowiterator对象返回。我能以任何方式获得结果或结果消息吗?文档说我必须从bigquery作业方法中获取它。但似乎无法弄清楚。

2 个答案:

答案 0 :(得分:1)

我认为您正在搜索QueryJob.num_dml_affected_rows。它包含受update或任何其他DML语句影响的行数。如果您只是将其粘贴到代码中,而不是rows语句中的return,则会得到数字int,或者可以创建类似以下内容的消息:

return("Number of updated rows: " + str(job_query.num_dml_affected_rows))

我希望它会有所帮助:)

答案 1 :(得分:0)

好像bigquery Python DB-API文档中没有提到返回的行。 https://googleapis.dev/python/bigquery/latest/reference.html

我决定通过首先生成SELECT语句来检查UPDATE语句中的WHERE子句是否匹配,从而使用一种use回处理方法。

示例:

from google.cloud.bigquery import dbapi as bq

def my_update_function(context,data):

        try:
            bq_connection = bq.connect()
            bq_cursor = bq_connection.cursor()
            bq_cursor.execute("select * from table where ID = 1")
            results = bq_cursor.fetchone()

            if results is None:
                print("Row not found.")

            else:
                bq_cursor.execute("UPDATE table set name = 'etc' where ID = 1")
                bq_connection.commit()
                bq_connection.close()

        except Exception as e:
            db_error = str(e)