Skip to main content

What's new

This section provides a brief overview of the new features and improvements in the latest versions of ActivePivot.

For a detailed list of all changes, see our Changelog.

5.10

New features

  • User Defined Aggregate Functions on Measures: It is now possible for user-defined aggregate functions to work on measures (instead of facts). This can be acheived using the Copper API. The documentation is available here.
  • Copper Join hierarchy with multiple levels: The Copper API now lets you define Join hierarchies with several levels.
  • Option to set the visibility of hierarchies and dimensions through context values: the MDX context now has a feature that can override the visibility of a hierarchy or a dimension. This feature can be used through MdxContext::setHierarchyVisibility() or through the MDX context builder via IMdxContextBuilder::overrideHierarchyVisibility() (analogous methods exist for dimensions).
  • Copper Store Lookups: The Copper API lets you define store look ups measures that run a get-by-key query on the selected store.

Improvements

  • Chunks gained a new compression method: Frequency compression. When the Datastore detects a value repeated many times in a chunk, the chunk is compressed to store only explicit values, while recording the implicit values repeated many times.
    The compression happens when a value appears more than x % in the chunk. x can be specified as a ratio through the property ActiveViamProperty#CHUNK_FREQUENCY_COMPRESSION_RATIO_PROPERTY. The compression can be enabled or disabled for each of the following five data types: int, float, long, double and object. This can be controlled through the property: ActiveViamProperty#ENABLED_FREQUENCY_COMPRESSIONS_PROPERTY.
  • When a data node is being shutdown, it will send a GoodbyeMessage to the query node which will immediately trigger an asynchronous task responsible of removing all subsequent contributions of the former. On success, a GoodbyeMessageApplicationEvent is generated. Otherwise, on failure of the removal task, a GoodbyeMessageApplicationFailureEvent is generated. This lets ActivePivot distinguish the clean removal of a data node from one that is momentarily unresponsive.
  • When executing a query, intermediary results that have been computed and that are not required by any remaining computations are now discarded and are available for garbage collection.

Miscellaneous

  • The Azure Cloud Source has migrated its dependency to the Azure Blob Storage SDK from version 8 to version 12. This change came along a number of changes in the module's interface. More about this can be read on the migration notes.

5.9

New features

  • New Copper API: The Copper API, allowing you to easily define measures and hierarchies, has been overhauled. Documentation for the API is available here.

  • User Defined Aggregate Functions: These new functions can access several fields and store several intermediate values. They can be defined using the Copper API or by extending AUserDefinedAggregateFunction. The documentation is available here.

  • Option to conceal hierarchies and measures from the distributed application: A concealed hierarchy is only known in the data cube where it's located. The query node has no knowledge of this hierarchy. Concealing a hierarchy improves the stability of the cluster and shortens the discovery phase, by significantly reducing its impact on the network's bandwidth. We advise concealing hierarchies that have a very high cardinality. For more information, see the distributed documentation.

    Measures can also be concealed. A concealed measure is only known in the data cube where it's located. We recommend concealing measures that are not relevant to the query node, such as intermediate measures for calculations that do not need to be visible in the User Interface.

  • Option to disable the epoch level: The epoch level of the epoch dimension can now be enabled or disabled. By default, the epoch level is now disabled, only the branch level is enabled. To enable the epoch level, use IEpochDimensionDescription.setEpochLevelEnabled(boolean).

  • Export query plans: A new REST service allows you to perform a query and export its execution plan. The plan now contains the result of each part of the query for each Data Cube (if any), and each pass of the MDX query.

  • Limit the result size of a single GetAggregatesQuery (since 5.9.3): The result size for every retrievals as well as the transient result size cross retrievals within a given GetAggregatesQuery can be limited in terms of number of points i.e. locations. These limits can be set in the project configuration as a shared contex value in the cube description or dynamically at query time using QueriesResultLimit helper methods. If not specified, the default beahvior is without limit. Note that the transient result size also includes intermediate retrievals result size, often required to compute the top retrievals (Retrievals appearing in the query plan) in complexe queries.

Improvements

  • The CSV Source is now capable of detecting line ending at the byte level. This improves the parallelism and speed of the CSV Source when reading one large file, at the cost of not supporting a few uncommon character sets.

  • The performances of the MDX Engine has been improved by using fine-grained locking instead of coarse-grained locking.

  • Indexes are now more intensively used for Datastore queries.
    In previous versions, only two cases were covered:

    • an Index was used when the conditions on the index fields were set on a single value.
      Eg: Index on fields A, B, C was used for a condition And(a = 1, b = 2, c = 3)
    • an Index was used for a single condition with multiple values. Eg: Index on field F can be used for the condition b IN [1, 2, 3] For other cases, Indexes were ignored. For example, despite an Index on fields A and B, the query with conditions And(a IN [1, 2], b = 3) could not be planned using Index lookup. It could eventually rely on an Index lookup for A or B, provided such an Index existed, and field scans for the rest.

    The new logic adds the following support:

    • an Index on any number of fields can be used if only one field is subject to a condition with multiple values. Such an Index will be used by pre-compiled queries and ad-hoc queries.
      Eg: Index on fields A, B, C, D can be used for conditions And(a = 1, b = 2, c IN [3, 4], d = 5).
    • an Index on any number of fields can be used if no more than three of its fields are involved in conditions with multiple values. Such an Index can only be used by ad-hoc queries, for the query engine must be able to estimate the number of points generated by the conditions. Eg: Index on fields A, B, C, D can be used for conditions And(a IN [1, 2], b = 3, c = 4, d IN [5, 6, 7]).

    The maximum limit for cross joins are configured by the properties ActiveViamProperty#MAX_LOOKUPS_ON_PRIMARY_INDEX and ActiveViamProperty#MAX_LOOKUPS_ON_SECONDARY_INDEX.

Miscellaneous

  • Java 8 is no longer supported. ActivePivot 5.9 is compatible with Java 11.
  • The Sandbox has been converted to Spring Boot. Additionally, many features have been transformed into unit tests and are presented in the online documentation.

5.8

New features

  • JDK 11 support: we now provide two versions of ActivePivot 5.8: 5.8.x-jdk8 built with JDK8 and 5.8.x-jdk11 built with JDK11. If you plan to run your project with the latest JDK version, use 5.8.x-jdk11. For more information, see the dedicated page.

  • Cloud Csv Source: This source can fetch CSV files from major Cloud providers.

  • New Mode of our Continuous Query Engine: It is now capable of producing real-time notifications that a given query has changed, without computing the new view.

  • Centralization of ActivePivot Properties: The properties of ActivePivot are now centralized and documented in the ActiveViamProperty class. For more information, see the associated developer guide page.