0
我是新來CQL &複合鍵(我以前使用CLI) 我期待實現我的舊超級列家庭與複合鍵代替。 總之,我查找模式是:Cassandra CQL3複合鍵返回重複值
blocks[file_id][position][block_id]=size
我有如下因素CQL表複合主鍵:
CREATE TABLE blocks (
file_id text,
start_position bigint,
block_id text,
size bigint,
PRIMARY KEY (file_id, start_position,block_id)
);
我插入這些樣本值:
/*Example insertions*/
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 0, 'testblock1', 500);
INSERT INTO blocks (file_id, start_position, block_id,size) VALUES ('test_schema_file', 500, '2testblock2', 501);
我查詢使用此Astyanax代碼:
OperationResult result = m_keyspace.prepareQuery(m_BlocksTable).getKey(file).execute();
ColumnList<BlockKey> columns = (ColumnList<BlockKey>) result.getResult();
for (Column<BlockKey> column : columns) {
System.out.println(StaticUtils.fieldsToString(column.getName()));
try{
long value=column.getLongValue();
System.out.println(value);
}catch(Exception e){
System.out.println("Can't get size");
}
}
當我迭代結果時,每列得到2個結果。一個包含「大小」,另一個包含「大小」列不存在。
recorder.data.models.BlockKey Object {
m_StartPosition: 0
m_BlockId: testblock1
m_Extra: null
}
Can't get size
recorder.data.models.BlockKey Object {
m_StartPosition: 0
m_BlockId: testblock1
m_Extra: size
}
500
recorder.data.models.BlockKey Object {
m_StartPosition: 500
m_BlockId: 2testblock2
m_Extra: null
}
Can't get size
recorder.data.models.BlockKey Object {
m_StartPosition: 500
m_BlockId: 2testblock2
m_Extra: size
}
501
所以我有兩個問題:
- 理論上我並不需要一個尺寸列,它應該是複合鍵的值:塊了[file_id] [位置] [BLOCK_ID] =大小而不是塊[file_id] [position] [block_id] ['size'] =大小。 。如何在不創建冗餘大小列的情況下將此數據正確插入到CQL3中?
- 爲什麼我沒有'大小'的額外的列,如果我從來沒有插入這樣的行?
感謝您的回答。你知道元數據的性質是什麼嗎? – eshalev