2014-04-03 17 views
6

Próbowałem wstawić konkretny timeuuid do kassandra i jedyny sposób, w jaki udało mi się wstawić jeden był za pomocą funkcji now(), ponieważ zakładam, że funkcja teraz wie, jaki format bazy lubi.Jak wstawić niestandardowe timeuuid do kassandra bez funkcji now()?

Jak utworzyć polecenie cqlsh dla tego?

Obecnie mam to:

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

Ale chciałbym móc mieć 100% kontrolę nad co data wstawić do celów testowych, gdy jestem debugowanie moje node.js lub cokolwiek programu łączenia Cassandrę.

Byłoby miło mieć coś takiego:

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

bez niej upaść

Dzięki!

Odpowiedz

2

Zobacz funkcje minTimeuuid i maxTimeuuid. Wprowadzanie ich wyniku jest kiepskim pomysłem, ale w celach testowych może być OK.

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

+0

wykonując minTimeuuid ("2014-10-12") pracował dla mnie w cqlsh podczas kwerendy wstawić do bazy danych Kasandra. Wygląda na to, że pojedyncze lub podwójne cytaty mogą mieć znaczenie (dla mnie). Ostrożnie z tym. – Pinocchio

2

timeuuidy to złożony format. Prawidłowe wartości są opisane 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 

This ma dobrą dyskusję timeuuid. Nie wiem co zamówić bity te pojawiają się, ale jeśli to jest od lewej do prawej można Concat:

Czas (pierwsze 15 cyfr = 60 bity): 00000000-0000-000

sekwencja (następne 3 cyfry = 12 bity, ignoruje ostatnie 2 bitów sekwencji): 0-00

ostatnia sekwencja 2 bity + MAC: 000-000000000000

Następnie zwiększ czas Time lub Sequence zgodnie z wymaganiami dotyczącymi wpisów. Ale prawdopodobnie byłoby o wiele łatwiej pracować z sygnaturami czasowymi.

Jeśli chcesz to zrobić:

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

trzeba użyć typu timestamp.

+0

Przykro mi być snarkiem. datastax to świetne miejsce na cassandra doc. –

+0

nie martw się, nie musisz przepraszać. Byłem tak zaskoczony/zirytowany/zszokowany, że źródło, na które patrzyłem, nie miało jasnego wyjaśnienia składni. Ale uznałem, że gdybym miał problem, prawdopodobnie ktoś inny miałby go w przyszłości i nie zaszkodzi pomóc przyszłym ludziom. Dzięki i tak! :) – Pinocchio

+0

Nie jestem pewien, dlaczego nie działa, czy masz pomysł ?, INSERT INTO commits (hash, keyframe, tid) VALUES (0x000000001bfdeb0a304b372dd8dda123b3fd1a00, true, "2012-01-01"); – Pinocchio

2

I masz 2 opcje:

  1. użyć jednego z minTimeuuid lub maxTimeuuid opisane here
  2. Wdrożenie wartość Timeuuid w węźle.js przy użyciu szczegółów w UUIDGen

Powiedziałbym, że pierwsze podejście byłoby łatwiejsze do celów testowych.

+0

Hi @AlexPopescu, Czy istnieje zaktualizowana dokumentacja dla tego? 'minTimeuuid' i' maxTimeuuid' nie akceptują już serializowanych dat jako argumentów z tego, co jestem w stanie powiedzieć. – flavian

+0

@ flawian: już nie jak w wersji Cassandra, co cqlsh itp. Itp. –

+0

Cassandra 2.2.0. Stworzyłem tutaj pełny problem ze specyfikacją: https://datastax-oss.atlassian.net/projects/JAVA/issues/JAVA-1084?filter=allopenissues – flavian