2.00.15

Version: 2.00.15   Compatibility Level 2 with 2.00.14

For details, see Compatibility Changes.

New Features

  • Introduced a set of new functions and configuration parameters to enhance login security, including (2.00.15.1):
    • Automatic account lockout after failed login attempts.
    • Manual user lock/unlock, retrieval of user lock status.
    • Customizable password complexity rules, password expiration notifications, and prevention of password reuse.
  • Added configuration parameter enableStructuredAuditLog to structured binary-format audit logs. (2.00.15.1)
  • Added the functions scramClientFirst and scramClientFinal, and introduced the authMode parameter to the createUser function to support the SCRAM (Salted Challenge Response Authentication Mechanism). (2.00.15.1)
  • Added support for transparent data encryption (TDE).
  • Added support for data transmission encryption.
  • Enhanced login security.
  • Added support for data masking.
  • Added configuration parameter maxJoinTaskRetry to specify the maximum retry attempts for a single SQL JOIN task under memory pressure.
  • Added configuration parameter allowTSDBLevel3Compaction to set whether to allow compaction of level 3 files. Added new parameter level to function triggerTSDBCompaction to specify the level at which to trigger file compaction.
  • Added function callableFixedRateBondDirtyPrice to calculate the dirty price of a fixed-rate bond with embedded options.
  • Added function getDFSDatabasesByOwner to list databases created by the specified user.
  • Added function gmd5 and rowGmd5 to generate MD5 hashes.
  • Added function cubicHermiteSplineFit to performs cubic Hermite interpolation on the given vectors.
  • Added function rms to calculate the root mean square value of the input.
  • Added function boxcox to transform input data into an approximately normal distribution using the Box-Cox transformation method.
  • Added function arima to implement the Autoregressive Integrated Moving Average (ARIMA) model for time series analysis.
  • Added function runSQL to avoid SQL injection through dynamic parameter binding.
  • Added function getSlaveReplicationExecutionStatus to obtain the status of asynchronous replication tasks running on data nodes of the slave cluster, providing execution information for each thread.
  • Added support for online modification of the enableNullSafeJoin configuration parameter through the setDynamicConfig function and added function getEnableNullSafeJoin to retrieve the dynamically modified value of enableNullSafeJoin.
  • Introduced in-memory online transaction processing (IMOLTP) engine, enabling to save data in memory to avoid disk I/O overhead.
  • Introduced IOTDB engine for management of IoT data points.
  • Added SQL predicates notLike, notBetween, and notIn and their corresponding functions.

Improvements

  • Enhanced storage-compute separation features (2.00.15.1):
    • Supported specifying multiple cache directories for a compute node.
    • The maximum memory cache size on compute nodes is now specified in GB instead of MB.
    • Supported automatic flushing of memory cache to disk after graceful shutdown.
    • Added functions to cache the specified data on compute groups, with task status monitoring supported.
    • Added function getComputeNodeCacheDetails to obtain detailed cache information on the current node.
    • Added new parameters database and table for function clearComputeNodeCache to clear the memory and disk cache of specified database/table.
    • Enabled compression of disk cache compute nodes.
  • Improved error handling in distributed queries when comparing CHAR constants with STRING partitioning columns in the WHERE clause. The system now raises an error message. (2.00.15.1)
  • Optimized the query performance for VALUE-partitioned TSDB databases when filtering on partitioning columns. (2.00.15.1)
  • Added support for the ANY type in stream tables and in-memory tables. (2.00.15.1)
  • Added the "updateTime" field to the backup log file. (2.00.15.1)
  • Added the recording of operations on the persisted MVCC table to the log. (2.00.15.1)
  • Enhanced the DELETE statement performance. (2.00.15.1)
  • Enhanced the stability of batch job execution under high-load and high-concurrency scenarios.
  • Optimized the logic for deserializing function views and scheduled job files during node startup. Previously, if a function contained a dictionary with function definitions as values, deserialization would fail, causing an unexpected shutdown. Now, it directly throws an error.
  • The getClusterDFSDatabases function now allows non-admin users to retrieve distributed databases in the cluster that they have permission to access.
  • Privileges QUERY_RESULT_MEM_LIMIT and TASK_GROUP_MEM_LIMIT can now be set for user groups.
  • The audit log now tracks all logins and logouts, permission changes, new connection creations, and configuration file updates.
  • The query logs (<HomeDir>/resource/hardware.log) now track the amount of data sent and received.
  • Enhanced certain parameters for FICC-related functions to support specifying STRING or DURATION type in addition to integers.
  • The schema function now provides detailed information, including dbUrl and tableName for DFS tables, and keyColumn for keyed tables.
  • The loadText function now supports parsing values of DECIMAL128 type.
  • The sortBy! function now supports an empty in-memory table as input.
  • The garch function now supports DECIMAL type.
  • When the aggrTopN function receives a typed empty vector as input, it now returns an empty vector instead of throwing an error.
  • The bfill/ffill function now supports filling null values in array vectors.
  • Added parameter index for the interpolate function to allow interpolation of X based on the index vector.
  • The tmTopN functions now accept trading calendars (market identifier) as DURATION scalars in their window parameters.
  • The iif function now supports tuples as inputs for the trueResult and falseResult parameters.
  • Added assembleRule parameter to higher-order functions, replacing the consistent parameter, to specify how the results of sub-tasks are merged into the final result.
  • The transpose function now supports converting nested dictionaries into a table and merging multiple dictionaries into a single table with array vector and tuple columns.
  • Optimized TSDB engine performance for concurrent queries.
  • Added new parameter isInnerJoin to function createLookupJoinEngine to enable inner join operations.
  • Added parameter mergeLastWindow for function createDailyTimeSeriesEngine to handle irregular session periods.
  • Added parameter preCache for function enableTablePersistence to specify the number of records to load into memory from the persisted stream table at server startup.
  • The TRUE and FALSE keywords in SQL queries are now case-insensitive.
  • Parallel join operation is now supported when enableNullSafeJoin is set to false.
  • Enhanced the stability for concurrent SQL queries.
  • The UPDATE statement now supports modifying array vectors in in-memory tables and adding columns of the ANY type to in-memory tables.
  • Added support for partition pruning when modifying data in partitioned DFS tables with the UPDATE/DELETE statement.
  • Dictionary keys can now include keywords, such as context.

Issues Fixed

  • Fixed a memory leak when calling a user-defined recursive function. (2.00.15.1)
  • Fixed an error when deleting column(s) from a keyed table if any column name contains uppercase letters. (2.00.15.1)
  • Fixed an error that occurred during join operations on shared keyed tables. (2.00.15.1)
  • Fixed an issue where agent was not automatically set for nodes added via addNode without a cluster restart. (2.00.15.1)
  • Fixed incorrect prompt message shown after password expiration when enhancedSecurityVerification is enabled. (2.00.15.1)
  • Fixed an issue where using the ols function with PIVOT BY on in-memory tables involving multiple groups could cause the error: "The number of observations must be more than the number of factors." (2.00.15.1)
  • Fixed the issue where the server entered an infinite loop when executing decimalFormat(0, '0.00E0'). (2.00.15.1)
  • Fixed server crashes that occurred when queries with lead/lag analytic functions were executed in MySQL syntax mode. (2.00.15.1)
  • Fixed server crashes when appending an empty table to a keyed stream table. (2.00.15.1)
  • Fixed server crashes caused by appending a partitioned DFS table to another. The system now reports an error for such case. (2.00.15.1)
  • Fixed server crashes caused by concurrent writes to an in-memory keyed table. (2.00.15.1)
  • Fixed server crashes caused by concurrent disk reads in the TSDB engine due to missing filter conditions in PIVOT BY after partition pruning. (2.00.15.1)
  • Fixed occasional server crashes when the X and Y of the corr function were tables with different numbers of columns. (2.00.15.1)
  • Fixed server crashes caused by using UPDATE/DELETE with WHERE EXISTS. Now it raises an error instead. (2.00.15.1)
  • Fixed data reading errors when TSDB level files included array vectors.
  • Fixed an issue where the server failed to report an error when an invalid path was specified for the py plugin in the globalDynamicLib parameter.
  • Fixed unexpected partition data after restoring replicas.
  • Fixed server crashes when querying a keyed or indexed table with multiple primary key columns, where the filter condition contained an empty SYMBOL vector.
  • Fixed an issue in high-availability clusters where an existing table handle could not access data from newly added partitions without obtaining a new handle (reloading table via loadTable).
  • Fixed the issue causing incorrect results in a function view after server restarts when the view included CROSS JOIN (ANSI SQL compliant) combined with other types of table joins.
  • Fixed an intermittent thread assignment issue where the system may not allocate all stream subscription tasks to threads when enabling VS Code debugging.
  • Fixed an error where SQL queries failed if they contained both a user-defined aggregate function returning multiple values and a GROUP BY clause with interval.
  • Fixed an issue where higher-order functions might produce incorrect results when their input was a user-defined function that returned its parameter unchanged.
  • Fixed precision loss for the segmentby function when calculating data of DECIMAL128 type.
  • Fixed an issue in heterogeneous replay where data sources (generated by replayDS with timeRepartitionSchema specified) were replayed in a disordered manner.
  • Fixed a data loss issue in N-to-N replay that occurred when the data being replayed included empty partitions.
  • Fixed an issue where adding a metric to the left semi join engine via the addMetric function could lead to incorrect results if the columns of the new metric were not included in the metrics parameter.
  • Fixed memory spikes that occurred when stream data consumption couldn't keep pace with queued data.
  • Fixed a function resolution error when using funcByName in a user-defined function specified by filter['handler'] in the streamFilter function.
  • Fixed a type parsing error that occurred when passing a partially applied user-defined function to the moving function in the reactive state engine.
  • Fixed a "unrecognized column name" error that occurred when executing a multi-table JOIN query, if some partitions were offline due to node failures in the cluster.
  • Fixed an issue where frequent concurrent updates and queries on tables in a TSDB database could result in empty results.
  • Fixed server crashes during concurrent execution of SQL queries when multiple joins involved a subquery as one of the tables, or when the FROM clause contained a subquery.
  • Fixed an error for queries on tables in TSDB databases when a sort column was specified as a GROUP BY column and the nunique function was specified in the SELECT statement with parameters of type STRING or SYMBOL.
  • Fixed server crashes when incorrect parameters were passed to the makeKey function within a WHERE clause.
  • Fixed an issue where calculating maximum (via max) of a STRING column (with the first row being null) by group could result in incorrect results.
  • Fixed a disk flush failure that occurred when the delta-of-delta value overflowed for LONG or NANOTIMESTAMP columns using the "delta" compression method.
  • Fixed server crashes caused by a certificate format mismatch during online updates.
  • Fixed server crashes caused by OpenSSL version mismatch between server and plugins.