我正在通过流进行插入。在用户界面中,我可以看到以下行数:
有没有办法通过API来实现?当我这样做时:
from google.cloud import bigquery
client = bigquery.Client()
dataset = client.dataset("bqtesting")
table = client.get_table(dataset.table('table_streaming'))
table.num_rows
0
显然,0不是我想要的数字。从API文档中可以看到:
numRows unsigned long [仅输出]此表中数据的行数,不包括流缓冲区中的任何数据。
那么,我的问题是:如何获得表中的确切行数?目前我正在做:
count=[item[0] for item in client.query('SELECT COUNT(*) FROM `bqtesting.table_streaming`').result()][0]
但这仅需5秒钟即可获得计数(我需要非常频繁地执行此查询,以查看是否所有流插入都已“完成”。)
答案 0 :(得分:4)
select count(1)
和select count(*)
等具有0个已扫描和记帐的字节(您可以在运行或空运行后在作业元数据中看到此字节),因此您应该能够经常运行这些字节随你便
如果我正确阅读了文档,则不能保证其中的数字不会为您提供尚未刷新到大查询存储的缓冲区中的行
您还可以使用此处https://cloud.google.com/bigquery/streaming-data-into-bigquery#dataavailability中提到的API,即从streamingBuffer.oldestEntryTime
结果中检查tables.get
字段
答案 1 :(得分:0)
您可以使用__TABLES__
元数据表来获取所需的信息。查询__TABLES__
不收费。
您需要的查询是:
SELECT table_id, row_count, size_bytes
FROM `your-project-name.bqtesting.__TABLES__`
WHERE STARTS_WITH(table_id, "table_streaming")
ORDER BY table_id DESC