2016-10-01 9 views
0

Cassandraは結合をサポートしていないため、非正規化テーブルを作成する必要があることを理解しています。 は私が注文ID与えられた順序内の各項目の項目名を取得する必要があります考えると、私が使用してテーブルを作成します。Cassandra非正規化テーブルにデータを読み込む

CREATE TABLE order (
    order_id int, 
    item_id int, 
    item_name, 
    primary key ((id), item_id) 
); 

私はどこ、order.csvとitem.csvからデータをロードするために2つのCSVファイルを持っていますorder.csvにはorder_idとitem_idが含まれ、item.csvにはitem_idとitem_nameが含まれます。

質問は、私が作成するテーブルにcsvファイルからデータをロードする方法ですか?私は注文ファイルからデータを挿入し、それは正常に動作します。アイテムの挿入を行うと、主キーが見つからないというエラーが表示されます。

どのように私は異なる入力ファイルから非正規化テーブルにデータを挿入できますか?ありがとう。主キーの定義にタイプミスがある

+0

返信いただきありがとうございます。最後に、データベースにインポートする前に2つのcsvファイルをマージするコードを書きました。 –

答えて

0

、それは

CREATE TABLE order (
    order_id int, 
    item_id int, 
    item_name, 
    primary key (order_id, item_id) 
); 

する必要がありますが、データをアップロードするCOPYを使用していますか?

正規化されたスキーマでは、通常、正規化されたスキーマでは、オーダー用のテーブルと顧客用のテーブルがあり、同時に注文と顧客の情報を表示するSQLとの結合を行います。この場合、正規化されていないテーブルでは、同じテーブルに注文と顧客情報がありますが、フィールドはどのようにクエリを使用するかによって異なります。

大まかには、テーブルを作成する前に、まず使用するものを定義する必要があります。

CREATE INDEX idx_item_id ON order (item_id); 

今、あなたは次のように照会することができるはずです::

SELECT * FROM order WHERE item_id = ?; 

は、インデックスは通常、パフォーマンスへの影響を持っているので、あなたができることに注意してくださいあなたのitem_id上のセカンダリインデックスは、トリックを行う必要があります使用

0

それらを使用してデータをインポートし、終了したらデータをドロップします。

詳細については、Cassandra Index Documentationを参照してください。

関連する問題