2017-02-15 6 views
0

私はテーブルに「60億以上の行を持つkdbで 'T」と言っています。私はこの10億を超える行を持つクエリを実行しています

select from T where i < 10 

のようなクエリを実行しようとしたとき、それはwsfull expectionをスローします。大量のデータを持つテーブルでこれを実行できる方法はありますか?

答えて

3
10#T 

表現あなたはそれが最初にあなたのいずれかの列と同じ高であるI(ROWNUMBER)< 10のすべての要素を含むビットマップを作る書いたように。それはどこで(それはちょうど10までを含んでいます)、次に各行からそれらを取得します。最後の手順を保存するには、

T[til 10] 

ただし、10#Tが短くなります。

1

ここでパーティションテーブルがあると仮定すると、クエリのwhere句の最初の項目としてパーティション化カラム(日付、intなど)を持たせることは通常有益です。そうでない場合は、前述のように、アイテムリストをメモリに格納します。これにより、RAMの必要量より少ないマシンに対しては、「wsfull」という信号が出力されます。

行インデックスはパーティションごとに0から始まり、テーブル全体の位置を反映していないことに注意してください。あなたの質問に例として挙げたクエリは、の最初の10行をデータベースのテーブルTの各パーティションに返します。

(データベースが日付パーティション化されている場合)あなたの記憶の限界に達することなく、これを行うためには、あなたは以下を実行してみることができます。

raze{10#select from T where date=x}each date

+0

か、あなただけの最初の10行をしたい場合 - 10#select from Tここで、date =最初の日付 – Akash

+0

はい、私はそれを読んでいますが、この特定のクエリを実行するよりも 'wsfullエラーを避けるためにクエリを構成する方法がより重要です –

関連する問題