datalake_fdw: NUMERIC/DECIMAL in the Parquet format layer
@MisterRaindrop ci sta già lavorando.
Dal 13/9/2026.
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Summary
contrib/datalake_fdw's Parquet format layer (#1951) refuses numeric columns at CREATE TABLE ... USING iceberg. DECIMAL is the most common column type in real lake tables, so this is the first type to add.
What has to be decided
- Storage form. Parquet stores DECIMAL four ways (INT32, INT64, FIXED_LEN_BYTE_ARRAY, BYTE_ARRAY). Iceberg's spec fixes the writer to
decimal(P,S)with P <= 38 backed by fixed-length bytes; the reader has to accept all four. - Unconstrained
numeric.atttypmod = -1has no precision or scale. Computing((typmod - 4) >> 16) & 65535without checking gives precision 65535 / scale 65531, so barenumericcolumns silently match nothing (the trap in lithium-tech/teavalidate.cpp:59-61). Iceberg needs P and S, so the likely answer is to refuse barenumericatCREATE TABLEand requirenumeric(P,S). - Precision above 38. PostgreSQL allows up to 1000;
decimal128caps at 38. Refuse atCREATE TABLE. - Conversion.
NumericVar<-> two's-complement int128, the way tea'sbridge.cpp:269-277andnumeric_var.cppdo it, withNaN/Infinityrefused on write.
Where
format/format_types.h/arrow_support.cpp:dl_format_type_refusal()decides whatCREATE TABLEaccepts; the mapping toarrow::decimal128(P, S)goes next to the other types.arrow_builder.cpp/arrow_decode.c: append and decode. The decoder reads the Arrow C data interface directly; the format string isd:P,S.- Tests in
test/automation/sqlrepo/smoke/format_parquet/, plusCREATE TABLErefusals iniceberg_am_reject.sql.
Deferred from #1951 on purpose: the framework there is settled, the type work is separate.
- Lingua principale
- C
- Stelle
- 1.4k
- Fork
- 248
- Merge medio
- 4g 10h
- PR unite (30g)
- 40
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di apache/cloudberry
-
type: Bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
apache/cloudberry#1885 · 2 reazioni ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 86/100
apache/cloudberry#1825 ·
-
type: Bug
Difficoltà 3/5 1-2 giorni Idoneità per principianti 65/100
apache/cloudberry#2048 · 1 reazione ·
-
type: Bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 40/100
apache/cloudberry#2047 ·
-
type: Bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 45/100
apache/cloudberry#2046 · 1 commento ·
Tutte le issue di apache/cloudberry
Issue simili
-
bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
bradcypert/plum#53 ·
-
Component: GLib
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
-
Status: Opened
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
nextbsd/nextbsd-userland#285 ·