variables=["sst", "err"] writes a subset, in that order. By default all data variables are written except CF grid_mapping containers, whose content goes into <SRS>.
Variables without the composition dimension (a static land mask, say) are read from the first source.
block_size= takes a dict keyed by variable; a plain list applies only when every variable has that rank.
If the Dataset’s names differ from the files’, give dict-form sources an "arrays": {"temp": "/sst"} mapping. A single "array" is refused when several variables are written, because it would be ambiguous.
Variables in separate files
Many collections keep each variable in its own file per time step. Pass a mapping from variable name to its own source list:
Each list is resolved on its own, so lists may differ in length when sources carry an "index" (a variable that starts later, or has missing days): see Compositions and the GHRSST MUR example, where one of five variables exists for only part of the record.