5

MySQL サーバーで大量の行を処理するスクリプトでは、 と を使用dbSendQueryfetchて、結果のフェッチと処理を抑制します。

私のfetchコマンドが結果セットで利用可能な (または残された) 行数を正確に取得すると、フェッチする行が 0 行のままになり、dbHasCompleted返さFALSEれると予想していたのにTRUE.

query <- "select record_id, name 
          from big_table left join another_table using (record_id) 
          limit 500"

resultset <- dbSendQuery(con, query)   # con: DB connection

while(!dbHasCompleted(resultset)) {
  input <- fetch(resultset, n = 500)
  print(paste("Rows fetched:", nrow(input)))
  # process input ...
}

このループが 1 回実行されることを期待していましたが、処理後に余分な実行があり、print再度呼び出されます。

Rows fetched: 500
...
Rows fetched: 0

明らかに、dbHasCompleted(resultset)使用可能な行の正確な数がフェッチされる場合は false です (n = 1000、2000、3000 で同じ動作が観察されます)。このスクリプトで n = 501 の場合、2 番目のループはありません。

これは予想されることですか?私は何か間違ったことをしていますか?

4

0 に答える 0