2016-10-27 1 views
1

だから私は、SQLクエリを作成するPyDrillを使用しています:エラー:ValueErrorを

これは、関連するコードです:これを実行している間

yelp_reviews = drill.query(''' 
    SELECT sum(case when t.attributes.Parking.garage='true' then 1 else 0 end) as garage, 
    sum(case when t.attributes.Parking.street='true' then 1 else 0 end) as street, 
    sum(case when t.attributes.Parking.validated='true' then 1 else 0 end) as validated, 
    sum(case when t.attributes.Parking.valet='true' then 1 else 0 end) as valet, 
    sum(case when t.attributes.Parking.lot='true' then 1 else 0 end) as lot FROM `mongo.274_BI`.`yelp_dataset`t 
    where t.city=? 
''','Las Vegas') 

私は次のエラーを取得する:

ValueError: Timeout value connect was Las Vegas, but it must be an int or float. 

私は

pip install -U requests; 
を使用して要求を更新

しかし、エラーは依然として続きます。助けてください。

答えて

1

drill.query第2引数のタイムアウト値が必要です。あなたは数字ではない文字列 "Las Vegas"を渡しています(つまり、intまたはfloat)。

documentationによると、queryは、2つのパラメータsqltimeoutを受け入れます。 SQLは最初の引数として渡され、タイムアウトはオプションの2番目のパラメータとして渡されます。

もっと徹底的に見てみると、「ラスベガス」をSQLに安全に埋め込むことができます。 PyDrillがこれをサポートしていないようです。解決策は、実際のクエリに「Las Vegas」を追加することです。これは、SQLが信頼できないソースから来ない限り動作します。もしそうなら、私はPyDrillで問題を開くことを推奨します。これは、これがIMOをサポートするべきだからです。