私はテーブルに「60億以上の行を持つkdbで 'T」と言っています。私はこの10億を超える行を持つクエリを実行しています
select from T where i < 10
のようなクエリを実行しようとしたとき、それはwsfull expection
をスローします。大量のデータを持つテーブルでこれを実行できる方法はありますか?
私はテーブルに「60億以上の行を持つkdbで 'T」と言っています。私はこの10億を超える行を持つクエリを実行しています
select from T where i < 10
のようなクエリを実行しようとしたとき、それはwsfull expection
をスローします。大量のデータを持つテーブルでこれを実行できる方法はありますか?
10#T
表現あなたはそれが最初にあなたのいずれかの列と同じ高であるI(ROWNUMBER)< 10のすべての要素を含むビットマップを作る書いたように。それはどこで(それはちょうど10までを含んでいます)、次に各行からそれらを取得します。最後の手順を保存するには、
T[til 10]
ただし、10#T
が短くなります。
ここでパーティションテーブルがあると仮定すると、クエリのwhere句の最初の項目としてパーティション化カラム(日付、intなど)を持たせることは通常有益です。そうでない場合は、前述のように、アイテムリストをメモリに格納します。これにより、RAMの必要量より少ないマシンに対しては、「wsfull」という信号が出力されます。
行インデックスはパーティションごとに0から始まり、テーブル全体の位置を反映していないことに注意してください。あなたの質問に例として挙げたクエリは、の最初の10行をデータベースのテーブルTの各パーティションに返します。
(データベースが日付パーティション化されている場合)あなたの記憶の限界に達することなく、これを行うためには、あなたは以下を実行してみることができます。
raze{10#select from T where date=x}each date
か、あなただけの最初の10行をしたい場合 - 10#select from Tここで、date =最初の日付 – Akash
はい、私はそれを読んでいますが、この特定のクエリを実行するよりも 'wsfullエラーを避けるためにクエリを構成する方法がより重要です –