Skip to content

Commit acdbb22

Browse files
committed
Update geospatial and variant metadata from thrift spec
1 parent 2a91b8a commit acdbb22

File tree

3 files changed

+34
-11
lines changed

3 files changed

+34
-11
lines changed

package.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@
5454
"test": "vitest run"
5555
},
5656
"devDependencies": {
57-
"@types/node": "24.7.2",
58-
"@vitest/coverage-v8": "3.2.4",
59-
"eslint": "9.37.0",
60-
"eslint-plugin-jsdoc": "61.1.4",
57+
"@types/node": "24.9.1",
58+
"@vitest/coverage-v8": "4.0.2",
59+
"eslint": "9.38.0",
60+
"eslint-plugin-jsdoc": "61.1.7",
6161
"hyparquet-compressors": "1.1.1",
6262
"typescript": "5.9.3",
63-
"vitest": "3.2.4"
63+
"vitest": "4.0.2"
6464
}
6565
}

src/metadata.js

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,10 @@ export function parquetMetadata(arrayBuffer, { parsers, geoparquet = true } = {}
138138
num_values: column.field_3.field_5,
139139
total_uncompressed_size: column.field_3.field_6,
140140
total_compressed_size: column.field_3.field_7,
141-
key_value_metadata: column.field_3.field_8,
141+
key_value_metadata: column.field_3.field_8?.map((/** @type {any} */ kv) => ({
142+
key: decode(kv.field_1),
143+
value: decode(kv.field_2),
144+
})),
142145
data_page_offset: column.field_3.field_9,
143146
index_page_offset: column.field_3.field_10,
144147
dictionary_page_offset: column.field_3.field_11,
@@ -188,9 +191,9 @@ export function parquetMetadata(arrayBuffer, { parsers, geoparquet = true } = {}
188191
ordinal: rowGroup.field_7,
189192
}))
190193
/** @type {KeyValue[] | undefined} */
191-
const key_value_metadata = metadata.field_5?.map((/** @type {any} */ keyValue) => ({
192-
key: decode(keyValue.field_1),
193-
value: decode(keyValue.field_2),
194+
const key_value_metadata = metadata.field_5?.map((/** @type {any} */ kv) => ({
195+
key: decode(kv.field_1),
196+
value: decode(kv.field_2),
194197
}))
195198
const created_by = decode(metadata.field_6)
196199

@@ -254,7 +257,10 @@ function logicalType(logicalType) {
254257
if (logicalType?.field_13) return { type: 'BSON' }
255258
if (logicalType?.field_14) return { type: 'UUID' }
256259
if (logicalType?.field_15) return { type: 'FLOAT16' }
257-
if (logicalType?.field_16) return { type: 'VARIANT' }
260+
if (logicalType?.field_16) return {
261+
type: 'VARIANT',
262+
specification_version: logicalType.field_16.field_1,
263+
}
258264
if (logicalType?.field_17) return {
259265
type: 'GEOMETRY',
260266
crs: decode(logicalType.field_17.field_1),

src/types.d.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ export type LogicalType =
186186
| { type: 'BSON' }
187187
| { type: 'UUID' }
188188
| { type: 'FLOAT16' }
189-
| { type: 'VARIANT' }
190189
| { type: 'DECIMAL', precision: number, scale: number }
191190
| { type: 'TIME', isAdjustedToUTC: boolean, unit: TimeUnit }
192191
| { type: 'TIMESTAMP', isAdjustedToUTC: boolean, unit: TimeUnit }
193192
| { type: 'INTEGER', bitWidth: number, isSigned: boolean }
193+
| { type: 'VARIANT', specification_version?: number }
194194
| { type: 'GEOMETRY', crs?: string }
195195
| { type: 'GEOGRAPHY', crs?: string, algorithm?: EdgeInterpolationAlgorithm }
196196

@@ -235,6 +235,7 @@ export interface ColumnMetaData {
235235
bloom_filter_offset?: bigint
236236
bloom_filter_length?: number
237237
size_statistics?: SizeStatistics
238+
geospatial_statistics?: GeospatialStatistics
238239
}
239240

240241
type ColumnCryptoMetaData = Record<string, never>
@@ -289,6 +290,22 @@ interface SizeStatistics {
289290
definition_level_histogram?: bigint[]
290291
}
291292

293+
export interface GeospatialStatistics {
294+
bbox?: BoundingBox
295+
geospatial_types?: number[]
296+
}
297+
298+
export interface BoundingBox {
299+
xmin: number
300+
xmax: number
301+
ymin: number
302+
ymax: number
303+
zmin?: number
304+
zmax?: number
305+
mmin?: number
306+
mmax?: number
307+
}
308+
292309
interface PageEncodingStats {
293310
page_type: PageType
294311
encoding: Encoding

0 commit comments

Comments
 (0)