Changes in 19.3.12
The following changes were made in Oracle NoSQL Database Release 19.3.12 Enterprise Edition.
New Features
-
Added support for indexes that do not index
[#27486]NULL
and non-existent values. This is an index property that can be specified in the index-creation DDL (the default is to indexNULL
and non-existent values). Such indexes may be useful when the data contain a lot ofNULL
and/or non-existent values on the indexed fields, because the time and space overhead of indexing is reduced. However, use of such indexes by queries is restricted. Specifically, they can be used only if for every indexed field, there is a sargable predicate on that field and the predicate in notIS NULL
orNOT EXISTS
. -
Modified operation and request count statistics to use long values to support stores with larger numbers of operations.
Added some new JMX bean methods that return total counts as longs. In some cases, for large stores, counts could exceed 2^31, so these new methods are needed to return accurate values for these statistics. The old methods are maintained for compatibility and will return
Integer.MAX_VALUE
if the count gets too large.New methods on the
OperationMetrics
interface:getIntervalTotalOpsLong
getCumulativeTotalOpsLong
New methods on the
RepNodeMXBean
interface:getIntervalTotalOpsLong
getCumulativeTotalOpsLong
getMultiIntervalTotalOpsLong
getMultiIntervalTotalRequestsLong
getMultiCumulativeTotalOpsLong
getMultiCumulativeTotalRequestsLong
The new long values are also reported in .perf files, collector .csv files, and in JSON output.
[#27517] -
The Streams API now supports dynamically adding or removing subscribed tables to or from any running stream without needing to terminate and recreate the stream.
[#27381] -
Users can now use the "describe table" statement to describe the schema of a system table.
[#27602] - Added the new built-in function
regex_like
to the query language. The function is used for string datatype regular expression pattern matching. For example, assume table "persons" has a string field "lastName". The following select statement will qualify records with a lastName starting with the letter "C".
[#27396]select * from persons where regex_like(lastName,"C.*")
- Removed all classes and interfaces from the
oracle.kv.avro
package, which had previously been deprecated. Applications that had been using Avro should be modified to use the table API. [#27387]
Bug and Performance Fixes
-
Fix a bug that caused key statistics to be collected more often than the specified collection period.
[#27615] -
Allow single-partition queries to use secondary indexes. In previous releases, if a query used a secondary index it would be sent to and executed at all the shards of the queried table. However, if the query also specifies a shard key in the
[#27573]WHERE
clause, sending it to all the shards is wasteful, because the query will have results only in the partition corresponding to the shard key. To avoid such waste, previous releases would never choose a secondary index if the query specified a shard key (i.e., if it was a single-partition query). Furthermore, if a single-partition contained anORDER BY
orGROUP BY
clause that required the use of a secondary index, the query would raise an error. The current release lifts these restrictions by allowing single-partition queries to use secondary indexes and be executed only in the partition corresponding to the specified shard key. -
[#27489]
NOT EXISTS
predicates were not considered sargable before. Now they are. For example, assume table "persons" has a column "info" of type JSON, and there is an index on info.age. Then, the following query, which looks for persons that do not have any age information, can now use the index on info.age for efficient execution.select * from persons p where not exists p.info.age
-
Fixed bug where the
[#27468]sum()
andseq_sum()
functions would return 0, instead ofNULL
, if none of the input values were numeric. -
Changed the
[#27582]seq_count()
function to returnNULL
if any of its input items isNULL
. -
Fixed a bug where
[#27628]seq_min
andseq_max
functions would not skip JSON null if it was the first value in the input sequence. -
Changed the way the
[#27492]EXISTS
andNOT EXISTS
operators behave when their input expression returnsNULL
. Before,EXISTS
would return true andNOT EXISTS
false. Now, they both returnNULL
, unless it is known that the input expression will always return at least one item; in the later caseEXISTS
returns true andNOT EXISTS
returns false. -
Fixed a bug where a value-comparison predicate would be erroneously pushed to a multi-key field of an index.
[#27491] -
Fixed two bugs where the GeoJson functions would sometimes throw a
[#27496] [#27508] [#27526]NullPointerException
if an argument is not a valid GeoJson object. -
Fixed a bug where the
[#27546]geo_distance
function would return -1 instead ofNULL
. -
Fixed a bug where SN memory allocation check would sometimes produce misleading logging message.
[#27524] -
Modified the
[#27598]plan migrate-sn
command to continue in the presence of failures if the-force
flag is specified. Administrators can use this new behavior when migrating SNs from failed zones. -
Fix a problem encountered when processing string literals that contain the backslash character.
[#27640] -
Fix a bug where using bulk put API to load data to a table with identity type column, the identity column is not filled in value.
[#27664] -
Fix a bug where
[#27662]min()
/max()
,seq_min()
/seq_max()
of Timestamp values with precision less than 9 returns wrong fractional second.
Utility Changes
- Removed deprecated Admin CLI commands that supported Avro:
ddl add-schema
ddl enable-schema
ddl disable-schema
table add-schema
put kv -json <schemaName>
get kv -json <schemaName>
aggregate kv
show schemas
- Upgraded the
verify-data
plan with the following changes:- Made the
verify-data
plan asynchronous to avoid the timeout of RMI requests. - Added a feature to provide users a list of corrupt keys associated with the error messages as a part of the plan result.
- Added two new flags,
-show-corrupt-files
and-valid-time
.-valid-time
specifies the amount of time for which an existing verification will be considered valid and not be rerun. The default is '10 minutes'.-show-corrupt-files
specifies whether to show corrupt JE log files in the plan result. It is disabled by default.
- Made the
- Updated InitialCapacityPlanning.xls (the capacity planning sheet)
with the following changes:
- Misc. cleanups to text and presentation.
- JVM overheads are now accounted for explcitly when sizing memory requirements.
- Simplified usage by eliminating explicit use of DbCacheSize.
- Support for specifying one index along with the table.
- The Oracle NoSQL Database Hadoop and Hive integration classes can now be used in environments running CDH6 Hadoop and Hive.
- A 'shaded' version of the
antlr4-runtime.jar
library is now shipped with this release; where the path prefix of each class specified in that library has been changed from the stringorg/antlr
tooracle/kv/shaded/org/antlr
. This has been done to avoid ClassLoader conflicts (typically manifested as aNoClassDefFoundError
) when an application runs in an environment that depends on a different, incompatible version of that library; for example, various containers, Hadoop clusters, Hive clients, etc. In general, this will require no changes to current applications. The only case where a change in your application will be necessary is in the unlikely event that the classpath of your application includes theantlr4-runtime.jar
library shipped in this release of Oracle NoSQL Database, rather than a version ofantlr4-runtime.jar
installed in the application's particular runtime environment. In that case, we urge you to change your application's classpath to reference your own instance ofantlr4-runtime.jar
; as the shaded version ofantlr4-runtime.jar
shipped with this product is considered private to Oracle NoSQL Database.[#27616] [#27126]