Skip to content
Open
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions doc/whats-new.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ New Features
Breaking Changes
~~~~~~~~~~~~~~~~

- Change the default value for ``chunk`` in ``open_zarr`` to ``_default`` and remove special mapping of ``"auto"``
to ``{}`` or ``None`` in ``open_zarr``. If ``chunks`` is not set, the default behavior is the same as before.
Explicitly setting ``chunks="auto"`` will match the behavior of ``chunks="auto"`` in
``open_dataset(..., engine="zarr")`` (:issue:`11002` :pull:`11010`).
By `Julia Signell <https://github.com/jsignell>`_.

Deprecations
~~~~~~~~~~~~
Expand Down
10 changes: 6 additions & 4 deletions xarray/backends/zarr.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
from xarray.core.utils import (
FrozenDict,
HiddenKeyDict,
_default,
attempt_import,
close_on_error,
emit_user_level_warning,
Expand Down Expand Up @@ -1400,7 +1401,7 @@ def open_zarr(
store,
group=None,
synchronizer=None,
chunks="auto",
chunks=_default,
decode_cf=True,
mask_and_scale=True,
decode_times=True,
Expand Down Expand Up @@ -1436,8 +1437,9 @@ def open_zarr(
Array synchronizer provided to zarr
group : str, optional
Group path. (a.k.a. `path` in zarr terminology.)
chunks : int, dict, 'auto' or None, default: 'auto'
If provided, used to load the data into dask arrays.
chunks : int, dict, 'auto' or None, default: {} or None
Used to load the data into dask arrays. Default behavior is to use
``chunks={}`` if dask is available, otherwise ``chunks=None``.

- ``chunks='auto'`` will use dask ``auto`` chunking taking into account the
engine preferred chunks.
Expand Down Expand Up @@ -1558,7 +1560,7 @@ def open_zarr(
if from_array_kwargs is None:
from_array_kwargs = {}

if chunks == "auto":
if chunks is _default:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let's issue a DeprecationWarning saying the default will switch to chunks=None to match open_dataset. If they want the current behaviour with dask et al, users should pass in chunks={}

try:
guess_chunkmanager(
chunked_array_type
Expand Down
12 changes: 12 additions & 0 deletions xarray/tests/test_backends.py
Original file line number Diff line number Diff line change
Expand Up @@ -3637,6 +3637,18 @@ def test_chunk_encoding_with_larger_dask_chunks(self) -> None:
) as ds1:
assert_equal(ds1, original)

@requires_dask
def test_chunk_auto_with_small_dask_chunks(self) -> None:
original = Dataset({"u": (("x",), np.zeros(10))}).chunk({"x": 2})
with self.create_zarr_target() as store:
original.to_zarr(store, **self.version_kwargs)
with xr.open_zarr(store, **self.version_kwargs) as default:
assert default.chunks == {"x": (2, 2, 2, 2, 2)}
with xr.open_zarr(store, chunks="auto", **self.version_kwargs) as auto:
assert_identical(auto, original)
assert auto.chunks == {"x": (10,)}
assert auto.chunks != default.chunks

@requires_cftime
def test_open_zarr_use_cftime(self) -> None:
ds = create_test_data()
Expand Down
Loading