2014-04-03 55 views
6

我試圖插入一個特定的timeuuid到卡桑德拉和我管理的一個用的是現在()函數來插入的唯一途徑,因爲我認爲,現在的功能知道數據庫格式是否喜歡它。如何在沒有now()函數的情況下將自定義timeuuid添加到cassandra?

我如何爲這個創造cqlsh命令?

目前我有這樣的:

INSERT INTO my_table (tid) VALUES (now()) 

但是我想能夠有我插入什麼日期爲測試目的,當我調試我的node.js或任何程序接口卡桑德拉100%的控制。

這將是不錯的東西,如:

INSERT INTO my_table (tid) VALUES (12/OCTOBER/2014) 

沒有它崩潰

謝謝!

回答

2

看看minTimeuuidmaxTimeuuid功能。插入他們的結果是一個壞主意,但爲了測試的目的,它可以是好的。

http://cassandra.apache.org/doc/cql3/CQL.html#timeuuidFun

+0

在向cassandra數據庫插入查詢期間,在cqlsh中爲minTimeuuid('2014-10-12')工作。顯然,單雙引號可能會有所作爲(對我來說)。小心這個。 – Pinocchio

2

timeuuid的是一個複雜的格式。有效值描述爲here

timeuuid 

Uses the time in 100 nanosecond intervals since 00:00:00.00 UTC (60 bits), a 
clock sequence number for prevention of duplicates (14 bits), plus the IEEE 801 MAC 
address (48 bits) to generate a unique identifier. For example: 
d2177dd0-eaa2-11de-a572-001b779c76e3 

Thistimeuuid了很好的討論。我不知道是什麼命令這些位出現,但如果是從左至右,你可以Concat的:

時間(第15位= 60位): 00000000-0000-000

序列(下一個3個位數= 12位,將忽略序列的最後2個比特): 0-00

最後2個比特序列+ MAC: 000-000000000000

然後遞增時間序列根據需要爲條目。但使用時間戳可能會更容易。

如果你想這樣做:

INSERT INTO my_table (tid) VALUES ("2014-10-12") 

您需要使用timestamp類型。

+0

對不起,很sn。。 datastax是cassandra doc的好去處。 –

+0

別擔心,你不必道歉。對於我所看到的消息來源,我對這個語法沒有一個明確的解釋,所以我感到非常驚訝,惱火/震驚。但認爲如果我遇到了這個問題,未來可能有其他人會這樣做,幫助未來的人也不會有什麼傷害。不管怎麼說,還是要謝謝你! :) – Pinocchio

+0

我不確定爲什麼它不工作你有想法嗎?,INSERT INTO提交(散列,關鍵幀,tid)VALUES(0x000000001bfdeb0a304b372dd8dda123b3fd1a00,true,「2012-01-01」); – Pinocchio

2

我,你有兩個選擇:

  1. 使用minTimeuuidmaxTimeuuid的一個描述here
  2. 實現節點上Timeuuid值。js通過使用的細節UUIDGen

我想說第一種方法會更容易進行測試。

+0

Hi @AlexPopescu,有沒有這方面的更新文檔? 'minTimeuuid'和'maxTimeuuid'不再接受序列化的日期作爲我能夠告訴的參數。 – flavian

+0

@flavian:不再像Cassandra的版本,什麼cqlsh等等。 –

+0

Cassandra 2.2.0。我在這裏創建了一個完整的規範問題:https://datastax-oss.atlassian.net/projects/JAVA/issues/JAVA-1084?filter=allopenissues – flavian

相關問題