Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Time Series France #10 - StuteoDB

Time Series France #10 - StuteoDB

Présentation de StuteoDB par Habib Chtourou, CTO et co-fondateur de Stuteo dans le cadre de la 10ème édition du meetup Time Series France.

TimeSeriesFr

March 30, 2021
Tweet

More Decks by TimeSeriesFr

Other Decks in Programming

Transcript

  1. www.stuteo.com All rights reserved © 2021, Stuteo StuteoDb Gestion Optimale

    des Séries Temporelles 30/03/2021 Habib Chtourou CTO Stuteo Meetup Time Series France
  2. All rights reserved © 2021, Stuteo Introduction - Séries temporelles

    1 2 Agenda StuteoDb - Concept et architecture 2 Container - Modèle de données 3 Context - Espace de travail 4 TSQL - Traitement et analyse 5
  3. All rights reserved © 2021, Stuteo 1 Introduction – Définitions

    des séries temporelles 3 ➢ Fonction : série continue définie par une Fréquence. ➢ Métrique : série régulière définie par une Périodicité. ➢ Événements : série irrégulière définie par la Granularité des dates. Types Caractéristiques ➢ Une série temporelle a une Fréquence propre. ➢ Une série temporelle est définie sur un Intervalle de dates. ➢ Une série temporelle a, généralement, un opérateur de Down-Sampling. ➢ Une série temporelle peut avoir des données Manquantes (Missing Data). ➢ Les données d’une série sont définies avec une Unité de mesure. ➢ Une série temporelle peut être Ajustable ou non.
  4. All rights reserved © 2021, Stuteo 4 Volume Vitesse Variété

    Valorisation Problématique Big Data : 175 Zettabyte en 2025 selon IDC Collecter, transformer et analyser les données en temps réel Usage des séries temporelles dans tous les secteurs économiques Analyser et prédire avec des algorithmes de ML, DL et IA 1 Introduction – Challenges DevOps IOT Industrie & Énergie Finance Médical Transport
  5. All rights reserved © 2021, Stuteo 5 2 StuteoDb –

    Objectifs & Concept « Taking the Algorithm to the Data » Architecture Modèle de données Fonctionnalités Traitements et analyse ➢ Solution basée sur Apache Cassandra. ➢ Gestion d’un très grand volume de données. ➢ Haute performance pour la gestion du temps réel. ➢ Déploiement facile pour les montées en charge. ➢ Meilleur gestion des périodicités et des granularités des dates. ➢ Agrégation temporelle (Down-sampling) et distribution automatique. ➢ Traitement natif des données manquantes. ➢ Gestion native des unités de mesures. ➢ Compact et dédié aux séries temporelles régulières et irrégulières. ➢ Modèle unique pour les données historiques et temps réel. ➢ Durée de rétention illimitée avec une grande granularité des données. ➢ Optimal pour les calculs vectoriels et itératifs. ➢ Langage SQL adapté aux traitements des séries temporelles. ➢ Traitement natif des séries régulières et irrégulières. ➢ Agrégations multidimensionnelles. ➢ Librairies de fonctions spécifiques aux séries temporelles.
  6. All rights reserved © 2021, Stuteo 6 Data Center 1

    Admin Process Data Center 2 Data Center 3 Data Center 6 Data Center 4 Data Center 5 Transformer Services Drivers ➢ Système distribué et décentralisé. ➢ Modèle de données dynamique. ➢ Évolutivité élastique. ➢ Grande disponibilité et Tolérance aux pannes. ➢ Réplication automatique. ➢ Très haute performance (lecture / écriture). ➢ Niveau de consistance configurable. ➢ Gestion des accès et des permissions. Analyser StuteoDb StuteoDb StuteoDb 2 StuteoDb – Architecture
  7. All rights reserved © 2021, Stuteo 7 Type Table ID

    Date TS1 TS2 TS3 Id1 T0 V1,0 V2,0 V3,0 …. …. …. …. …. RDBMS Id1 Tn V1,n V2,n V3,n Id2 T0 V1,0 V2,0 V3,0 …. …. …. …. …. Id2 Tn V1,n V2,n V3,n Informix ID TS1 TS2 TS3 Id1 (T0 ,V1,0 ),(T1 ,V1,1 ),….,(Tn ,V1,n ) (T0 ,V2,0 ),(T1 ,V2,1 ),….,(Tn ,V2,n ) (T0 ,V3,0 ),(T1 ,V3,1 ),….,(Tn ,V3,n ) NoSql ID TS1:T0 … TS1:Tn TS2:T0 … TS2:Tn TS3:T0 … TS3:Tn Id1 V1,0 … V1,n V2,0 … V2,n V3,0 … V3,n StuteoDb ID TS Column Id1 (Metadata, { TS1:(Unit1 , [V1,0 ,V1,1 ,….,V1,n ]), TS2:(Unit2 , [V2,0 ,V2,1 ,….,V2,n ]), TS3:(Unit3 , [V3,0 ,V3,1 ,….,V3,n ])}) ➢ Stockage sous la forme d’une structure de tableaux. ➢ Stockage optimal et compact des séries temporelles régulières et irrégulières. ➢ Possibilité d’ajuster les données stockées de la série temporelle. ➢ Modèle de données adapté aux algorithmes de compression et de cryptage. ➢ Très efficace pour les calculs vectoriels (SIMD) et les traitements parallèles. 3 Modèle de données – Introduction
  8. All rights reserved © 2021, Stuteo CREATE CONTAINER containerName (

    FieldName1 TSERIE <data_type1 , observed1 , basis1 , unit_type1 >, … FieldNamen TSERIE <data_typen , observedn , basisn , unit_typen >, FieldNamen+1 CSERIE <data_typen+1 , unit_typen+1 >, … FieldNamem CSERIE <data_typem , unit_typem > FieldNamem+1 SCALAR <data_typem+1 , unit_typem+1 >, … FieldNamep SCALAR <data_typep , unit_typep > ) * Les types de conteneurs sont enregistrés dans une table système de StuteoDb, ils peuvent être modifiés ou effacés. 8 ➢ Field Type : TSERIE (série temporelle indexée par des dates), CSERIE (série indexée par des entiers), SCALAR (attribut). ➢ Data Type : Type d’élément de la série ou du scalaire BOOLEAN, INT, LONG, FLOAT, DOUBLE, BLOB, TEXT, HDATE(DAILY) , HDATE(SECONDLY) … ➢ Observed : Operateur d’agrégation temporelle FIRST, LAST, HIGH, LOW, SUMMED, MEDIAN, MEAN, STDDEV, VARIANCE … ➢ Basis : Base de l’axe temps (Time scale) AUTO, BUSINESS, DAILY, NONE ➢ Unit Type : Type de l’unité NONE, OID, UUID, CODE, SYMBOL Clauses pour la création d’un conteneur : Création d’un nouveau type de conteneur de données avec la commande CREATE CONTAINER : CREATE CONTAINER QuoteContainer ( Open TSERIE <double, FIRST, BUSINESS, CODE>, High TSERIE <double, HIGH, BUSINESS, CODE>, Low TSERIE <double, LOW, BUSINESS, CODE>, Close TSERIE <double, LAST, BUSINESS, CODE>, Volume TSERIE <bigint, SUMMED, BUSINESS, CODE>, FirstDate SCALAR <HDATE<BUSINESS>>, Exchange SCALAR <text> ) CREATE CONTAINER TradeContainer ( AskPrice TSERIE <float, LAST, BUSINESS, CODE>, AskSize TSERIE <int, SUMMED, BUSINESS>, BidPrice TSERIE <float, LAST, BUSINESS, CODE>, BidSize TSERIE <int, SUMMED, BUSINESS>, TradePrice TSERIE <float, LAST, BUSINESS, CODE>, TradeSize TSERIE <int, SUMMED, BUSINESS>, Type SCALAR <text> ) Exemple pour le stockage des données de cotation d’une action boursière Exemple pour le stockage des données des transactions d’une action boursière 3 Modèle de données – Container type
  9. All rights reserved © 2021, Stuteo 9 CREATE TABLE tableName

    ( entityId1 id_type1 , …. entityIdm id_typem , tserName1 TIMESERIES <containerName1 , frequency1 >, …. tserNamen TIMESERIES <TSERIE <datatypen , observedn , basisn , unit_typen >, frequencyn >, cserName1 CASESERIES <datatype1 , unittype1 >, …. cserNamep CASESERIES < datatypep , unittypep >, PRIMARY KEY ((entityId1 ,…, entityIdk ), (entityIdk+1 ,…, entityIdm )) ) Création d’une nouvelle table historique avec la commande CREATE TABLE : Timeseries : Défini le type d’une colonne d’une série temporelle Caseseries : Défini le type d’une colonne d’une série indexée par des entiers Frequency : Périodicité, ou Granularité des dates, de la série temporelle DAILY, BUSINESS, WEEKLY(FRI), TENDAY, MONTHLY, QUARTERLY(NOV), YEARLY(JUL), MINUTELY(n), SECONDLY(n), MILLISECOND(n), DayPerPeriod(n), PeriodPerDay(n), …, MonthPerPeriod(n, end), PeriodPerMonth(n), YearPerPeriod(n), PeriodPerYear(n) … Clauses pour la création d’une table : CREATE TABLE stockQuotes ( Ticker TEXT, quoteData TIMESERIES <QuoteContainer, BUSINESS>, marketCap TIMESERIES <TSERIE<double, LAST, BUSINESS, CODE>, BUSINESS>, Dividends TIMESERIES <TSERIE<float, SUMMED, BUSINESS, CODE>, BUSINESS>, Splits TIMESERIES <TSERIE<float, LAST, BUSINESS, NONE>, BUSINESS>, PRIMARY KEY ( Ticker ) ) Série temporelle régulière de la valeur boursière Série temporelle irrégulière des dividendes Série temporelle irrégulière des OST Exemple de table pour le stockage des données financières des sociétés cotées en bourse : 3 Modèle de données – Table de données
  10. All rights reserved © 2021, Stuteo 10 3 Modèle de

    données – Cas d’usages CREATE CONTAINER MeteoContainer ( Temperature TSERIE <float, MEAN, DAILY, SYMBOL>, Pression TSERIE <float, MEAN, DAILY, CODE>, Precipitations TSERIE <float, SUMMED, DAILY, CODE>, Humidite TSERIE <float, HIGH, DAILY, CODE>, VitesseVent TSERIE <float, HIGH, DAILY, SYMBOL>, DirectionVent TSERIE <float, MEAN, DAILY, CODE>, Latitude SCALAR <float, SYMBOL>, Longitude SCALAR <float, SYMBOL>, Elevation SCALAR <float, CODE> ) Exemple (IOT) de conteneur de données pour une station météo CREATE CONTAINER CpuTimes ( User TSERIE <double, MEAN, DAILY, CODE>, System TSERIE <double, MEAN, DAILY, CODE>, Idle TSERIE <double, MEAN, DAILY, CODE >, Irq TSERIE <double, MEAN, DAILY, CODE >, VendorId SCALAR <TEXT>, Model SCALAR <TEXT>, Cores SCALAR <int>, Frequency SCALAR <double, SYMBOL>, CacheSize SCALAR <int, SYMBOL> ) CREATE CONTAINER NetIOCounters ( BytesSent TSERIE <bigint, SUMMED, DAILY, CODE>, BytesRecv TSERIE <bigint, SUMMED, DAILY , CODE>, PacketsSent TSERIE <bigint, SUMMED, DAILY>, PacketsRecv TSERIE <bigint, SUMMED, DAILY>, ErrorIn TSERIE <bigint, SUMMED, DAILY>, ErrorOut TSERIE <bigint, SUMMED, DAILY> ) Exemple (DevOps) de conteneur de données pour le Monitoring d’une machine CREATE TABLE MeteoTable ( StationId UUID, Country TEXT, State TEXT, StationData TIMESERIES <MeteoContainer, MINUTELY(1)>, HourlyData TIMESERIES <MeteoContainer, HOURLY(1)>, DailyData TIMESERIES <MeteoContainer, DAILY>, Monthly TIMESERIES <MeteoContainer, MONTHLY>, PRIMARY KEY ( StationId, ( Country, State ) ) ) Exemple de table pour le stockage des données climatiques CREATE TABLE HostMonitoring ( HostId TEXT, WeekDate HDATE<WEEKLY(SUN)>, InstanceId TEXT, CpuData TIMESERIES <CpuTimes, SECONDLY(1)>, NetworkData TIMESERIES <NetIOCounters, SECONDLY(1)> PRIMARY KEY ( HostId, (WeekDate, InstanceId) ) ) Exemple de table pour le stockage des données Cpu et réseaux
  11. All rights reserved © 2021, Stuteo 11 3 Modèle de

    données – Schéma logique ➢ Une colonne de série temporelle est définie par un Container et une Frequency. ➢ Frequency représente la périodicité des séries régulières ou la granularité des séries irrégulières. ➢ Les clés de partition permettent la distribution des données sur les nœuds du cluster. ➢ Les clés des dimensions permettent d’avoir un schéma dynamique des données. ➢ Les données d’une série temporelle sont stockés dans une seule cellule de la table. ➢ Réduction considérable du nombre de lignes dans la table historique. PKn,1 PKn-1,1 PK2,1 PK1,1 DKn,1 DKn-1,1 DK2,1 DK1,1 …… …… …… …… DKn,d DKn-1,d DK2,d DK1,d cts1,1,1 cts1,1,2 cts1,1,t-1 cts1,1,t cts1,p,1 cts1,p,2 cts1,p,t-1 cts1,p,t csc1,1 csc1,s TimeSeries(Container1 , Frequency1 )n TimeSeries(Container1 , Frequency1 )n-1 TimeSeries(Container1 , Frequency1 )2 TimeSeries(Container1 , Frequency1 )1 TimeSeries(C2 , F2 )n TimeSeries(C2 , F2 )n-1 TimeSeries(C2 , F2 )2 TimeSeries(C2 , F2 )1 cts2,1,1 cts2,1,2 cts2,1,t-1 cts2,1,t- cts2,m,1 cts2,m,2 cts2,m,t-1 cts2,m,t Dimension Keys
  12. All rights reserved © 2021, Stuteo 12 INSERT INTO tableName

    (entityId1 , …, entityIdm , tserName1 , ..., tserNamen , cserName1 , ..., cserNamep ) VALUES (entityVal1 , …, entityValm , TSD(tserData1 ), ..., TSD(tserDatan ), CSD(cserData1 ), ..., CSD(cserDatap )) [ IF NOT EXISTS ] [ USING update_params ]; * Création de la première colonne, de chaque série temporelle, dans la table historique. Insertion des données dans la table historique avec la commande INSERT INTO : INSERT INTO stockQuotes (Ticker, quoteData, marketCap, Dividends, Splits) VALUES (‘GOOG’, TSD((19AUG2004, 31DEC2020), (‘USD’, [49.81, 50.31,…, 1762.01, 1735.42]) , (‘USD’, [51.83, 54.33,…, 1765.09, 1758.93]) , (‘USD’, [47.80, 50.06,…, 1725.60, 1735.42]) , (‘USD’, [49.98, 53.95,…, 1739.52, 1751.88]) , (‘Shares’, [44871361, 22942874,…, 1306100, 1011900]), ’19AUG2004’, ‘NMS’), TSD((19AUG2004, 31DEC2020), (‘B$’, [33.68, 36.36,…, 1117, 1183]), null, TSD([27MAR2014, 27APR2015],[2,002, 1,0027455]) ) IF NOT EXISTS; Exemple d’insertion des données financières de la société Google : 3 Modèle de données – Ingestion des données UPDATE tableName [ USING update_params ] SET tserNamen = tserNamen + TSD(tserDatan ) WHERE entityId1 = entityVal1 AND … AND entityIdm = entityValm [ IF ( EXISTS | condition ( AND condition)* ]; * Création d’une nouvelle colonne, de la série temporelle, dans la table historique. Modification des données dans la table historique avec la commande UPDATE : UPDATE stockQuotes SET quoteData = quoteData + TSD((1JAN2021, 19FEB2021), ( ‘USD’, [Na, 1757.54, 1725.00,…,2110.39, 2119.27]) , ( ‘USD’, [Na, 1760.65, 1747.67, …, 2132.74, 2130.53]) , ( ‘USD’, [Na, 1707.85, 1718,01,…,2103.71, 2097.41]) , ( ‘USD’, [Na, 1728.24, 1740.92,…, 2117.2, 2101.14]) , ( ‘Shares’, [Na, 1901900, 1145300,…, 1121600, 1457400]), ’19AUG2004’, ‘NMS’) IF EXISTS; Exemple de mise à jour des données financières de la société Google : Le processus de compaction permet de fusionner toutes les colonnes d’une série temporelle pour créer une seule colonne
  13. All rights reserved © 2021, Stuteo Working frequency Daily, Monthly,

    Business, Secondly… Working range Date, intervals or a composite Missing data treatment Holidays data, not defined … TimeSeries Down-sampling Mean, StdDev, Max, Last… Distribution method Constant, Linear, Cubic Spline … 13 4 Context – Définition Ensemble de paramètres définis par l’utilisateur pour effectuer un traitement spécifique des séries temporelles. Traitements complexes avec des requêtes TSQL simples SELECT ftsMovAve(quoteData.Close, 50) OVER (CONTEXT) FROM stockQuotes WHERE Ticker = ‘GOOG’ Agrégation de plusieurs séries temporelles SELECT SUM(quoteData.marketCap) OVER (CONTEXT) FROM stockQuotes WHERE Ticker IN (‘GOOG’, ‘AMZN’)
  14. All rights reserved © 2021, Stuteo CREATE CONTEXT contextName (

    FREQUENCY <frequency> , DATES ( daterange1 , daterange2 , … , daterangen ), CASES ( caserange1 , caserange2 , … , caserangep ), OBSERVED <observed>, BASIS <basis>, CONVERT [OFF| CONSTANT | CUBIC | DISCRETE | LINEAR], IGNORE ADDITION [ON|OFF] MULTIPLY [ON|OFF] FUNCTION [ON|OFF], HOLIDAY [ON|OFF], CENTURY <number>, FISCAL YEAR [AUTO | FIRST | LAST] MONTH <month>, UNITS <category> [DEFAULT | OID(<integer>) | CODE(<string>) | SYMBOL(<string>)] ) * Les contextes sont enregistrés dans une table système de StuteoDb, ils peuvent être modifiés ou effacés. 14 Création d’un contexte de travail avec la commande CREATE CONTEXT : FREQUENCY : Fréquence de travail (toutes les séries temporelles sélectionnées seront converties à cette fréquence) DATES / CASES : Plage de dates/cases de travail, Définie par un intervalle, liste de dates/cases ou composite OBSERVED : Operateur d’agrégation temporelle (TimeSeries Down-sampling Method ) BASIS : Base de l’axe temps (Time scale) CONVERT : Méthode de distribution temporelle (TimeSeries Distribution Method ) IGNORE : Ignorer les valeurs manquantes (ND : Not Defined, NA : Not Available, NC : Not Computable) HOLIDAY : Traitement des jours fériés. FISCAL : Calendrier fiscal (Application Financière) UNITS : Unités de l’espace de travail (Ex : TEMPERATURE SYMBOL(‘°C’), CURRENCY CODE(‘USD’), ….) Clauses pour la création d’un contexte : CREATE CONTEXT DEFAULT ( FREQUENCY BUSINESS, DATES * TO *, CASES * TO *, OBSERVED MEAN, BASIS BUSINESS, CONVERT OFF, HOLIDAY OFF, CENTURY 1950, IGNORE ADDITION OFF MULTIPLY OFF FUNCTION OFF, FISCAL YEAR AUTO MONTH DEC, UNITS CURRENCY CODE(‘USD’) ) CREATE CONTEXT weeklyCxt ( FREQUENCY WEEKLY(FRI), DATES JAN2020 TO * STEP 1, CONVERT CONSTANT, HOLIDAY ON, IGNORE ON ) CREATE CONTEXT monthlyCxt ( FREQUENCY MONTHLY, DATES 2020 TO *, CONVERT LINEAR, HOLIDAY ON, IGNORE ADDITION ON MULTIPLY ON ) Exemples de contextes utilisateur : tous les contextes utilisateur héritent des paramètres du contexte DEFAULT 4 Context – Création & Description
  15. All rights reserved © 2021, Stuteo SELECT tserName FROM tableName

    WHERE entityId = ‘tsid’; Sélection de toutes les données du conteneur utilisant le contexte DEFAULT. SELECT tserName.FieldName FROM tableName WHERE entityId = ‘tsid’; Sélection d’une série temporelle du conteneur utilisant le contexte DEFAULT. SELECT JSON tserName FROM tableName WHERE entityId = ‘tsid’; Sélection de toutes les données du conteneur , en format JSON, utilisant le contexte DEFAULT. SELECT JSON tserName.FieldName FROM tableName WHERE entityId = ‘tsid’; Sélection d’une série temporelle du conteneur , en format JSON, utilisant le contexte DEFAULT. SELECT FUN(tserName.FieldName) FROM tableName WHERE entityId = ‘tsid’; Fonction d’une série temporelle du conteneur , en format JSON, utilisant le contexte DEFAULT. 15 Lecture des données de la table historique avec la commande SELECT : Lecture des données du marché de Google avec le contexte DEFAULT (généralement sans aucune conversion temporelle). SELECT quoteData AS ‘Market Data’ FROM stockQuotes WHERE Ticker = ‘GOOG’; Row Market Data 1 [(19AUG2004, 19FEB2021), ( ‘USD’, [49.81, 50.31,…,2110.39, 2119.27]) , ( ‘USD’, [51.83, 54.33,…,2132.74, 2130.53]) , ( ‘USD’, [47.80, 50.06,…,2103.71, 2097.41]) , ( ‘USD’, [49.98, 53.95,…, 2117.2, 2101.14]) , ( ‘Shares’, [44871361, 22942874,…, 1121600, 1457400]), ’19AUG2004’, ‘NMS’] Lecture des données du marché de Google, en format JSON, avec le contexte DEFAULT (généralement sans aucune conversion temporelle). SELECT JSON quoteData AS ‘Market Data’ FROM stockQuotes WHERE Ticker = ‘GOOG’; Row Market Data {dates:{begin:19AUG2004, end:19FEB2021}, Open:{unit: ‘USD’, values:[49.81, 50.31,…,2110.39, 2119.27]}, High:{unit: ‘USD’, values:[51.83, 54.33,…,2132.74, 2130.53]}, Low:{unit: ‘USD’, values:[47.80, 50.06,…,2103.71, 2097.41]}, Close:{unit: ‘USD’, values: [49.98, 53.95,…, 2117.2, 2101.14]}, Volume:{unit: ‘Shares’, values:[44871361, 22942874,…, 1121600, 1457400]}, FirstDate: ’19AUG2004’, Exchange: ‘NMS’} Lecture de la moyenne mobile, sur 50 périodes, du prix de clôture de Google avec le contexte DEFAULT (généralement sans aucune conversion temporelle). SELECT ftsMovAve(quoteData.Close, 50) AS ‘Close Mave50’ FROM stockQuotes WHERE Ticker = ‘GOOG’; Row Close Mave50 1 [(28OCT2004, 19FEB2021), ( ‘USD’, [63.29, 64.19, 65.06, 65.91, 66.78, 67.56, 68.17, 68.83, 69.50, 70.15,…, 1810.06, 1816.54, 1822.78, 1828.83, 1835.53, 1841.65, 1847.53, 1853.56, 1859.34, 1864.98])] 5 TSQL – Sélection des données
  16. All rights reserved © 2021, Stuteo SELECT tserName FROM tableName

    WHERE entityId = ‘tsid’ OVER (contextName); Sélection de toutes les données du conteneur en utilisant le contexte contextName. SELECT tserName.FieldName FROM tableName WHERE entityId = ‘tsid’ OVER (contextName); Sélection d’une série temporelle du conteneur en utilisant le contexte contextName. SELECT JSON tserName OVER (contextName) FROM tableName WHERE entityId = ‘tsid’; Sélection de toutes les données du conteneur , en format JSON, en utilisant le contexte contextName. SELECT FUN(tserName.FieldName) OVER (contextName) FROM tableName WHERE entityId = ‘tsid’; Sélection du résultat d’une fonction d’une série temporelle du conteneur en utilisant le contexte contextName. 16 Lecture des données de la table historique avec la commande SELECT avec une clause OVER : Lecture des données du marché de Google avec le contexte weeklyCxt. Chaque série temporelle est convertie à la fréquence Weekly(FRI) en utilisant l’attribut observed de chaque série. SELECT JSON quoteData AS ‘Market Data’ FROM stockQuotes WHERE Ticker = ‘GOOG’ OVER(weeklyCxt); Row Market Data {dates:{begin:3JAN2020, end:19FEB2021}, Open:{unit: ‘USD’, values:[1350.00, 1350.00, 1436.13,…,1922.56, 2105.91, 2104.36]}, High:{unit: ‘USD’, values:[1372.50, 1434.93, 1481.30,…,2116.50, 2123.55, 2152.68]}, Low:{unit: ‘USD’, values:[1329.08, 1350.00, 1426.02,…,1850.93, 2063.09, 2097.41]}, Close:{unit: ‘USD’, values:[1360.66,1429.73, 1480.39,…,2098.00, 2104.11, 2101.14]}, Volume:{unit: ‘Shares’, values:[5644100, 8084600, 8063800,…,11380300, 5068200, 4782000]}, FirstDate: ’19AUG2004’, Exchange: ‘NMS’} Lecture du prix pondéré de Google avec le contexte weeklyCxt. Chaque série temporelle est convertie à la fréquence Weekly(FRI) en utilisant l’attribut observed de chaque série. SELECT (quoteData.High + quoteData.Low + 2 * quoteData.Close) / 4 AS ‘Weighted Price’ OVER (weeklyCxt WITH OBSERVED LAST) FROM stockQuotes WHERE Ticker = ‘GOOG’; Row Weighted Price 1 [(3JAN2020, 19FEB2021), ( ‘USD’, [1355.73, 1411.10, 1467.02, 1475.47, 1439.95,..., 1869.61, 1852.51, 2040.86, 2098.71, 2113.09])] Lecture du prix de clôture cumulé de Google avec le contexte weeklyCxt. SELECT ftsCumAve(quoteData.Close) AS ‘Cumulative Mean Price’ FROM stockQuotes WHERE Ticker = ‘GOOG’ OVER(weeklyCxt); Row Cumulative Mean Price 1 [(3JAN2020, 19FEB2021), ( ‘USD’, [1360.66, 1395.20, 1423.59, 1434.37, 1434.34,..., 1814.82, 1820.05, 1875.64, 1913.72, 1940.49])] 5 TSQL – Conversion des données
  17. All rights reserved © 2021, Stuteo 17 Lecture des prix

    de clôture de Google et Amazon avec le contexte weeklyCxt. SELECT Ticker , quoteData.Close AS ‘Close Price’ FROM stockQuotes WHERE Ticker IN (‘GOOG’, ‘AMZN’) OVER (weeklyCxt); Ticker Close Price GOOG [(3JAN2020, 19FEB2021), ( ‘USD’, [1360.66, 1429.73, 1480.39, 1466.71, 1434.23, 1479.23, 1520.74, 1485.11,…, ND, 1807.21, 1736.19, 1901.05, 1835.74, 2098.00, 2104.11, 2101.14])] AMZN [(3JAN2020, 19FEB2021), ( ‘USD’, [1874.97, 1883.16, 1864.72, 1861.64, 2008.72, 2079.28, 2134.87, 2095.97,…, ND, 3182.70, 3104.25, 3292.23, 3206.20, 3352.15, 3277.71, 3249.90])] SELECT tserName FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); Sélection de toutes les données du conteneur en utilisant le contexte contextName pour toutes les entités définies dans la clause IN. SELECT tserName.FieldName FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); Sélection d’une série temporelle du conteneur en utilisant le contexte contextName pour toutes les entités définies dans la clause IN. Sélection multi-lignes de la table historique avec la commande SELECT avec une clause IN pour les clés primaires : SELECT MIN(tserName.FieldName) FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); SELECT MAX(tserName.FieldName) FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); SELECT AVE(tserName.FieldName) FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); SELECT SUM(tserName.FieldName) FROM tableName WHERE entityId IN (‘tsid1 ’,…, ‘tsidn ’) OVER (contextName); Agrégations de plusieurs séries temporelles, les séries sont traitées et converties selon le contexte avant de calculer la fonction d’agrégation. Agrégation multidimensionnelle de la table historique avec la commande SELECT avec une clause IN pour les clés primaires et une fonction d’agrégation: Agrégation des volumes de Google et Amazon. Chaque série temporelle est convertie, selon le contexte weeklyCxt, à la fréquence Weekly(FRI) avant le calcul de la moyenne. SELECT AVE(quoteData.Volume) AS ‘Weekly Volume’ FROM stockQuotes WHERE Ticker IN (‘GOOG’, ‘AMZN’) OVER (weeklyCxt); Row Weekly Volume 1 [(3JAN2020, 19FEB2021), ( ‘USD’, [9290150, 12860150, 11919450, 9979100, 19243050, 17825300, 12916950,..., 14239400, 12008650, 11971400, 14087200, 18506100, 9152900, 8983650])] 5 TSQL – Agrégation des séries temporelles
  18. All rights reserved © 2021, Stuteo Function Description fdtConvert(date, frequency,

    type) Convert one date to target frequency Type : BEFBEG,AFTBEG,CONBEG,BEFEND,AFTEND,CONEND,CONINT fdtToDate(date), fdtFromDate(frequency,value) Convert HDate to SQL date type fdtToTimestamp(date), fdtFromTimestamp(frequency,value) Convert HDate to SQL timestamp type fdtToMillisecond(date), fdtFromMillisecond(frequency,value) Convert HDate to millisecond fdtToUnixTimestamp(date), fdtFromUnixTimestamp(frequency,value) Convert HDate to Unix timestamp fdtToDouble(date), fdtFromDouble(frequency,value) Convert HDate to Excel date type fdtToLiteral(date), fdtFromLiteral(frequency, text) Convert HDate to Literal text fdtToString(date, format), fdtFromString(frequency, text, format) Convert HDate to formatted text fdtValueOf(frequency, year, period) Make HDate from year and period fdtValueOf(frequency, year, month, day, hour, minute, second, millisecond) Make HDate from year , month, day and time components fdtYear(date), fdtPeriod(date) Get HDate year or period fdtFiscalYear(date), fdtFiscalPeriod(date) Get HDate fiscal year or fiscal period fdtMonth(date), fdtDay(date), fdtWeekDay(date) Get HDate date components values fdtHour(date), fdtMinute(date), fdtSecond(date) , fdtMilliSecond(date) Get HDate time components values fdtValid(), fdtNow() Get system valid/current HDate at working frequency fdtToday(frequency), fdtCurrent(frequency) Get system valid/current HDate at defined frequency ….. 18 5 TSQL – Gestion des dates
  19. All rights reserved © 2021, Stuteo Function Description ftsResample(ts, frequency,

    method, observed, basis, ignore) Down-sampling or distribution of time-series to target frequency ftsAggregate(ts, frequency, convert) Convert irregular time-series to regular time-series at target frequency ftsRegular(ts) Convert irregular time-series to regular time-series ftsInterpolate(ts, method) Interpolate time-series, Method : CONSTANT, CUBIC, GEOMETRIC, LINEAR ftsAcf(ts, lag), ftsPacf(ts, lag), ftsAcfDist(ts, lag), ftsPacfDist(ts, lag) Autocorrelation and Partial Autocorrelation of a numeric time-series ftsAgr(ts, method, rate) Average growth rate of a numeric time series Method : OLS, PREVTOLAST, ROBUST, Rate : ANNUAL, PERIODIC, SIMPLE ftsMax(ts), ftsMin(ts), ftsSum(ts), ftsProd(ts) Max, Min, Sum, Product of numeric time-series ftsAve(ts, weight, trim), ftsMedian(ts, weight), ftsRobVar(ts, weight) Mean, Median and Robust Variance of numeric time-series ftsVar(ts, trim), ftsStdDev(ts, trim) Unbiased Variance and Standard Deviation of a numeric time-series ftsPct(ts), ftsAnnPct(ts) , ftsSimpleAnnPct(ts) Point-to-point/Annualized percent changes of a numeric time series ftsCumMax(ts), ftsCumMin(ts), ftsCumSum(ts), ftsCumProd(ts) Cumulative Max, Min, Sum, Product of numeric time-series ftsCumAve(ts, weight) Cumulative Average of numeric time-series ftsMovAve(ts, span), ftsMovMax(ts, span), ftsMovMin(ts, span), ftsMovSum(ts, span), ftsMovProd(ts, span) Moving Average, Max, Min, Sum, Product of numeric time-series ftsMovVar(ts, span, trim), ftsMovStdDev(ts, span, trim) Moving Variance/Standard Deviation of a numeric time-series ftsDiff(ts, order, lag) Differences of a specified order at a specified lag of a numeric series ftsShift(ts, lag), ftsShiftMonth(ts, lag, align) , ftsShiftYear(ts, lag, align) Shift time-series by Period/Month/Year with Align :AFTER,BEFORE,NEAR ………. 19 5 TSQL – Fonctions des séries temporelles
  20. All rights reserved © 2021, Stuteo 20 Futures Fonctionnalités de

    StuteoDb ➢ Intégration de nouveaux types de données (Complexe, Géo localisation, Matrices …). ➢ Développer plus de fonctions spécifiques aux séries temporelles (en fonction des cas d’usage). ➢ Algorithmes d’agrégation multidimensionnelle pondérée et de corrélation. TSQL ➢ Algorithmes d’indexation des données temporelles. ➢ Outil de compaction spécifique à StuteoDb avec partitionnement des données. ➢ Implémentation de la compression et le cryptage des données pour chaque série temporelle. ➢ Implémentation du streaming pour la table historique (données en mémoire). Données ➢ Nouveaux paramètres pour l’analyse des séries temporelles (Corrélation, Régression, Extrapolation, Décomposition saisonnière …). ➢ Nouvelles méthodes de Down-Sampling (ValidCount, MissingCount, NdCount, MinMaxRange, Skewness, Kurtosis …). ➢ ... Contexte