2017-12-28 3 views
0

Ich versuche, eine Zeile in einer Cassandra Tabelle einzufügen die Abfrage untereine lange oder ein Datum String-Darstellung eines Zeitmarkenwertes Cassandra Erwartete

INSERT INTO battery_time_series_by_producer JSON '{"timestamp":1514413581,"customer":"com.fetchcore-cloud.local","stream":"/sw8/sensor/battery","producer":"freight18","data":{"battery_level":1,"is_charging":true,"timestamp":1514413581}}';

mit und ich erhalte die folgenden Fehler

Expected a long or a datestring representation of a timestamp value, but got an Integer: 1514413581

Der Feldzeitstempel in der Tabelle hat tatsächlich das Timestamp-Format. Aber wie kann ich das auf eine lange gegeben konvertieren, dass dies nur JSON ist

Meine Version von Cassandra ist 3.11.1

+1

Ich denke, dass Cassandra Cql versucht, Json-Objekt zu Closed-Datentyp zu parsen, daher wird der Wert "1514413581" in Int konvertiert. Wenn Sie eine größere Zahl angeben, wird sie als lang geparst. Ein weiterer erwähnenswerter Punkt ist, dass der "Zeitstempel" -Typ eine Anzahl von Millisekunden seit der Standard-Basiszeit darstellt, die als Epoche bekannt ist. Die Werte in Ihrem Beispiel sind für mich sehr klein (z. B. Jahr 1970). Kurz gesagt, es wird entweder eine Zeichenfolge (z. B. "1514413581") in einem JSON-Objekt verwendet oder ein neuer Zeitstempelwert (z. B. 314431312345) – Apolozeus

+0

Um .. Dank für den Kommentar. Ich denke, dass es etwas damit zu tun hat. Nur als Randnotiz. Ich glaube, die Epochenzeit ist die Anzahl von ** Sekunden ** seit 1970. Das würde mein Datum auf ungefähr heute bringen. https://en.wikipedia.org/wiki/Unix_time. Wie sind Sie zu einem so hohen Wert gekommen? – cjds

+1

Es ist nur Konvention, können Sie aus cassandra doc überprüfen https://docs.datastax.com/de/cql/3.3/cql/cql_reference/timestamp_type_r.html?hl=timestamp%2Ctype – Apolozeus

Antwort

1

Cassandra versuchen JSON-Objekt zum nächsten Datentyp möglich, zum Beispiel zu analysieren Der Wert 1514413581 wird in Integer-Typ konvertiert. Wenn Sie eine größere Zahl angeben, wird sie als lang geparst.

Bitte beachten Sie, dass dieser Zeitstempeltyp eine Anzahl von Millisekunden seit der Standardbasiszeit epoch darstellt. Die Werte in Ihrem Beispiel stellen die Uhrzeit im Jahr 1970.

Kurz gesagt, es ist entweder String-Format zu verwenden (beispielsweise „1514413581“) oder die letzten Zeitstempel Wert übergibt in Ihrer cql Aussage (die Langen später automatisch konvertieren). Ich hoffe es hilft.

Verwandte Themen