首页 > 解决方案 > 在 Bigquery 中选择不会检索超过 53000 行的所有数据

问题描述

bigquery 中名为 student_master 的表有 70000 行,我想使用此查询检索行。这样做时我没有发现任何错误,但是,它只检索了 52226 行(意思是,不是全部)。我尝试像这段代码一样在 partition_by 上使用 row_number() ,但仍然没有得到所有数据。我应该怎么办?

我正在使用使用两个 query order by id_student,limit 35000和 make asc(query1), desc(query2) 的想法,但是如果数据增加(比如说 200000 行)它将不起作用。

data= []
sql = ( "SELECT id_student, class,name," +
        "   ROW_NUMBER() OVER (PARTITION BY class ORDER BY class ASC) row_num," +
        "FROM" +
        "   [project_name.dataset.student_master]" +
        "WHERE not class = " + element['class']
        )
query = client.run_sync_query(sql)
query.timeout_ms = 20000
query.run()
for row in query.rows:
    data.append(row)
return data

标签: google-bigquery

解决方案


通过查询公共数据集,我能够收集 200,000 多行,并使用计数器变量进行验证:

query_job = client.query("""
    SELECT ROW_NUMBER() OVER (PARTITION BY token_address ORDER BY token_address ASC) as row_number,token_address
    FROM `bigquery-public-data.ethereum_blockchain.token_transfers`
    WHERE token_address = '0x001575786dfa7b9d9d1324ec308785738f80a951'
    ORDER BY 1
    """)
contador = 0
for row in query_job:
    contador += 1
    print(contador,row)

推荐阅读