Hi everyone,

A gentle reminder about this proposal for native GEOGRAPHY support in Flink
SQL and Table API [1], for those who may have missed the original
discussion.

[1]
https://docs.google.com/document/d/1rpOTETT_Ui3TlEGioUr2NKJ1p1dlxjJQudXHndxBpO0/edit

Best regards,

David

On Tue, Jun 23, 2026 at 8:43 PM David Chaava <[email protected]>
wrote:

> Hi Sergey,
>
> Thanks for raising this question.
>
> I did consider Calcite's existing GEOMETRY type. The key reason not to use
> it is that GEOMETRY and GEOGRAPHY represent different user-facing models.
>
> GEOMETRY is planar: coordinates are interpreted in a flat coordinate
> space, and operations such as distance, area, intersection, buffering, and
> containment are modeled in that planar space. This is the right model for
> projected local data, CAD/GIS-style datasets, indoor maps, building
> footprints, parcels, or any workload where the user intentionally chooses a
> planar CRS.
>
> GEOGRAPHY is different: coordinates are longitude/latitude, the CRS is
> part of the type contract, and operations are expected to use
> spherical/geodesic semantics. This is the right model for GPS points,
> routing, and other workloads involving the Earth’s surface.
>
> If Flink represented GEOGRAPHY internally as Calcite GEOMETRY, we would
> lose that distinction at the planner boundary. That would make it harder to
> add a future Flink GEOMETRY type cleanly, and it would make function typing
> ambiguous. For example, ST_DISTANCE over GEOGRAPHY should produce a
> geodesic distance over the Earth's surface, while ST_DISTANCE over GEOMETRY
> should produce a planar distance in the coordinate system chosen by the
> user. These should be different overloads with different semantics, not the
> same planner type with out-of-band interpretation.
>
> Regarding contributing GEOGRAPHY to Calcite first: I think that’s a
> reasonable long-term direction. For this FLIP, however, introducing
> GEOGRAPHY as a native Flink logical type allows us to move forward
> independently of the Calcite contribution and release process. An upstream
> Calcite contribution could still be pursued as a possible future follow-up.
>
> The plan we propose to proceed in this FLIP is: (1) GEOGRAPHY as a native
> Flink logical type; (2) bridged through Flink's Calcite integration layer,
> following Flink’s BITMAP data type implementation pattern; (3) an upstream
> Calcite GEOGRAPHY contribution left as a possible future follow-up if the
> Calcite community shows interest.
>
> I've updated the FLIP to make the Calcite boundary explicit and noted
> Calcite GEOMETRY as a considered alternative, with an explanation that it
> would collapse planar and spherical/geodesic use cases into one planner
> type and make geography-specific function modeling ambiguous.
>
> Best,
>
> David
>
>
> On Sat, Jun 20, 2026 at 11:38 PM Sergey Nuyanzin <[email protected]>
> wrote:
>
>> or a follow up question: have you considered first adding GEOGRAPHY
>> type to Calcite and then using it from Flink?
>>
>> On Sat, Jun 20, 2026 at 11:33 PM Sergey Nuyanzin <[email protected]>
>> wrote:
>> >
>> > Hi David
>> >
>> > since you mentioned Calcite and mentioned type name GEOGRAPHY
>> >
>> > why do we need a new type instead of using existing Calcite's type
>> > which is called GEOMETRY[1]?
>> >
>> > [1]
>> https://github.com/apache/calcite/blob/00aec5236cf9c57ce90eb4a30f777798c3b52abb/core/src/main/java/org/apache/calcite/sql/type/SqlTypeName.java#L137
>> >
>> > On Fri, Jun 12, 2026 at 11:17 PM David Chaava via dev
>> > <[email protected]> wrote:
>> > >
>> > > Hi Dylan,
>> > >
>> > >
>> > >
>> > > Thanks for the detailed review. I clarified these points in the
>> proposal.
>> > >
>> > >
>> > >
>> > > Q1: The core proposal of this FLIP is the native `GEOGRAPHY` type and
>> the
>> > > interoperability contract support in Flink: SQL/planner type support,
>> > > runtime representation, serialization/state, SQL Gateway/compiled plan
>> > > support, and connector/format interoperability with
>> > >
>> > > Iceberg and Parquet. The FLIP does not intend that Flink core will
>> become a
>> > >
>> > > replacement for dedicated geospatial projects such as Sedona.
>> > >
>> > >
>> > >
>> > > I added clarification of the function scope in the proposal doc. The
>> v1
>> > > function surface is intentionally small and is not meant to become a
>> full
>> > > geospatial function catalog. Constructor
>> > >
>> > > and conversion functions are part of making the native type usable for
>> > > interoperability purposes. Richer geospatial processing, spatial
>> joins,
>> > > indexing, reprojection, and larger
>> > >
>> > > PostGIS/Sedona-like function coverage remains outside the scope of
>> this
>> > > FLIP.
>> > >
>> > >
>> > >
>> > > Q2: Regarding Sedona, I added clarification in the proposal doc that
>> > > `GeographyData` is a Flink internal runtime representation, not a
>> required
>> > > computation API for Sedona. The stable interoperability path for
>> Sedona and
>> > > similar projects is ISO WKB via
>> > >
>> > > `GeographyData.toBytes()`, `ST_ASWKB`, and `ST_GEOGFROMWKB`. Sedona
>> may
>> > > still
>> > >
>> > > convert values into its own internal representation for computation
>> and
>> > > produce
>> > >
>> > > Flink `GEOGRAPHY` values back through WKB.
>> > >
>> > >
>> > >
>> > > Q3: For display and casts, I added clarification in the proposal that
>> > > display rendering is separate from SQL casts. SQL Client,
>> > > `TableResult.print()`, and SQL Gateway textual results should render
>> > > `GEOGRAPHY` values as WKT, equivalent to `ST_ASTEXT`, for
>> human-readable
>> > > output. This display path does not imply an implicit cast to
>> `STRING`. I
>> > > also clarified that Java `toString()` should not be treated as the SQL
>> > > conversion contract; explicit textual conversion remains `ST_ASTEXT`.
>> > >
>> > >
>> > >
>> > > Q4: For SQL semantics, I added explicit wording for equality,
>> grouping, and
>> > >
>> > > comparability. The proposed v1 semantics are representation-based:
>> equality
>> > > and
>> > >
>> > > hashing are based on the stored/canonical WKB representation, not
>> > > topological
>> > >
>> > > geospatial equality. `GROUP BY` and `DISTINCT` use the same
>> equality/hash
>> > >
>> > > semantics. Topological equality, if exposed, is a separate geospatial
>> > > predicate
>> > >
>> > > and should not be confused with SQL grouping semantics. `GEOGRAPHY`
>> is not
>> > >
>> > > order-comparable, so ordering comparisons such as `<`, `<=`, `>`,
>> `>=`, as
>> > > well
>> > >
>> > > as `MIN` and `MAX`, are not defined for this type unless users
>> explicitly
>> > >
>> > > convert the value to another representation, such as WKT or WKB.
>> > >
>> > >
>> > >
>> > > For the minor issues:
>> > >
>> > > - You are right about the JTS license. I corrected the license note.
>> JTS
>> > > would be included as a dependency (similar to how it’s included in
>> Apache
>> > > Sedona [1]), following Apache licensing guidelines for Eclipse
>> Distribution
>> > > License 1.0 [2].
>> > >
>> > > - I fixed the `GEOMETRYCOLLECTION` inconsistency. It remains listed
>> as a
>> > > supported standard 2D WKB subtype and was removed from Future Work.
>> > >
>> > >
>> > >
>> > > I hope this clarifies the intent and addresses your questions.
>> > >
>> > >
>> > >
>> > > Best,
>> > >
>> > > David
>> > >
>> > > [1] - https://github.com/apache/sedona/blob/master/pom.xml#L155-L159
>> > >
>> > > [2] - https://www.apache.org/legal/resolved.html
>> > >
>> > >
>> > > On Thu, Jun 11, 2026 at 11:25 AM dylanhz <[email protected]> wrote:
>> > >
>> > > > Hi David,
>> > > >
>> > > > Thanks for the proposal. The FLIP is very detailed and explains the
>> > > > motivation clearly. I have a few questions about the scope and
>> semantics.
>> > > >
>> > > > 1. What is the expected scope of Flink in this area? Should Flink
>> only
>> > > > provide the native type and interoperability with
>> formats/connectors, or
>> > > > also maintain geospatial computation functions? I can understand
>> having
>> > > > constructor/conversion functions in core, but the supported scope
>> and
>> > > > long-term maintenance cost of domain-specific computation functions
>> seem to
>> > > > be an important concern. I am not sure whether those functions
>> should be
>> > > > maintained by Flink rather than a dedicated geospatial project such
>> as
>> > > > Sedona.
>> > > >
>> > > > 2. Have we considered how Sedona would adapt to this new type? Is
>> the
>> > > > proposed GeographyData interface enough for Sedona to consume and
>> produce
>> > > > GEOGRAPHY values efficiently? Or would Sedona not be able to
>> directly use
>> > > > Flink’s internal interface for computation and still need to
>> convert to its
>> > > > own internal representation?
>> > > >
>> > > > 3. If GEOGRAPHY does not support cast to STRING, how will values be
>> > > > displayed in SQL Client, TableResult.print(), and SQL Gateway
>> results? Do
>> > > > we plan to add a display-specific converter, or should explicit
>> cast to
>> > > > STRING be supported?
>> > > >
>> > > > 4. Could the FLIP define the SQL semantics of GEOGRAPHY more
>> explicitly?
>> > > > For example, equality, comparability, GROUP BY and DISTINCT .
>> > > >
>> > > > A couple of minor issues:
>> > > >
>> > > > a. The JTS license in the document seems inaccurate.
>> > > >
>> > > > b. GEOMETRYCOLLECTION is listed as supported, but also appears in
>> future
>> > > > work.
>> > > >
>> > > >
>> > > > ----------
>> > > > Best regards,
>> > > > dylanhz
>> > > >
>> > > >
>> > > >
>> > > >
>> > > > > 2026年6月9日 02:32,David Chaava via dev <[email protected]> 写道:
>> > > > >
>> > > > > Hi Martijn,
>> > > > >
>> > > > >
>> > > > >
>> > > > > Thanks for raising this point. I updated the proposal with a
>> dedicated
>> > > > > Calcite / Planner Integration section to clarify how `GEOGRAPHY`
>> and the
>> > > > > proposed `ST_*` functions fit into Flink's SQL/planner path.
>> > > > >
>> > > > >
>> > > > >
>> > > > > Please let us know if this addresses the question or if there are
>> any
>> > > > > additional
>> > > > > planner details you would like us to cover.
>> > > > >
>> > > > >
>> > > > >
>> > > > > Thanks
>> > > > >
>> > > > > On Mon, Jun 8, 2026 at 11:46 AM Martijn Visser <
>> [email protected]
>> > > > >
>> > > > > wrote:
>> > > > >
>> > > > >> Hi David,
>> > > > >>
>> > > > >> Thanks for the FLIP. It doesn't contain any
>> information/reference to
>> > > > >> Calcite though. Are you not planning to leverage Calcite at all
>> for
>> > > > >> this?
>> > > > >>
>> > > > >> Best regards,
>> > > > >>
>> > > > >> Martijn
>> > > > >>
>> > > > >> Op vr 5 jun 2026 om 10:19 schreef David Chaava via dev <
>> > > > >> [email protected]>:
>> > > > >>>
>> > > > >>> lHi everyone,
>> > > > >>>
>> > > > >>> I would like to start a discussion on FLIP-XXX: GEOGRAPHY type
>> in Flink
>> > > > >> SQL
>> > > > >>> and Table API [1].
>> > > > >>>
>> > > > >>> Flink currently has no first-class geospatial type. Users
>> working with
>> > > > >>> geographic data are forced into unsatisfying workarounds —
>> encoding
>> > > > >>> geometries as raw strings, storing binary blobs, or pulling in
>> external
>> > > > >>> libraries with no SQL-level integration. None of these options
>> are
>> > > > >>> ergonomic, interoperable, or type-safe.
>> > > > >>>
>> > > > >>> We propose introducing a native GEOGRAPHY type to Flink SQL and
>> the
>> > > > Table
>> > > > >>> API, bringing first-class geospatial support to streaming and
>> batch
>> > > > >>> pipelines. The key changes are:
>> > > > >>>
>> > > > >>> 1. New GEOGRAPHY Type - A dedicated logical type representing
>> > > > geospatial
>> > > > >>> values (points, lines, polygons, etc.) following the WKT/WKB
>> standard,
>> > > > >> with
>> > > > >>> proper serialization and catalog integration.
>> > > > >>>
>> > > > >>> 2. Built-in Geospatial Functions - A set of SQL functions (e.g.
>> > > > >>> ST_Distance, ST_Contains, ST_AsText) enabling spatial
>> predicates and
>> > > > >>> transformations directly in SQL queries.
>> > > > >>>
>> > > > >>> 3. Connector & Format Support - Pluggable encoding support so
>> > > > connectors
>> > > > >>> can read and write GEOGRAPHY values in standard formats (WKT,
>> WKB,
>> > > > >> GeoJSON).
>> > > > >>>
>> > > > >>> Looking forward to your feedback!
>> > > > >>>
>> > > > >>> Best regards,
>> > > > >>> David Chaava
>> > > > >>>
>> > > > >>> [1]
>> > > > >>>
>> > > > >>
>> > > >
>> https://docs.google.com/document/d/1rpOTETT_Ui3TlEGioUr2NKJ1p1dlxjJQudXHndxBpO0/edit?usp=sharing
>> > > > >>
>> > > >
>> > > >
>> >
>> >
>> >
>> > --
>> > Best regards,
>> > Sergey
>>
>>
>>
>> --
>> Best regards,
>> Sergey
>>
>

Reply via email to