2013-04-15 57 views
14

tôi đang cố gắng để tạo ra một Bảng Cột WIDE, 20.000 cộtCHỌN Giá trị cụ thể từ bản đồ

Ban đầu tôi đã nghĩ rằng mình sẽ sử dụng:

CREATE TABLE details (
    key TEXT, 
    detail map<TEXT, TEXT> 
    PRIMARY KEY (KEY) 
); 

Chèn vào bảng này hoạt động tốt

UPDATE details SET detail = detail + { 'col1': '12'} where key='123' ; 
UPDATE details SET detail = detail + { 'col20000': 'ABCD'} where key='123' ; 

Tuy nhiên, tôi muốn đọc một chi tiết riêng lẻ:

select detail[col1] where key='123' 
.210

khi thực hiện truy vấn này tôi nhận được lỗi sau:

no viable alternative at input '[' 

Sẽ làm việc này, hay tôi cần một cách tiếp cận khác nhau?

Trả lời

6

Về cơ bản chức năng này chưa được hỗ trợ bởi cassandra.

Xem này cql3 collections

12

Bộ sưu tập là nhóm nhỏ của dữ liệu mà bạn lấy tất cả cùng một lúc.

Nếu bạn muốn truy cập các bộ ở một mức độ tốt hơn, và vẫn có thể yêu cầu "tất cả các cặp dữ liệu cho một chìa khóa đưa ra là gì", bạn nên sử dụng một bảng như thế này:

CREATE TABLE details (
    key TEXT, 
    detail_key text, 
    detail_value text, 
    PRIMARY KEY (key, detail_key) 
); 

Điều này sẽ cho phép SELECT * FROM details WHERE key = ? cũng như SELECT * FROM detail WHERE key = ? AND detail_key = ?.

+0

Cảm ơn, đó là cách tiếp cận tôi đã thực hiện. – e90jimmy

+0

Vẫn không nhìn thấy nó 3.9, tự hỏi lý do là gì, không thể tìm thấy nó. AFAIK, chúng được lưu trữ dưới dạng cột. "Không thể đọc một phần cột thu thập trong CQL. Cách duy nhất để lấy dữ liệu từ bộ sưu tập là đọc toàn bộ bộ sưu tập; vì lý do này, việc lưu trữ các bộ dữ liệu lớn, không bị chặn trong cột thu thập" https://github.com/apache/cassandra/blob/cassandra-3.6/CHANGES.txt – kisna

Các vấn đề liên quan