This is the prelude to the first stable release. This major release contains API breaking changes.
Code has been refactored to make it more agile and less error-prone. Two major changes have been implemented:
zarr_store class is no longer used in the public-facing API. Most store-oriented tasks are now handled through the zarr class, including creating a new store.zarr_array will create it in the store if it does not yet exist, and attach itself to its parent, usually a zarr_group but it could also be a zarr instance in the case of a single-array store.These changes impact the signature of several methods:
zarr$new() has several new arguments following the first store argument. All additional arguments are optional so existing code will remain functional. The store argument has additional functionality.zarr_group$new() and zarr_array$new() no longer have the store argument.Other features:
zarr_array by indices can use [<-.zarr_array.zarr$save_to() method can save a zarr object to a new store. This is handy to save a memory store to disk, to convert a v.2 store to a v.3 store, or to get a local copy of a remote store, among other uses. Parallel reads from HTTP and S3 stores speeds up the copying.zarr in class zarr_node to retrieve the zarr instance that manages the node.Minor changes:
array_builder class has a field data_type_from_storage.mode that can make a Zarr data type from an R storage mode.zarr.json writes arrays for shape and chunk_shape for 1D axes.ref convention uses released version v2.0.0.chunk_cache_bytes.zarr_array$raw_read field can be set to control conversion of the Zarr array fill_value to R's NA upon reading (FALSE, default) or to skip the conversion (TRUE) for faster loading when data is known not to have fill values or when these are managed at the application level.s3_list_dir() can be used to walk the directory listing of an S3 bucket to locate Zarr stores.zarr_array::resize() method with which arrays can be resized, growing or shrinking across all dimensions simultaneously, including on the lower end of the dimensions. When changing the "low" side of the dimensions, which is always by full chunks, the indexing of all data changes to use the new origin.zarr_array::promote() method which adds a dimension to the array.zarr_object base class for name and attribute management.dirty field can be explicitly set on any node to force writing of the metadata to the store.chunk_key_encoding is automatically set in array metadata.optimal_chunking() function to determine optimal chunking for an array, optionally applying different weights to dimensions or groups of dimensions.array_builder class and written to like regular arrays.zarr_node$post_open() method allows for processing that requires the Zarr hierarchy to be in place.zarr_node$relative_path() method retrieves the relative path from the node to another node or a path string. zarr_node$absolute_path() turns a relative path starting from the current node into an absolute path. walk_path() traverses the Zarr hierarchy from the current node to a target node using relative node names, returning the requested node.zarr_options() function.as_zarr(), small arrays are not compressed. This is controlled by the Zarr.options$min_compress setting.attribute() method for zarr_group and zarr_array instances.zarr_conventions() function returns data.frame of supported conventions.future for optional parallel processing of chunks and shards.compression codec has to be one of those supported by the v.3 core specification or zstd. Filters are not yet supported.blosc package is now imported as it is the default compression codec.zstd compression codec added.integer64 data.