2013-10-02 22 views
5

bq.py için bir sarıcı yazmak üzereyiz ve 100 k satırdan büyük sonuç kümeleriyle ilgili sorun yaşıyoruz. Geçmişte bu iyi çalışıyor gibi görünüyor (Google BigQuery Incomplete Query Replies on Odd Attempts ile ilgili sorunlar vardı). Belki de doc page'da açıklanan sınırları anlamıyorum? Örneğinbq.py Sayfalara bak Not

: Biz doğrudan API erişmek, bizim sarıcı olarak

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

:

#!/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 

Getirileri (4 biçimlendirme çizgiler vardır unutmayın)

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', []) 

Biz Bu durumda bir jeton almayı bekler, ancak hiçbiri iade edilmez.

cevap

1

Üzgünüm, size geri dönmem biraz zaman aldı.

Sunucu tarafında bulunan bir hatayı tanımlayabildim, bunu Java istemcisinin yanı sıra python istemcisiyle görmeyi bitirdiniz. Önümüzdeki hafta bir düzeltme kararı almayı planlıyoruz. Müşteriniz, bu gerçekleşir gerçekleşmez doğru şekilde davranmaya başlamalıdır.

BTW, Bunu zaten biliyor muydunuz bilmediniz, ancak API'ye python'dan da erişmek için kullanabileceğiniz tamamen bağımsız bir python istemcisi var. Bq.py'nin bir parçası olarak dağıtılan müşteriden sizin için biraz daha uygun olabileceğini düşündüm. Bu sayfada bir bağlantı bulacaksınız: https://developers.google.com/bigquery/client-libraries

+0

Bilgi için teşekkürler - değişikliği bekliyoruz. API istemcilerinin farkındayız ve orijinal olarak özel olarak kullanıyoruz. Ancak, bazılarının alternatifleri dikkate almaya zorlayan API değişikliklerinden dolayı çok sayıda sorunla karşılaştık. bq.py ihtiyaç duyduğumuz neredeyse tüm işlevselliği uygular ve mümkün olduğunda test edilen kodu yeniden kullanmanın büyük bir hayranıyım.Ayrıca, yerleşik kimlik doğrulama akış kodu, :-) ile gelebileceklerinden çok daha yumuşaktır. Lütfen değişiklikler canlı olduğunda lütfen bize bildirin. –

+0

Hey Jacob, Şimdi bir şans verin ve hala sorun yaşıyorsanız bildirin. – Eric

+0

Bu bir arka plan değişikliği miydi yoksa farklı bir şey yapmam gerekecek mi? Yukarıda verdiğim gösterim betiği aynı yanlış sonuçları üretir. Aynı şekilde, kod etrafındaki sarıcımız yine de benzer sorgular için başarısız oluyor. –

1

Gördüğünüz davranışı bq komut satırı ile yeniden üretebilirim. Bu bir hata gibi görünüyor, düzeltmek için neler yapabileceğimi göreceğim.

Sorgulama yaptığınız veriler hakkında dikkat ettiğim bir şey, yalnızca kimlik alanını seçip satırların sayısını 100.000 civarında tutmak oldu. Bu yaklaşık 1 M değerinde veri üretir, bu nedenle sunucu büyük olasılıkla sonuçları pague etmeyecektir. Daha büyük miktarda veri seçmek, sunucunun tüm sonuçları tek bir yanıtla geri getiremeyeceği için sayfalandırılmasını zorlayacaktır. Eğer 100.000 satırlık bir sample.wikipedia öğesi seçtiyseniz, ~ 50M geri alırsınız; bu, bazı sayfalandırma işlemlerinin gerçekleşmesi için yeterli olacaktır.

Python istemcisinden de çok az sonuç geldiğini görüyor musunuz, yoksa samples.wikipedia sorgunuz için hiç bir page_token döndürmediğinize şaşırdınız mı?

+0

Her ikisi de aslında - Sayfalama, ham veri boyutundan ziyade satır boyutuna dayalı olduğu izlenimi altındaydı. Belgeleme, bu konu üzerinde kafa karıştırıcıdır, özellikle de sayfalandırma işlemi başlatıldığında ve maksimum disk belleği sonuç kümesinin ne olduğu. Yine de, hem doğrudan bq.py'de hem de API'yi doğrudan çağıran kodumuzu (bq.py'yi bir sürücü olarak kullanarak) hala çok az satır alıyoruz. –

+0

Bu düzeltme için bir zaman çizelgesi var mı? Mevcut iş akışımız için ciddi bir sınırlama. Diğer istemcileri de etkileyeceğini umduğum bir API sorunu gibi görünüyor. –

+0

Bu sorun Java API istemcisini de etkiliyor mu? Biraz da olsa durmaksızın bazı analizler yapıyoruz ve bazı geçici çözümler arıyoruz. Bu, müşteri kodunda bir değişiklik gerektirecek mi? Bir konektör modülünü üretime sokmaya hazırlanıyoruz ve bağımlılık gereksinimlerinin iyi olduğundan emin olmalıyız. –