Hey Austin, thanks for bringing this up! I'm +1 to this direction but would like to provide some nuance.
I opened a PR a few days ago to fully upgrade Date to a portable type ( #37830 <https://github.com/apache/beam/pull/37830>), addressing the same Iceberg issue you pointed to (#37823 <https://github.com/apache/beam/issues/37823>). I plan to address comments and get it in when I'm back from OOO. This should take care of everything for Date, minus your bullet point #4 about integrating it into JdbcUtil.java The Date type is relatively straightforward. Time and DateTime may need some more thought though, specifically around the level of precision we want to support. We discussed strategy in a previous thread ( https://lists.apache.org/thread/xw6myhcr60q2c6nd6jb6gv395k3z2lyn) and doc ( https://s.apache.org/beam-timestamp-strategy), and reached an understanding that for most flexibility we should parameterize time types by precision (e.g. DateTime(p), Timestamp(p), Time(p)). @Claude van der Merwe <[email protected]> made a start by implementing the parameterized Timestamp type in Java #36705 <https://github.com/apache/beam/pull/36705> (not yet portable). We can do something similar for DateTime and Time. Just want to make sure we keep this in mind when implementing things, but it's a good direction. I'm happy that we're giving more attention to portable types. Best, Ahmed On Mon, Mar 16, 2026 at 4:36 PM Austin Bennett <[email protected]> wrote: > Hey folks, > > I'd like to propose making the existing Date, Time, and DateTime logical > types standard portable types. This unblocks cross-language Date support — > particularly Python SDK → IcebergIO (#37823). > > The Java SDK already defines these with java.time and portable URNs > (beam:logical_type:date:v1, etc.), but they're missing from schema.proto's > LogicalTypes.Enum and SchemaTranslation.STANDARD_LOGICAL_TYPES, so they > degrade to UnknownLogicalType across the language boundary. > > Proposed changes: > > 1. Add DATE/TIME/DATETIME to LogicalTypes.Enum in schema.proto > 2. Register them in STANDARD_LOGICAL_TYPES (SchemaTranslation.java) > 3. Add Python SDK logical type classes (datetime.date, datetime.time) > 4. Update JdbcUtil.java to also recognize the portable URNs (currently it > only handles its own legacy "DATE"/"TIME" identifiers) > > I'm aware that JdbcIO currently uses its own non-portable logical types > for dates and times, and Python has a temporary JdbcDateType/JdbcTimeType > shim to match. This change would let us start deprecating those in favor of > the standard portable types, moving toward #28359. > > All additive, and follows the MicrosInstant/FixedBytes pattern. Happy to > put up the PRs [ first one here: https://github.com/apache/beam/pull/37870 > ] — wanted to flag it since it touches the portable schema proto. OK if we > don't like this direction. Please advise. > > Related: #37823, #25946, #28359 > Thanks! > Austin > >
