Column.pyarrow_field(self, name: str) does not recurse over subfields, so the output pyarrow fields in nested types are always nullable. For example, a dataframely struct with one optional field and one required field will result in a pyarrow structure with two optional fields.