2016-07-18 4 views
0

テーブルのスーパープロジェクションを変更する必要があります(間違った順序とセグメンテーション)。 どうすればそれをやろうとしますか?VERTICA:投影を変更する

  1. 名前を変更し、既存の予測:

    ALTER PROJECTION schema.table_b0 RENAME TO table_b0_2; 
    ALTER PROJECTION schema.table_b1 RENAME TO table_b1_2; 
    
  2. 作成新しい予測:

    CREATE PROJECTION schema.table 
    as select * from schema.table 
    order by ... 
    segmented by hash (...) all nodes; 
    
  3. リフレッシュ:

    select refresh('schema.table'); 
    
  4. ドロップ古い:

    DROP PROJECTION table_b0_2; 
    DROP PROJECTION table_b1_2; 
    

私が作成テーブルを持っている場合、私は(通常接尾辞 "_b0" と "_b1" との二つの突起を得るが、

  1. それは私が欲しいほとんど何だと思うが...右)、接尾辞 "_b0"と "_super"の2つの予測があります。どうして?

  2. ステートメントにcascadeパラメータなしのテーブルを削除できません。だから、私はちょうど分離されたオブジェクトとして私の投影を得る。私はそれを修正することができますか?(開始時に右のcreate tableステートメントで作成されたかのように投影を作成する)

答えて

1
  1. それは名前だけです。デフォルトのスーパープロジェクションを作成するときは、_superと名付けます。 (私はこの命名規則は新しいと思う)。デフォルトの投影法は最適ではなく、DBDを使用して投影法を置き換えることが望ましいでしょう。私はあなたがすでにb0対b1とksafetyを知っていると仮定しています。

  2. デフォルトプロジェクトは、明示的に作成しなかったオブジェクトです。これらは、projectionsビューを見ることによって、デフォルトの投影であることがわかります。彼らはDELAYED CREATIONと言うでしょう。明示的に作成していないので、Verticaはそれらをテーブルにドロップできます。ただし、手動でプロジェクションを作成する場合やDBDを使用する場合は、最初にプロジェクションをドロップするか、cascadeを使用する必要があります。

メモのカップル。まず、作成プロジェクションはテーブル名ではなく投影名にする必要があります。同じ名前のオブジェクトがすでに存在する場合はエラーが発生します。第二に、古い投影を削除する前に、古代の歴史マーカーをselect make_ahm_now();で移動する必要があるかもしれません。

これが役に立ちます。

+0

こんにちは!あなたの答えをありがとう!最初に、DBDとは何ですか?)明示的な作成について - 'create table'文(' create_type = "CREATE TABLE WITH PROJ CLAUSE" ')を使用して投影を作成すると、' cascade'なしでテーブルを削除できます。 – Vikora

+0

@Vikora DBDはデータベースデザイナーです。 2つ目の導入は...あなたの表に代表的なデータをロードし、予想されるクエリをDBDに送り、最適化された予測を作成します。私はいつもDBDから始めることをお勧めし、必要なときにのみカスタマイズします。 – woot

+0

@Vikoraの 'CREATE TABLE ...について「...を含むように」という言葉は、元のテーブルと同じように動作します。元のテーブルにカスタムまたはデザイナー予測がある場合、それらの依存関係を考慮して、 'CASCADE'が必要になります。 – woot

関連する問題