[Bug]: Beam SQL Parquet tables fail on TIME columns: Unhandled logical type beam:logical_type:time:v1
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
Piste de recherche
Start with AvroUtils.getFieldSchema and genericFromBeamField, where the issue identifies the missing TIME identifier handling, and compare them with the DATE conversion paths. Read the Beam SQL TIME mapping in CalciteUtils and inspect the Avro time-millis/time-micros conversions. Add a JUnit regression test under sdks/java/extensions/sql using the DirectRunner repro; done means TIME values can be written to and read back from a Parquet table. The Avro time unit choice needs maintainer guidance.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
What happened?
A Beam SQL Parquet table (CREATE EXTERNAL TABLE ... TYPE parquet) with a TIME column can't be written. On master (b0c68c4a4f7), the INSERT fails with:
java.lang.RuntimeException: Unhandled logical type beam:logical_type:time:v1
Minimal repro, run as a JUnit test in sdks/java/extensions/sql with the DirectRunner (p is a TestPipeline):
BeamSqlEnv env = BeamSqlEnv.inMemory(new ParquetTableProvider());
env.executeDdl("CREATE EXTERNAL TABLE t (c TIME) TYPE parquet LOCATION '/tmp/time-table/'");
BeamSqlRelUtils.toPCollection(p, env.parseQuery("INSERT INTO t VALUES (TIME '12:34:56')"));
p.run().waitUntilFinish(); // RuntimeException: Unhandled logical type beam:logical_type:time:v1
Calling AvroUtils.toAvroSchema on the table's schema, which is what ParquetTable does (L60, L69, L111), throws the same exception.
Cause. The two sides use different identifiers for TIME:
- Beam SQL maps
TIMEtoFieldType.logicalType(SqlTypes.TIME), whose identifier isbeam:logical_type:time:v1(CalciteUtils L114). AvroUtils.getFieldSchemaonly recognizes the legacy"TIME"identifier (L1224). Every other identifier falls through to theUnhandled logical typeexception (L1242).genericFromBeamFieldhas the same gap (L1389, L1406).
DATE does handle both identifiers: "DATE".equals(identifier) || SqlTypes.DATE.getIdentifier().equals(identifier) (L1220). That's why DATE columns work and TIME columns don't.
Expected: TIME columns can be written and read back. The CREATE EXTERNAL TABLE docs list DATE, TIME, TIMESTAMP as supported Parquet types.
A fix probably needs a design call. Should SqlTypes.TIME (a java.time.LocalTime) map to Avro time-micros (long) or time-millis (int)? Reading the column back also has to convert to LocalTime, and the time-millis/time-micros branches of the Avro-to-Beam conversion currently return the raw int/long. I'm happy to send a fix once a maintainer confirms which mapping they'd like.
For reference, here is what AvroUtils.toAvroSchema produces today for each type, from a temporary test that runs CREATE EXTERNAL TABLE ... TYPE parquet for each column type:
| Beam SQL type | Beam field type | Avro type |
|---|---|---|
| TINYINT, SMALLINT, INTEGER | BYTE, INT16, INT32 | int |
| BIGINT | INT64 | long |
| FLOAT | FLOAT | float |
| DOUBLE | DOUBLE | double |
| DECIMAL | DECIMAL | bytes (decimal) |
| BOOLEAN | BOOLEAN | boolean |
| DATE | SqlTypes.DATE | int (date) |
| TIME | SqlTypes.TIME | exception |
| TIMESTAMP | DATETIME | long (timestamp-millis) |
| CHAR, VARCHAR | STRING | string |
| BINARY, VARBINARY | BYTES | bytes |
Several rows of the docs' Parquet type table don't match this: the int types, FLOAT, DATE and TIME. I'll file that docs correction separately.
Issue Priority
Priority: 2 (default / most bugs should be filed as P2)
Issue Components
- Component: Python SDK
- Component: Java SDK
- Component: Go SDK
- Component: Typescript SDK
- Component: IO connector
- Component: Beam YAML
- Component: Beam examples
- Component: Beam playground
- Component: Beam katas
- Component: Website
- Component: Infrastructure
- Component: Spark Runner
- Component: Flink Runner
- Component: Prism Runner
- Component: Hazelcast Jet Runner
- Component: Google Cloud Dataflow Runner
- Langage dominant
- Java
- Étoiles
- 8.7k
- Forks
- 4.8k
- Merge moyen
- 2 j 12 h
- PR mergées (30 j)
- 371
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de apache/beam
-
Release notes links wrongOuverteawaiting triage bug P3
Difficulté 1/5 Moins d'une heure Accessibilité débutants 67/100
apache/beam#41197 · 2 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: [Python] WriteToJson silently rounds floats to 10 decimal placesPeut-être pris @Abhi2939 l’a pris il y a 1 jour. Ouverteio P2 python yaml
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
apache/beam#41102 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
apache/beam#39624 · 2 réactions ·
Les mainteneurs répondent en général sous 1 jour
-
[Bug]: PubsubIO used in batch incorrect batch cutoff sizePeut-être pris @1fanwang l’a pris il y a 78 jours. Ouvertebug io P3 pinned pubsub
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
apache/beam#28011 · 4 commentaires ·
Les mainteneurs répondent en général sous 1 jour
-
build P3 sub-task
Difficulté 1/5 Moins d'une heure Accessibilité débutants 68/100
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de apache/beam
Issues similaires
-
Enhancing the Issue TemplateOuverte
Difficulté 2/5 1-3 heures Accessibilité débutants 66/100
SasanLabs/VulnerableApp#912 ·
Les mainteneurs répondent en général sous 1 jour
-
area/build area/events area/storage area/storage/kafkasql area/storage/sql
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
Apicurio/apicurio-registry#11079 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
OpenAEV-Platform/openaev#9139 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
Les mainteneurs répondent en général sous 1 jour
-
desktop edt not responding
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100