Skip to content

Commit 291790f

Browse files
authored
GEOMESA-3577 FSDS - Distinguish between z2 and xz2 columns for partitioning (#3544)
1 parent 67edb98 commit 291790f

1 file changed

Lines changed: 22 additions & 10 deletions

File tree

  • geomesa-fs/geomesa-fs-storage/geomesa-fs-storage-parquet-io/src/main/scala/org/locationtech/geomesa/fs/storage/parquet/io/geometry

geomesa-fs/geomesa-fs-storage/geomesa-fs-storage-parquet-io/src/main/scala/org/locationtech/geomesa/fs/storage/parquet/io/geometry/ZValues.scala

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.apache.parquet.schema.{PrimitiveType, Types}
1414
import org.geotools.api.feature.simple.SimpleFeatureType
1515
import org.locationtech.geomesa.fs.storage.parquet.io.geometry.ZValues.ZValueField
1616
import org.locationtech.geomesa.utils.text.StringSerialization.alphaNumericSafeString
17-
import org.locationtech.jts.geom.Geometry
17+
import org.locationtech.jts.geom.{Geometry, Point}
1818

1919
import java.util.concurrent.atomic.AtomicInteger
2020

@@ -41,15 +41,17 @@ object ZValues {
4141
* @return
4242
*/
4343
def apply(sft: SimpleFeatureType): ZValues = {
44-
val bboxes = sft.getAttributeDescriptors.asScala.toSeq.flatMap { d =>
44+
val fields = sft.getAttributeDescriptors.asScala.toSeq.flatMap { d =>
4545
val binding = d.getType.getBinding
46-
if (classOf[Geometry].isAssignableFrom(binding)) {
47-
Some(ZValueField(d.getLocalName))
46+
if (binding == classOf[Point]) {
47+
Some(ZValueField.z2(d.getLocalName))
48+
} else if (classOf[Geometry].isAssignableFrom(binding)) {
49+
Some(ZValueField.xz2(d.getLocalName))
4850
} else {
4951
None
5052
}
5153
}
52-
ZValues(bboxes)
54+
ZValues(fields)
5355
}
5456

5557
/**
@@ -63,11 +65,18 @@ object ZValues {
6365
object ZValueField {
6466

6567
val ZValueFieldPrefix = "__"
66-
val ZValueFieldSuffix = "_z__"
68+
val Z2ValueFieldSuffix = "_z2__"
69+
val XZ2ValueFieldSuffix = "_xz2__"
6770

68-
def apply(geometry: String, encoded: Boolean = false): ZValueField = {
71+
def z2(geometry: String, encoded: Boolean = false): ZValueField = {
6972
val geom = if (encoded) { geometry } else { alphaNumericSafeString(geometry) }
70-
val zValue = s"$ZValueFieldPrefix$geom$ZValueFieldSuffix"
73+
val zValue = s"$ZValueFieldPrefix$geom$Z2ValueFieldSuffix"
74+
ZValueField(geom, zValue)
75+
}
76+
77+
def xz2(geometry: String, encoded: Boolean = false): ZValueField = {
78+
val geom = if (encoded) { geometry } else { alphaNumericSafeString(geometry) }
79+
val zValue = s"$ZValueFieldPrefix$geom$XZ2ValueFieldSuffix"
7180
ZValueField(geom, zValue)
7281
}
7382

@@ -78,8 +87,11 @@ object ZValues {
7887
* @return
7988
*/
8089
def fromFieldName(field: String): Option[ZValueField] = {
81-
if (field.startsWith(ZValueFieldPrefix) && field.endsWith(ZValueFieldSuffix)) {
82-
Some(ZValueField(field.substring(ZValueFieldPrefix.length, field.length - ZValueFieldSuffix.length), field))
90+
if (field.startsWith(ZValueFieldPrefix)) {
91+
Seq(Z2ValueFieldSuffix, XZ2ValueFieldSuffix).collectFirst {
92+
case suffix if field.endsWith(suffix) =>
93+
ZValueField(field.substring(ZValueFieldPrefix.length, field.length - suffix.length), field)
94+
}
8395
} else {
8496
None
8597
}

0 commit comments

Comments
 (0)