簡體   English   中英

Cassandra create table不會保持列順序

[英]Cassandra create table won't keep column order

我正在Cassandra中創建一個列族,我希望列順序與我在create子句中指定的列順序相匹配。

這個

CREATE TABLE cf.mycf (
    timestamp timestamp,
    id text,
    score int,
    type text,
    publisher_id text,
    embed_url text,
    PRIMARY KEY (timestamp, id, score)
) WITH bloom_filter_fp_chance = 0.01
AND comment = ''
AND dclocal_read_repair_chance = 0.1
AND default_time_to_live = 0
AND gc_grace_seconds = 864000
AND max_index_interval = 2048
AND memtable_flush_period_in_ms = 0
AND min_index_interval = 128
AND read_repair_chance = 0.0
AND speculative_retry = '99.0PERCENTILE'
AND caching = {
    'keys' : 'ALL',
    'rows_per_partition' : 'NONE'
}
AND compression = {
    'chunk_length_kb' : 64,
    'crc_check_chance' : 1.0,
    'sstable_compression' : 'LZ4Compressor'
}
AND compaction = {
    'base_time_seconds' : 60,
    'class' : 'DateTieredCompactionStrategy',
    'enabled' : true,
    'max_sstable_age_days' : 365,
    'max_threshold' : 32,
    'min_threshold' : 4,
    'timestamp_resolution' : 'MICROSECONDS',
    'tombstone_compaction_interval' : 86400,
    'tombstone_threshold' : 0.2,
    'unchecked_tombstone_compaction' : false
};

應該創建一個表,如: timestamp ,id ,score , type, id ,embed_url

相反,我得到這個:

timestamp timestamp,
    id text,
    score int,
    embed_url text,
    publisher_id text,
    type text,

我以相同的方式創建了不少表,這從未發生過,所以任何幫助都會受到贊賞。

我把idscore作為關鍵來表明這些保持各自的位置。 而我正在尋找的實際方案只是作為主鍵的時間戳。

看起來cassandra中沒有字段順序這樣的東西。

The others columns are displayed in alphabetical order by Cassandra. 

http://docs.datastax.com/en/cql/3.1/cql/ddl/ddl_compound_keys_c.html

你應該讓怎么想的數據呈現明顯的區別,以及如何有效地呈現給大家。 此外,您不應該依賴字段的序數位置,而只能依賴於它們的名稱。

為了提高效率,並且違背您的意願(您在構建模式時指定了對列的順序),Cassandra需要按特定順序存儲列,為簡單起見,這反映了它是如何(CQL接口或驅動程序)將回饋您的數據。

我建議您深入了解Cassandra 如何了解CQL3如何映射到Cassandra的內部數據結構中存儲數據(包括列名!)。

順便說一句,如果你絕對需要在應用程序級別保持你的訂單(而且懶得指定SELECT中的所有字段而不是使用SELECT * ),你需要自己創建一個抽象接口,比如創建一個有序的“字段名稱”數組(您的訂單):

String myorder[] = { "timestamp", "id", "score", "type", "publisher_id", "embed_url"};

然后使用序數值將其用作循環中的映射。

請記住,在cqlsh中的DESCRIBE中呈現CQL字符串只是迭代元數據的python驅動程序中函數調用 它與C *如何存儲或發送其結果無關。

如果重要,您可以設置訂單。 插入時,您可以顯式定義順序

INSERT INTO keyspace_name.table_name
  ( identifier, column_name, whatever, order)
  VALUES ( value, value ... )

當您執行選擇時,您可以顯式定義順序。

SELECT identifier, whatever, order, column_name FROM keyspace_name.table_name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM