Starając się odpowiedzieć na Twoje pytania, zrobiłem trochę kopać na tym.
- Czy Cassandra przechwytuje mikrosekundy z typem danych timestamp?
Mikrosekundy nie, milisekundy tak. Jeśli utworzyć tabelę, wstawić wiersz, i starają się go zapytać o czas ściętego, to nie działa:
[email protected]:stackoverflow> INSERT INTO data (datetime, id, type, data)
VALUES ('2015-02-16T18:00:03.234+00:00','B26354','Blade Runner','Deckard- Filed and monitored.');
[email protected]:stackoverflow> SELECT * FROM data
WHERE id='B26354' AND type='Blade Runner' AND datetime='2015-02-16 12:00:03-0600';
id | type | datetime | data
----+------+----------+------
(0 rows)
Ale kiedy kwerendy dla tych samych id
i type
wartości, określając milisekund:
[email protected]:stackoverflow> SELECT * FROM data
WHERE id='B26354' AND type='Blade Runner' AND datetime='2015-02-16 12:00:03.234-0600';
id | type | datetime | data
--------+--------------+--------------------------+-------------------------------
B26354 | Blade Runner | 2015-02-16 12:00:03-0600 | Deckard- Filed and monitored.
(1 rows)
Więc milisekundy są zdecydowanie tam. Utworzono bilet JIRA dla tego problemu (CASSANDRA-5870), ale został rozwiązany jako "Nie naprawi".
- Jak mogę to sprawdzić za pomocą cqlsh, aby zweryfikować?
Jednym z możliwych sposobów, aby faktycznie sprawdzić, milisekundy są rzeczywiście tam jest gniazdo funkcja timestampAsBlob()
wewnątrz blobAsBigint()
, tak:
[email protected]:stackoverflow> SELECT id, type, blobAsBigint(timestampAsBlob(datetime)),
data FROM data;
id | type | blobAsBigint(timestampAsBlob(datetime)) | data
--------+--------------+-----------------------------------------+-------------------------------
B26354 | Blade Runner | 1424109603234 | Deckard- Filed and monitored.
(1 rows)
Chociaż nie jest optymalna, tutaj można wyraźnie zobaczyć milisekundę wartość "234" na samym końcu. Staje się to jeszcze bardziej oczywiste, jeśli dodać do tego samego wiersza datownika, ale bez milisekund:
[email protected]:stackoverflow> INSERT INTO data (id, type, datetime, data)
VALUES ('B25881','Blade Runner','2015-02-16T18:00:03+00:00','Holden- Fine as long as nobody unplugs him.');
[email protected]:stackoverflow> SELECT id, type, blobAsBigint(timestampAsBlob(datetime)),
... data FROM data;
id | type | blobAsBigint(timestampAsBlob(datetime)) | data
--------+--------------+-----------------------------------------+---------------------------------------------
B25881 | Blade Runner | 1424109603000 | Holden- Fine as long as nobody unplugs him.
B26354 | Blade Runner | 1424109603234 | Deckard- Filed and monitored.
(2 rows)
Czy możesz edytować swój post z definicją tabeli, zapytaniem 'INSERT' i' SELECT'? Nie wiem na pewno, dopóki nie zobaczę tych informacji, ale Twój problem może być związany z tym: http://stackoverflow.com/questions/26237940/cassandra-cql-select-query-not-returning-records- which- have-timestamp-as-cluster/ – Aaron
Właśnie zaktualizowałem mój post, gdy pytałeś. Daj mi znać, jeśli nie jest to wystarczająco jasne. Dziękuję Ci. – WillZ