2013-10-02 48 views
5

我們正在編寫bq.py的包裝,並且在結果集大於100k行時遇到了一些問題。它似乎在過去這一直工作得很好(我們有與Google BigQuery Incomplete Query Replies on Odd Attempts相關的問題)。也許我不理解在doc page上解釋的限制?bq.py不尋呼結果

例如:

#!/bin/bash 

for i in `seq 99999 100002`; 
do 
    bq query -q --nouse_cache --max_rows 99999999 "SELECT id, FROM [publicdata:samples.wikipedia] LIMIT $i" > $i.txt 
    j=$(cat $i.txt | wc -l) 
    echo "Limit $i Returned $j Rows" 
done 

產量(注意有4行格式):

Limit 99999 Returned 100003 Rows 
Limit 100000 Returned 100004 Rows 
Limit 100001 Returned 100004 Rows 
Limit 100002 Returned 100004 Rows 

在我們的包裝,我們直接訪問API:

while row_count < total_rows: 
    data = client.apiclient.tabledata().list(maxResults=total_rows - row_count, 
               pageToken=page_token, 
               **table_dict).execute() 

    # If there are more results than will fit on a page, 
    # you will recieve a token for the next page 
    page_token = data.get('pageToken', None) 

    # How many rows are there across all pages? 
    total_rows = min(total_rows, int(data['totalRows'])) # Changed to use get(data[rows],0) 
    raw_page = data.get('rows', []) 

我們在這種情況下會期望得到一個令牌,但是沒有返回。

回答

1

對不起,我花了一點時間回到你身邊。

我能夠識別服務器端存在的錯誤,最終你會看到這與Java客戶端以及Python客戶端。我們計劃在未來一週內推出修補程序。一旦發生這種情況,您的客戶應該開始正確行爲。

順便說一句,我不知道你是否已經知道這一點,但有一個完整的獨立Python客戶端,你也可以使用它從python訪問API。我認爲這可能比作爲bq.py一部分發布的客戶端更方便一些。您可以在此頁面上找到它的鏈接: https://developers.google.com/bigquery/client-libraries

+0

感謝您的信息 - 我們期待着這一變化。我們知道API客戶端,並且最初只是使用它。但是,我們遇到了很多問題,其中一些原因是API的變化,迫使我們考慮替代方案。 bq.py實現了我們需要的幾乎所有功能,並且我儘可能地重用了經過測試的代碼。此外,內置的身份驗證流程代碼比我能想到的要流暢得多:-) 請讓我們知道更改何時生效。 –

+0

嘿雅各布, 現在給它一個鏡頭,讓我知道如果你仍然有問題。 – Eric

+0

這是一個後端改變,還是我需要做一些不同的事情?我上面給出的演示腳本生成了相同的錯誤結果。同樣,我們的代碼包裝仍然失敗,類似的查詢。 –

1

我可以重現您在bq命令行中看到的行爲。這看起來像一個錯誤,我會看看我能做些什麼來修復它。

我曾經注意到有關您要查詢的數據的一件事是僅選擇id字段,並將行數限制在100,000左右。這會產生大約1M的數據,因此服務器可能不會對結果進行分頁。選擇更大量的數據將強制服務器進行分頁,因爲它無法在單個響應中返回所有結果。如果你選擇了* 100,000行的samples.wikipedia,你會得到約50M的迴應,這應該足以開始看到一些分頁發生。

您是否看到python客戶端返回的結果太少,或者您驚訝於您的samples.wikipedia查詢沒有返回page_token?

+0

兩者實際上 - 我的印象是基於行大小而不是原始數據大小。文檔在這個問題上相當混亂,特別是當分頁開始時以及最大分頁結果集是什麼時。無論如何,我們仍然直接在bq.py和我們直接調用API的代碼(使用bq.py作爲驅動程序)中獲得太少行。 –

+0

是否有此修復程序的時間表?這是我們當前工作流程的嚴重限制。這似乎是一個API問題,我期望它也會影響其他客戶端。 –

+0

此問題是否也影響Java API客戶端?我們有一些分析報告有些停滯不前,我們正在尋找一些解決方法。這是否需要更改客戶端代碼?我們正準備將連接器模塊投入生產,並且我們需要確保依賴性要求沒有問題。 –