4

RMySQLを使用してデータテーブルからいくつかの行をフェッチしています(テーブルが大きいため、ここに投稿することはできませんが、基本的に多数の数値が含まれています。合計10列と約12,000行)。実行すると次のエラーが発生しますfetch(con, n=-1)RS-DBI driver warning: (error while fetching rows)サーバーは1713行のみを返します。

フェッチされている列の一部を削除すると、これは正常に機能しているようです。これが何に関係しているのか誰か知っていますか?どこからデバッグを始めればいいのかわからない。これはサーバー側の設定でしょうか?私のRセッションには十分なメモリ(20ギガ)があります。

4

3 に答える 3

2

各列は数値ですか、それとも数値のリストですか? つまり、各列には何バイトありますか?

私は以前にこの問題に遭遇したことがあります.私がヒットしたのは、あまりにも多くのデータをあまりにも速くプルしようとしたためでした. そのような場合、n の値を小さくして複数の呼び出しを行うと、うまくいく場合があることがわかりました。繰り返しになりますが、私が問題を抱えていたデータベースの行は巨大でした

于 2013-02-27T19:34:24.547 に答える
1

私は同じタイプの問題を抱えています:

  1. すべての行を 1 回フェッチします。

    df = dbFetch(res, n = -1)

    => 結果セットの一部のみを返し、それ以上の行のフェッチを停止しました。

  2. ループを使用してチャンクごとにフェッチする:

    while (!dbHasCompleted(res)) {
        チャンク = dbFetch(解像度、n = 1000)
        print(nrow(チャンク))
        df = rbind(df, チャンク)
    }
    

    => しばらくの間いくつかのチャンクを返した後[1] 0、結果セットがすべての行のフェッチを完了していない場合でも、サイズがゼロのチャンクの無限ループ (永久に " " を出力) に陥ります: dbHasCompleted(res) == FALSE.

次に、次の戦略を使用しました。

" " を使用してクエリを実行しselect count(1) from table where ...、結果セットのサイズを取得します。行カウント数 [ row_count = as.integer(dbFetch(res, n = 1)) + 1] に 1 を加算し、この "count + 1" をnパラメーターとして使用して、次のクエリですべての行を一度に取得します。これまでは問題ないように見えましたが、その後、次のフォームについて知りました。

my_df = dbGetQuery(con, my_query)

はるかに優れた方法で、バグはまだ見つかりません。

于 2016-09-05T19:09:47.843 に答える