Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
home [2019/05/06 19:21]
a.leofreddi
home [2021/06/23 08:49] (current)
a.leofreddi [Why?]
Line 3: Line 3:
 https://​code.highcharts.com/​modules/​exporting.js https://​code.highcharts.com/​modules/​exporting.js
 </​PRELOAD>​ </​PRELOAD>​
-====== TimEL: ​a Java time-serie library ​======+====== TimEL: ​Time-series Expression Language ​======
  
-TimEL is Java library to evaluate expressions involving time-series data. TimEL'​s aim is to provide an easy to use - yet powerful language - to model, aggregate ​and manipulate time-series. TimEL can:+===== TL;DR ===== 
 +Pick random example in the <​html><​a href="/​console"​ target="​_blank">​📺 online console</​a></​html> ​and try it yourself!
  
-  * Mix multiple ​time frames (for example you can sum daily data with hourly dataor even non-regular data like monthly data TimEL will automatically upscale the data when needed; +===== Why? ===== 
-  * Express recurrent quantities, like 10 units every hour and query TimEL to retrieve the outcome for a given interval; +Manipulating ​time-series is a common use case for meteringmonitoring, IoT and pay-per-use billing systems.
-  * Natively support integer, floating point and double types; +
-  * Define your own types and functions.+
  
-TimEL supports natively both constant interval ​time-serie dataas well as time data with variable intervals.+You may wonder: there are other time-series libraries out therewhy TimEL?
  
-To get an idea of which kind of expressions you can assemble, visit the [[Examples]] page.+----
  
-TimEL requires Java 8 and will run in any J2SE or J2EE container.+=== Keep your data: do not resample your time series ===
  
-\\ \\+Many time-series systems automatically upscale your value to a certain interval (let's say a value every 60 seconds): this produces a lot of duplicates and also limits granularity:​ what if there is a value change that lasted for less than 60 seconds? The information will be somehow lost, as it will be blended with some other value to accommodate the 60 second boundary constraint.
  
-===== ⚠ Important notice =====+TimEL won't force you to do that: it will operate directly using your sample timestamps, regardless of their form (aligned, misaligned, constant interval or variable one) or granularity (anything from years to milliseconds).
  
-As of October 2016one of the dependencies of TimEL (org.matheclipse:​matheclipse-parser) from the Symja Java Computer Algebra Library disappeared from Maven central.+**The granularity ​of your samples drives the computationnot the other way around!**
  
-A new release of TimEL (0.3) will follow with new parser module, timel-parser, to replace ​the missing functionalityAs It is now a mainstream technologyTimEL 0.will also adopt the new capabilities offered ​by Java 8.+---- 
 + 
 +=== Do the right thing: gauges vs integrals ​(counters) === 
 + 
 +Some time-series data come as a gauge, while some other come as a counter (integral)TimEL encodes this information directly within its **typing system**, so you do not have to worry. 
 + 
 +Let's imagine you're summing two integral (countervalues: if they'​re not perfectly aligned, TimEL will automatically interpolate when needed. 
 +===== What? ===== 
 +TimEL is Java library to compile and evaluate TimEL expressions. TimEL expressions are written in a user-friendly language that allows time-series manipulation without the need of taking care about upscalingdownscaling or mixing up different time series intervals. 
 + 
 +Let's see an expression ​to count the number of days: 
 +<code c> 
 +scale( ​                                     // (3) and then downsample for the whole interval 
 +    scale( 
 +        uniform(1.0)                      // (1) let's take an integral value 1.0 
 +        every(1, "​DAY_OF_YEAR",​ "​UTC"​) ​     // (2) repeat it every day 
 +    ) 
 +
 +</​code>​ 
 + 
 +If we evaluate this expression for an interval in the same day, let's say 06:​00-18:​00,​ it'll report ​0.5 - that is half day. If we evaluate it for more days it will count how many days are contained in the interval. The function uniform here returns an integral, so TimEL knows how to interpolate it properly - that is handled ​by the interpreter so the user does not need to worry no more about time frames. 
 + 
 +===== Features ===== 
 +With TimEL you can: 
 + 
 +  * **Mix and preserve time-series with misaligned or different time frames** - for example you can sum daily data with hourly data, or even non-regular data like monthly data; 
 +  * **Express** easily recurrent quantities, like 10 units every hour; 
 +  * **Scale** natively integral values (like consumptions) and averages; 
 +  * **Stream** results without the need of having all the operands in memory; 
 +  * **Support** integer, floating point and double expressions;​ 
 +  * **Extend** with your own types and functions;​ 
 +  * Evaluate expression **securely** - by default there is no way to access external JVM objects or methods that would expose you to a security risk. 
 + 
 +TimEL requires ​Java 8 and will run in any J2SE or J2EE container.
  
-\\ \\+\\
  
-=== Acknowledgements ===+==== Acknowledgements ​====
  
 I wish to thank ej-technologies for providing the TimEL development team with a free JProfiler license, a great <​html><​a href="​http://​www.ej-technologies.com/​products/​jprofiler/​overview.html"​ target="​_blank">​Java Profiler</​a></​html>​. I wish to thank ej-technologies for providing the TimEL development team with a free JProfiler license, a great <​html><​a href="​http://​www.ej-technologies.com/​products/​jprofiler/​overview.html"​ target="​_blank">​Java Profiler</​a></​html>​.
  • home.1557170469.txt.gz
  • Last modified: 2019/05/06 19:21
  • by a.leofreddi