0

Je voudrais insérer des données expérimentales dans Cassandra où chaque donnée a une précision de 15 décimales. L'ensemble de données de l'échantillon est la suivante:Comment stocker/afficher l'horodatage et les colonnes doubles avec une précision décimale de 15?

+------------------+-------------------+ 
| Sampling_Rate |  Value1  | 
+------------------+-------------------+ 
| 2.48979187011719 | 0.144110783934593 | 
+------------------+-------------------+ 

Je voudrais voir le Sampling_Rate comme un temps Epoch (c.-à-1970-01-01 00: 00: 02,48979187011719 + 0000) et Valeur1 à stocker sa valeur de précision complète.

Pour cela, j'inséré des données avec le décrire le tableau:

CREATE TABLE project_fvag.temp (
    sampling_rate timestamp PRIMARY KEY, 
    value1 double) WITH bloom_filter_fp_chance = 0.01 
    AND caching = {'keys': 'ALL', 'rows_per_partition': 'NONE'} 
    AND comment = '' 
    AND compaction = {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'} 
    AND compression = {'chunk_length_in_kb': '64', 'class': 'org.apache.cassandra.io.compress.LZ4Compressor'} 
    AND crc_check_chance = 1.0 
    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 = '99PERCENTILE'; 

J'ai aussi changé le fichier cqlshrc avec une précision croissante pour les deux flotteurs et double. En outre, changé le DateTimeFormat:

datetimeformat = %Y-%m-%d %H:%M:%S.%.15f%z ;float_precision = 5 ;double_precision = 15 

Inspite de ces changements, je reçois le résultat stocké en seulement 6 décimales à la fois dans l'horodatage et la valeur. Quelle pourrait être une meilleure stratégie pour stocker/voir selon mes attentes?

Répondre

0

Pour la valeur d'échantillonnage: puisque vous l'avez configuré comme horodatage, Cassandra le mémorisera avec une précision de l'ordre de la milliseconde. Une façon serait de le stocker en décimal.

La même chose vaut pour value1. Recréez votre table avec décimal au lieu de double pour value1.

+0

Mais j'ai une exigence stricte pour montrer la valeur de la colonne de taux d'échantillonnage comme ceux-ci "1970-01-01 00: 00: 02.48979187011719 + 0000". Serait-il possible d'utiliser un type défini par l'utilisateur comme . Par exemple, <1970-01-01 00: 00: 02,0.48979187011719> Cependant, mon souci est: i) Je voudrais avoir cette colonne udt comme clé primaire ii) l'utilisateur devrait pouvoir filtrer les requêtes basées sur l'horodatage ou la partie décimale de udt J'ai lu que les types udt de cassandra souffrent des deux problèmes. Corrigez-moi si je me trompe. Je vous remercie. –

+0

Vous pouvez créer votre table comme celui-ci CREATE TABLE test.temp ( timestamp myts, décimal d'échantillonnage, décimal valeur1, PRIMARY KEY (myts, échantillonnage) ) AVEC COMMANDE REGROUPEMENT PAR (échantillonnage ASC) ' – Horia