Tôi mới dùng cassandra và hector vì vậy tôi đang cố gắng thực thi các truy vấn cql nhưng vấn đề là không phải tất cả các cột đều có kiểu chuỗi như thế nào tôi thực hiện truy vấn "select * from users"?Làm thế nào để sử dụng các truy vấn cql để lấy các kiểu dữ liệu khác nhau ra khỏi cassandra với java client hector
gia đình cột của tôi trông như thế này:
UPDATE COLUMN FAMILY users
WITH comparator = UTF8Type
AND key_validation_class=UTF8Type
AND column_metadata = [
{column_name: full_name, validation_class: UTF8Type}
{column_name: email, validation_class: UTF8Type}
{column_name: state, validation_class: UTF8Type, index_type: KEYS}
{column_name: gender, validation_class: UTF8Type}
{column_name: birth_year, validation_class: LongType, index_type: KEYS}
{column_name: education, validation_class: UTF8Type}
];
tôi sử dụng đoạn mã sau để thực hiện truy vấn:
CqlQuery<String, String, String> cqlQuery = new CqlQuery<String, String, String>(Keyspace,stringSerializer,stringSerializer,stringSerializer);
cqlQuery.setQuery("select * from users");
QueryResult<CqlRows<String, String, String>> result = cqlQuery.execute();
if (result != null && result.get() != null) {
List<Row<String, String, String>> list = result.get().getList();
for (Row row : list) {
System.out.println(".");
List columns = row.getColumnSlice().getColumns();
for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
HColumn column = (HColumn) iterator.next();
System.out.print(column.getName() + ":" + column.getValue()
+ "\t");
}
System.out.println("");
}
}
Nhưng vì cột 'birth_year' với lớp xác nhận lâu tôi có thể' t nhận giá trị. tôi nhận được kết quả sau giả định rằng chỉ có một kỷ lục:
KEY:Carl birth_year: 'strange chars?' full_name:Carl Smith gender:M eduction:electrician state:LA
Nếu tôi thay đổi truy vấn của tôi như thế này:
CqlQuery<String, String, Long> cqlQuery = new CqlQuery<String, String, Long>
TutorialBase.tutorialKeyspace, stringSerializer, stringSerializer, longSerializer);
cqlQuery.setQuery("select birth_year from users");
Thân nó hoạt động.
Vậy làm cách nào tôi có thể thực hiện điều này chỉ với một truy vấn và điều gì sẽ xảy ra nếu tôi có nhiều kiểu dữ liệu hơn như boolean và float trong các hàng của một họ cột?
Hi libjack, cảm ơn phản ứng của bạn. Bạn có nghĩa là chỉ có thể nếu tất cả các cột trong một họ cột có byteBuffer làm lớp xác nhận mặc định? Đó không phải là những gì tôi muốn, bởi vì khi chèn dữ liệu vào cassandra, việc kiểm tra dữ liệu hợp lệ không hoạt động. Nó sẽ có thể chèn một chuỗi trong cột birth_year. Tôi đang thử mã của bạn, nhưng phương thức 'getLong()' không được nhận dạng. – Rubenski
Tôi tìm thấy những gì sai trái: "col.getValue(). GetLong()" Nó phải là "column.getValueBytes(). GetLong()" Câu hỏi trước của tôi được giải quyết. Có thể có nhiều validation_classe trong một họ cột. – Rubenski
Right, getLong() là một phương thức trên ByteBuffer, vì vậy getValue() sẽ chỉ trả về ByteBuffer nếu đó là kiểu được chỉ định cho HColumn: – libjack