2016-12-20 1 views
0

4つのテーブルがあります。以下のように今私は、4つの列で一つのテーブルにこれらの4つの結果/テーブルを結合したいメモリ割り当てに失敗しました:4つの結果セットを1つのテーブルに結合する方法

|calculated| 
|2.45644534| 
|3.23323567| 
[...] 

:すべてのテーブルは次のように、32768行を持つただ一つの列を持っている何のIDがありません

|calc1|calc2|calc3|calc4| 
[values] 

かユニークな行を識別するための何か他のもの これは私のクエリです:

SELECT A.*, B.*, C.*, D.* 
    FROM 
     (
      SELECT * FROM :REAL_RESULT 
     ) AS A 
    JOIN 
     (
      SELECT * FROM :PHASE_RESULT 
     ) AS B 
    ON 1=1 
    JOIN 
     (
      SELECT * FROM :AMPLITUDE_RESULT 
     ) AS C 
    ON 1=1 [...] 

は今、サーバはこのエラーを投げている:

Error: (dberror) 2048 - column store error: search table error: "TEST"."data::fourier": line 58 col 4 (at pos 1655): [2048] (range 3): column store error: search table error: [9] Memory allocation failed

は、私は今何ができますか?他のオプションはありますか?ありがとう!

+0

IDとして使用する列を追加することから始まります。多くの問題を解消します。 「ちょうどやって!」**今すぐやってみよう!**;) –

+0

@CraigYoungも...大丈夫です。ありがとう.. あなたがいくつかのポイントを獲得したい場合は、これを答えとして追加してください...ちょうどそれ;) – Tobias

+0

:)まあそれは本当にあなたの質問に答えなかった。あなたが途中でナッジしてうれしいです。残念ながら、私は今からログオフしています。そうすることはできません。 –

答えて

0

元のコードで行うことは、効果的に、それぞれが2^15行を含む4つのテーブルのクロスジョインです。結果のサイズには2^60行、かなりの数ペタバイトが含まれます...これがOOMの理由です。私は似たような例を使って、大きなテーブルに参加条件が間違っているときに何が起こるかを同僚に示しました。 それに加えて、SQLは基本に基づいて設定されており、あなたの行には自然順序はありません。

テーブルが列ストアテーブルの場合、内部列$ rowid $を技術的に結合できます。しかし、$ rowid $は正式に文書化されていないので、それを使用することは推奨できません。

清潔な解決策は、Craigによって提案された解決策です。私はおそらくIDENTITY列を使用します。

0

このクロス結合あなたの本来の意図はありませんでしたが、あなたはUNIONを試す可能性がある条件の参加、実際ずに値のリストに参加したい場合:

SELECT COLUMN,0,0,0 from A 
union all 
SELECT 0,COLUMN,0,0 from B 
union all 
SELECT 0,0,COLUMN,0 from C 
union all 
SELECT 0,0,0,COLUMN from D 

出力は、これらのすべてのレコードの合計になりますがテーブル。

関連する問題