![](/img/trans.png)
[英]BigQuery "Parameterized query job" using the python client library
[英]Difference of query results in BigQuery Python Client Library
我想知道 query() 的返回值和 query().result()s' 之間的區別。
在 BigQuery Python 客戶端庫中,
bigquery_client = bigquery.Client()
myQuery = "SELECT * FROM `mytable`"
## NOTE: This query result has just 1 row.
job = bigquery_client.query(myQuery)
for row in job:
val1 = row
result = job.result()
for row in result:
val2 = row
print(job == result) # False. I know QueryJob object is different to RowIterator object.
print(val1 == val2) # True
為什么 val1 和 val2 等價? 對於非常大的查詢,這些值可以不同嗎?
這是一個長達一年的自我回答。
基本上,我的代碼中的“工作”和“結果”是不同的。
bigquery_client.query() 返回 QueryJob 實例。 (參見https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.Client.html#google.cloud.bigquery.client.Client.query )
但是 QueryJob class 有自己的 _ iter _ 方法並且它返回 iter(self.result()) (參見https://github.com/googleapis/python-bigquery/blob/main/google/cloud/bigquery/job/query .py#L1778 )
所以 'job' 成為 for-in 循環的 result() 的迭代器。
因此,job.= result 但 val1 == val2。
query() 方法用於執行 SQL 查詢。 BigQuery 將所有查詢結果保存到永久或臨時表中。查詢完成后,臨時表最多存在 24 小時,如果我們將結果寫入新表,它將成為永久表。
將查詢結果寫入永久表時,您可以使用包含 result() 方法 i 的 Python 代碼。 query().results() 用於將查詢數據寫入新的永久表。
所以基本上 query() 和 query.results() 給出了相同的 output 但在 query().results() 中提取的數據被存儲到一個新表中,而在 query() 中數據位於一個臨時表中。
根據您的問題 val1==val2 您得到了正確的結果,因為 query() 和 query().results() 獲取的數據相同,但存儲方式不同。
我正在提供與此相關的公共文檔鏈接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.