2016-04-26 7 views
1

ヒットとデバイス(たとえば)が2つあります。Verticaプレ結合テーブル付きコピー

some url|Android|Device name 
another url|Android|Device name 
url|iOS|iPhone 
url|Android| 

生データをリアルタイムで満たされていると私はにVerticaにそれを置く必要があります。

CREATE TABLE Hits (
    url VARCHAR(255) NOT NULL, 
    DeviceId INTEGER NOT NULL 
); 

CREATE TABLE Devices (
    DeviceId INTEGER NOT NULL PRIMARY KEY, 
    OS VARCHAR(30) NOT NULL, 
    Device VARCHAR(30), 
); 

ALTER TABLE Hits ADD CONSTRAINT fk_devices FOREIGN KEY(DeviceId) REFERENCES Devices(DeviceId); 

はまた、私はCSV形式で生データを持っています。 COPYを使用して1つのテーブルのすべてのデータをロードするのに問題はありませんが、クエリとストレージを最適化する必要があります。どうすればロードできますか?

+0

すべてのデータを1つのフラットテーブルに入れるという意味では、ディスクスペースの観点から、結合(verticaのようなmppデータベースの結合ではなく)の必要性を避けるため、テーブルはデータが構成形式で保存されるため、オーバーヘッドが高くなることはありません – elirevach

+0

Verticaの構造[examples](https://my.vertica.com/docs/7.2.x/HTML/index.htm#Authoring/GettingStartedGuide /Appendix/Tables/Tables.htm%3FTocPath%3DGetting%2520Started%7CAppendix%253A%2520VMart%2520Example%2520Database%2520Schema%252C%2520Tables%252C%2520and%2520Scripts%7C_____1)は単一の表ではありません。 – komex

答えて

1

この場合、非正規化が最適です。 1つは、列のドメインはかなり小さいです。第二に、データはすでに非正規化されています。あなた自身の多くの問題を解決し、単一のテーブルを作成します。

CREATE TABLE Device_Hits (
    url VARCHAR(255) NOT NULL, 
    OS VARCHAR(30) NOT NULL, 
    Device VARCHAR(30), 
); 

単純なCOPY文を書き、代表的なデータ量を読み込みます。データベースデザイナー(DBD)の段階では、より多くのものか​​ら始める必要があります。

-- You may need LOCAL if you are streaming from a client 
-- This works from the node itself as dbadmin 
COPY Device_Hits (url, OS, Device) 
FROM '/path/to/somefile.csv' DELIMITER '|' DIRECT; 

次に、admintoolsを実行してDBDを実行します。代表的な質問がある場合は、最初にファイルに入れて、DBDにどこに見えるかを伝えることができます。 DBDはデータをソートしてエンコードします。

本当に、これはおそらくRLEエンコーディングの大部分になります。

間違いなく、プレ結合の投影法を複雑にしないでください。これらには一定の制限があり、この状況ではかなり正直なところあなたを購入しません。 Verticaはこれらのタイプの非正規化で優れています。

関連する問題