2017-11-06 5 views
0

私は約4,000のカンドンドラの質問を処理する必要があります。 ResultSetをジェネレータに変換して、メモリのフットプリントを低く抑えます。ジェネレータの各行の中で、私は約50のいくつかのフィールドにのみ関心があります。DataStax python cassandra-driverを使用して行の値をフィルタリングすることは可能ですか?

私はCQLの値フィールドに直接フィルタをかけることはできませんが、DataStax Python Cassandraドライバには何かが組み込まれていますか?またはそれは私が

def make_gen(response): 
    for row in response: 
     yield row.value.field1, row.value.filed2 

すなわち発電機を構築するとき、私は、現時点では、直接クエリを発行していますが、同時クエリと準備された文で、後にベースのアプローチをモデル化するために移動するだけでこれを行うために、より理にかなって。要求を発行しているコードは非常に基本的です。

sess = connect_cas(env) 
for user in users: 
    q = 'select * from table ' + \ 
     'where key1 = {} and '.format(key_1) + \ 
     'key2 = {} and '.format(key_2) + \ 
     'sample_time > {} '.format(t1) + \ 
     'sample_time < {} '.format(t2) 
    resp_gen = make_gen(sess.execute(q)) # just a yield json.loads(Row.value) 
    for resp in resp_gen: 
     if field in resp: 
      // process data from this field 

私はこの「フィールド」が存在する行のみを気にします。私はこの条件が真であるときにのみデータを生成するように発電機を更新しましたが、これをより効率的に行うDataStaxドライバに何かが組み込まれていれば、4,000のクエリで節約額が加算されます。

+0

リクエストしているコードを表示してください - あなたは 'Model'ベースのアプローチを使用していますか?または直接クエリですか? –

答えて

0

field1またはfield2が特定の値に設定されている行だけを処理していることを示していますか?

これは正確にはこの目的のために作成されていませんが、カスタムrow_factoryを使用して、このフィルタリングをより低いレベルで実現し、名前付きタプル、タプル、および追加ジェネレータの間の変換を避けることができます。

関連する問題