@loaders.gl/parquet 5.0.0-alpha.2 → 5.0.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (336) hide show
  1. package/LICENSE +1 -1
  2. package/dist/bundled.d.ts +1 -1
  3. package/dist/bundled.d.ts.map +1 -1
  4. package/dist/bundled.js.map +1 -1
  5. package/dist/delta-format.d.ts +9 -0
  6. package/dist/delta-format.d.ts.map +1 -0
  7. package/dist/delta-format.js +12 -0
  8. package/dist/delta-format.js.map +1 -0
  9. package/dist/delta-source-loader-types.d.ts +27 -0
  10. package/dist/delta-source-loader-types.d.ts.map +1 -0
  11. package/dist/delta-source-loader-types.js +28 -0
  12. package/dist/delta-source-loader-types.js.map +1 -0
  13. package/dist/delta-source.d.ts +48 -0
  14. package/dist/delta-source.d.ts.map +1 -0
  15. package/dist/delta-source.js +222 -0
  16. package/dist/delta-source.js.map +1 -0
  17. package/dist/delta-types.d.ts +38 -0
  18. package/dist/delta-types.d.ts.map +1 -0
  19. package/dist/delta-types.js +5 -0
  20. package/dist/delta-types.js.map +1 -0
  21. package/dist/geoparquet-loader.js +1 -1
  22. package/dist/iceberg-rest-catalog.d.ts +49 -0
  23. package/dist/iceberg-rest-catalog.d.ts.map +1 -0
  24. package/dist/iceberg-rest-catalog.js +78 -0
  25. package/dist/iceberg-rest-catalog.js.map +1 -0
  26. package/dist/iceberg-table-source.d.ts +63 -0
  27. package/dist/iceberg-table-source.d.ts.map +1 -0
  28. package/dist/iceberg-table-source.js +797 -0
  29. package/dist/iceberg-table-source.js.map +1 -0
  30. package/dist/iceberg-types.d.ts +150 -0
  31. package/dist/iceberg-types.d.ts.map +1 -0
  32. package/dist/iceberg-types.js +5 -0
  33. package/dist/iceberg-types.js.map +1 -0
  34. package/dist/index.cjs +15841 -3306
  35. package/dist/index.cjs.map +3 -3
  36. package/dist/index.d.ts +8 -3
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +5 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/lib/arrow/convert-schema-from-parquet.d.ts +3 -1
  41. package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
  42. package/dist/lib/arrow/convert-schema-from-parquet.js +94 -19
  43. package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
  44. package/dist/lib/arrow/create-nested-arrow-vector.js +89 -0
  45. package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -1
  46. package/dist/lib/constants.js +1 -1
  47. package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -1
  48. package/dist/lib/encoders/encode-table-to-parquet-js.js +202 -7
  49. package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -1
  50. package/dist/lib/geo/geoparquet-covering.d.ts +19 -0
  51. package/dist/lib/geo/geoparquet-covering.d.ts.map +1 -0
  52. package/dist/lib/geo/geoparquet-covering.js +137 -0
  53. package/dist/lib/geo/geoparquet-covering.js.map +1 -0
  54. package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -1
  55. package/dist/lib/geo/geospatial-metadata.js +39 -13
  56. package/dist/lib/geo/geospatial-metadata.js.map +1 -1
  57. package/dist/lib/parquet-bloom-filter-planner.d.ts +16 -0
  58. package/dist/lib/parquet-bloom-filter-planner.d.ts.map +1 -0
  59. package/dist/lib/parquet-bloom-filter-planner.js +57 -0
  60. package/dist/lib/parquet-bloom-filter-planner.js.map +1 -0
  61. package/dist/lib/parquet-bloom-filter.d.ts +30 -0
  62. package/dist/lib/parquet-bloom-filter.d.ts.map +1 -0
  63. package/dist/lib/parquet-bloom-filter.js +289 -0
  64. package/dist/lib/parquet-bloom-filter.js.map +1 -0
  65. package/dist/lib/parquet-encryption.d.ts +80 -0
  66. package/dist/lib/parquet-encryption.d.ts.map +1 -0
  67. package/dist/lib/parquet-encryption.js +190 -0
  68. package/dist/lib/parquet-encryption.js.map +1 -0
  69. package/dist/lib/parquet-page-index.d.ts +34 -5
  70. package/dist/lib/parquet-page-index.d.ts.map +1 -1
  71. package/dist/lib/parquet-page-index.js +114 -28
  72. package/dist/lib/parquet-page-index.js.map +1 -1
  73. package/dist/lib/parquet-predicate.d.ts +5 -1
  74. package/dist/lib/parquet-predicate.d.ts.map +1 -1
  75. package/dist/lib/parquet-predicate.js +42 -14
  76. package/dist/lib/parquet-predicate.js.map +1 -1
  77. package/dist/lib/parquet-source-worker-decoder.d.ts +4 -1
  78. package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -1
  79. package/dist/lib/parquet-source-worker-decoder.js +83 -17
  80. package/dist/lib/parquet-source-worker-decoder.js.map +1 -1
  81. package/dist/lib/parquet-source-worker-types.d.ts +24 -0
  82. package/dist/lib/parquet-source-worker-types.d.ts.map +1 -1
  83. package/dist/lib/parsers/get-parquet-schema.d.ts.map +1 -1
  84. package/dist/lib/parsers/get-parquet-schema.js +3 -1
  85. package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
  86. package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -1
  87. package/dist/lib/parsers/parse-parquet-to-arrow-js.js +327 -18
  88. package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -1
  89. package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
  90. package/dist/lib/parsers/parse-parquet-to-arrow.js +5 -5
  91. package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
  92. package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
  93. package/dist/lib/parsers/parse-parquet-to-columns.js +3 -1
  94. package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
  95. package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
  96. package/dist/lib/parsers/parse-parquet-to-json.js +18 -2
  97. package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
  98. package/dist/lib/slice-parquet-batch.d.ts +9 -0
  99. package/dist/lib/slice-parquet-batch.d.ts.map +1 -0
  100. package/dist/lib/slice-parquet-batch.js +28 -0
  101. package/dist/lib/slice-parquet-batch.js.map +1 -0
  102. package/dist/lib/sources/parquet-range-file.d.ts +1 -1
  103. package/dist/lib/sources/parquet-range-file.d.ts.map +1 -1
  104. package/dist/lib/sources/parquet-range-file.js +28 -22
  105. package/dist/lib/sources/parquet-range-file.js.map +1 -1
  106. package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -1
  107. package/dist/lib/utils/normalize-parquet-options.js +15 -1
  108. package/dist/lib/utils/normalize-parquet-options.js.map +1 -1
  109. package/dist/parquet-dataset-source.cjs +16528 -4928
  110. package/dist/parquet-dataset-source.cjs.map +3 -3
  111. package/dist/parquet-dataset-source.d.ts +31 -4
  112. package/dist/parquet-dataset-source.d.ts.map +1 -1
  113. package/dist/parquet-dataset-source.js +296 -74
  114. package/dist/parquet-dataset-source.js.map +1 -1
  115. package/dist/parquet-encoded-page-types.d.ts +108 -0
  116. package/dist/parquet-encoded-page-types.d.ts.map +1 -0
  117. package/dist/parquet-encoded-page-types.js +5 -0
  118. package/dist/parquet-encoded-page-types.js.map +1 -0
  119. package/dist/parquet-js-loader-types.d.ts +2 -0
  120. package/dist/parquet-js-loader-types.d.ts.map +1 -1
  121. package/dist/parquet-js-loader-types.js +2 -1
  122. package/dist/parquet-js-loader-types.js.map +1 -1
  123. package/dist/parquet-js-loader.d.ts +1 -0
  124. package/dist/parquet-js-loader.d.ts.map +1 -1
  125. package/dist/parquet-js-loader.js +2 -1
  126. package/dist/parquet-js-loader.js.map +1 -1
  127. package/dist/parquet-js-writer.d.ts +23 -2
  128. package/dist/parquet-js-writer.d.ts.map +1 -1
  129. package/dist/parquet-js-writer.js +1 -1
  130. package/dist/parquet-js-writer.js.map +1 -1
  131. package/dist/parquet-loader-base.js +1 -1
  132. package/dist/parquet-loader-options.d.ts +11 -0
  133. package/dist/parquet-loader-options.d.ts.map +1 -1
  134. package/dist/parquet-loader-options.js.map +1 -1
  135. package/dist/parquet-source-capabilities.d.ts +8 -1
  136. package/dist/parquet-source-capabilities.d.ts.map +1 -1
  137. package/dist/parquet-source-capabilities.js +10 -0
  138. package/dist/parquet-source-capabilities.js.map +1 -1
  139. package/dist/parquet-source-loader-types.d.ts +10 -0
  140. package/dist/parquet-source-loader-types.d.ts.map +1 -1
  141. package/dist/parquet-source-loader-types.js +11 -1
  142. package/dist/parquet-source-loader-types.js.map +1 -1
  143. package/dist/parquet-source-loader.cjs +14121 -2796
  144. package/dist/parquet-source-loader.cjs.map +3 -3
  145. package/dist/parquet-source-loader.d.ts +51 -4
  146. package/dist/parquet-source-loader.d.ts.map +1 -1
  147. package/dist/parquet-source-loader.js +651 -38
  148. package/dist/parquet-source-loader.js.map +1 -1
  149. package/dist/parquet-source-types.d.ts +180 -30
  150. package/dist/parquet-source-types.d.ts.map +1 -1
  151. package/dist/parquet-source-worker.js +7378 -6989
  152. package/dist/parquet-source-worker.js.map +4 -4
  153. package/dist/parquet-worker-node.cjs +8501 -1045
  154. package/dist/parquet-worker-node.cjs.map +4 -4
  155. package/dist/parquet-worker-url.js +5 -1
  156. package/dist/parquet-worker-url.js.map +1 -1
  157. package/dist/parquet-worker.js +289 -218
  158. package/dist/parquet-worker.js.map +4 -4
  159. package/dist/parquetjs/codecs/declare.d.ts +15 -0
  160. package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
  161. package/dist/parquetjs/codecs/declare.js +10 -0
  162. package/dist/parquetjs/codecs/declare.js.map +1 -1
  163. package/dist/parquetjs/codecs/delta.d.ts.map +1 -1
  164. package/dist/parquetjs/codecs/delta.js +356 -7
  165. package/dist/parquetjs/codecs/delta.js.map +1 -1
  166. package/dist/parquetjs/codecs/index.d.ts.map +1 -1
  167. package/dist/parquetjs/codecs/index.js +4 -0
  168. package/dist/parquetjs/codecs/index.js.map +1 -1
  169. package/dist/parquetjs/codecs/plain.d.ts +1 -1
  170. package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
  171. package/dist/parquetjs/codecs/plain.js +153 -12
  172. package/dist/parquetjs/codecs/plain.js.map +1 -1
  173. package/dist/parquetjs/codecs/rle.d.ts +4 -0
  174. package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
  175. package/dist/parquetjs/codecs/rle.js +406 -3
  176. package/dist/parquetjs/codecs/rle.js.map +1 -1
  177. package/dist/parquetjs/compression.d.ts +9 -0
  178. package/dist/parquetjs/compression.d.ts.map +1 -1
  179. package/dist/parquetjs/compression.js +86 -67
  180. package/dist/parquetjs/compression.js.map +1 -1
  181. package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -1
  182. package/dist/parquetjs/encoder/dictionary-planner.js +5 -2
  183. package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -1
  184. package/dist/parquetjs/encoder/parquet-encoder.d.ts +43 -1
  185. package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
  186. package/dist/parquetjs/encoder/parquet-encoder.js +691 -34
  187. package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
  188. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts +29 -0
  189. package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts.map +1 -0
  190. package/dist/parquetjs/parquet-thrift/BoundingBox.js +85 -0
  191. package/dist/parquetjs/parquet-thrift/BoundingBox.js.map +1 -0
  192. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +5 -0
  193. package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
  194. package/dist/parquetjs/parquet-thrift/ColumnChunk.js +35 -0
  195. package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
  196. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts +35 -0
  197. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts.map +1 -0
  198. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js +135 -0
  199. package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js.map +1 -0
  200. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +10 -0
  201. package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
  202. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +73 -0
  203. package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
  204. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts +22 -0
  205. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts.map +1 -0
  206. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js +111 -0
  207. package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js.map +1 -0
  208. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts +16 -0
  209. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts.map +1 -0
  210. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js +57 -0
  211. package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js.map +1 -0
  212. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +5 -0
  213. package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
  214. package/dist/parquetjs/parquet-thrift/FileMetaData.js +35 -0
  215. package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
  216. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts +18 -0
  217. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts.map +1 -0
  218. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js +62 -0
  219. package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js.map +1 -0
  220. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts +26 -0
  221. package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts.map +1 -0
  222. package/dist/parquetjs/parquet-thrift/SizeStatistics.js +85 -0
  223. package/dist/parquetjs/parquet-thrift/SizeStatistics.js.map +1 -0
  224. package/dist/parquetjs/parquet-thrift/index.d.ts +6 -0
  225. package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
  226. package/dist/parquetjs/parquet-thrift/index.js +6 -0
  227. package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
  228. package/dist/parquetjs/parser/decoders.d.ts +10 -1
  229. package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
  230. package/dist/parquetjs/parser/decoders.js +318 -14
  231. package/dist/parquetjs/parser/decoders.js.map +1 -1
  232. package/dist/parquetjs/parser/encoded-pages.d.ts +24 -0
  233. package/dist/parquetjs/parser/encoded-pages.d.ts.map +1 -0
  234. package/dist/parquetjs/parser/encoded-pages.js +206 -0
  235. package/dist/parquetjs/parser/encoded-pages.js.map +1 -0
  236. package/dist/parquetjs/parser/parquet-reader.d.ts +88 -12
  237. package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
  238. package/dist/parquetjs/parser/parquet-reader.js +713 -66
  239. package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
  240. package/dist/parquetjs/schema/declare.d.ts +22 -3
  241. package/dist/parquetjs/schema/declare.d.ts.map +1 -1
  242. package/dist/parquetjs/schema/declare.js.map +1 -1
  243. package/dist/parquetjs/schema/schema.d.ts.map +1 -1
  244. package/dist/parquetjs/schema/schema.js +10 -0
  245. package/dist/parquetjs/schema/schema.js.map +1 -1
  246. package/dist/parquetjs/schema/shred.d.ts.map +1 -1
  247. package/dist/parquetjs/schema/shred.js +219 -11
  248. package/dist/parquetjs/schema/shred.js.map +1 -1
  249. package/dist/parquetjs/schema/types.js +19 -21
  250. package/dist/parquetjs/schema/types.js.map +1 -1
  251. package/dist/parquetjs/schema/variant.d.ts +3 -0
  252. package/dist/parquetjs/schema/variant.d.ts.map +1 -0
  253. package/dist/parquetjs/schema/variant.js +248 -0
  254. package/dist/parquetjs/schema/variant.js.map +1 -0
  255. package/dist/parquetjs/utils/crc32.d.ts +3 -0
  256. package/dist/parquetjs/utils/crc32.d.ts.map +1 -0
  257. package/dist/parquetjs/utils/crc32.js +15 -0
  258. package/dist/parquetjs/utils/crc32.js.map +1 -0
  259. package/dist/parquetjs/utils/read-utils.d.ts +11 -1
  260. package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
  261. package/dist/parquetjs/utils/read-utils.js +21 -1
  262. package/dist/parquetjs/utils/read-utils.js.map +1 -1
  263. package/dist/unbundled.d.ts +2 -1
  264. package/dist/unbundled.d.ts.map +1 -1
  265. package/dist/unbundled.js +1 -0
  266. package/dist/unbundled.js.map +1 -1
  267. package/package.json +36 -13
  268. package/src/bundled.ts +10 -0
  269. package/src/delta-format.ts +12 -0
  270. package/src/delta-source-loader-types.ts +40 -0
  271. package/src/delta-source.ts +305 -0
  272. package/src/delta-types.ts +40 -0
  273. package/src/iceberg-rest-catalog.ts +122 -0
  274. package/src/iceberg-table-source.ts +1037 -0
  275. package/src/iceberg-types.ts +165 -0
  276. package/src/index.ts +59 -1
  277. package/src/lib/arrow/convert-schema-from-parquet.ts +113 -19
  278. package/src/lib/arrow/create-nested-arrow-vector.ts +116 -0
  279. package/src/lib/encoders/encode-table-to-parquet-js.ts +268 -7
  280. package/src/lib/geo/geoparquet-covering.ts +201 -0
  281. package/src/lib/geo/geospatial-metadata.ts +42 -15
  282. package/src/lib/parquet-bloom-filter-planner.ts +86 -0
  283. package/src/lib/parquet-bloom-filter.ts +345 -0
  284. package/src/lib/parquet-encryption.ts +344 -0
  285. package/src/lib/parquet-page-index.ts +180 -34
  286. package/src/lib/parquet-predicate.ts +52 -16
  287. package/src/lib/parquet-source-worker-decoder.ts +116 -20
  288. package/src/lib/parquet-source-worker-types.ts +25 -0
  289. package/src/lib/parsers/get-parquet-schema.ts +3 -1
  290. package/src/lib/parsers/parse-parquet-to-arrow-js.ts +397 -17
  291. package/src/lib/parsers/parse-parquet-to-arrow.ts +4 -5
  292. package/src/lib/parsers/parse-parquet-to-columns.ts +3 -1
  293. package/src/lib/parsers/parse-parquet-to-json.ts +18 -2
  294. package/src/lib/slice-parquet-batch.ts +32 -0
  295. package/src/lib/sources/parquet-range-file.ts +35 -29
  296. package/src/lib/utils/normalize-parquet-options.ts +17 -1
  297. package/src/parquet-dataset-source.ts +397 -85
  298. package/src/parquet-encoded-page-types.ts +122 -0
  299. package/src/parquet-js-loader-types.ts +1 -0
  300. package/src/parquet-js-loader.ts +2 -1
  301. package/src/parquet-js-writer.ts +30 -0
  302. package/src/parquet-loader-options.ts +11 -0
  303. package/src/parquet-source-capabilities.ts +18 -1
  304. package/src/parquet-source-loader-types.ts +10 -0
  305. package/src/parquet-source-loader.ts +1024 -52
  306. package/src/parquet-source-types.ts +197 -28
  307. package/src/parquet-worker-url.ts +6 -1
  308. package/src/parquetjs/codecs/declare.ts +27 -0
  309. package/src/parquetjs/codecs/delta.ts +466 -6
  310. package/src/parquetjs/codecs/index.ts +4 -0
  311. package/src/parquetjs/codecs/plain.ts +177 -11
  312. package/src/parquetjs/codecs/rle.ts +573 -3
  313. package/src/parquetjs/compression.ts +102 -76
  314. package/src/parquetjs/encoder/dictionary-planner.ts +7 -2
  315. package/src/parquetjs/encoder/parquet-encoder.ts +1016 -38
  316. package/src/parquetjs/parquet-thrift/BoundingBox.ts +108 -0
  317. package/src/parquetjs/parquet-thrift/ColumnChunk.ts +35 -0
  318. package/src/parquetjs/parquet-thrift/ColumnCryptoMetaData.ts +139 -0
  319. package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +73 -0
  320. package/src/parquetjs/parquet-thrift/EncryptionAlgorithm.ts +127 -0
  321. package/src/parquetjs/parquet-thrift/FileCryptoMetaData.ts +60 -0
  322. package/src/parquetjs/parquet-thrift/FileMetaData.ts +35 -0
  323. package/src/parquetjs/parquet-thrift/GeospatialStatistics.ts +68 -0
  324. package/src/parquetjs/parquet-thrift/SizeStatistics.ts +98 -0
  325. package/src/parquetjs/parquet-thrift/index.ts +6 -0
  326. package/src/parquetjs/parser/decoders.ts +451 -26
  327. package/src/parquetjs/parser/encoded-pages.ts +278 -0
  328. package/src/parquetjs/parser/parquet-reader.ts +1112 -87
  329. package/src/parquetjs/schema/declare.ts +22 -2
  330. package/src/parquetjs/schema/schema.ts +10 -0
  331. package/src/parquetjs/schema/shred.ts +238 -11
  332. package/src/parquetjs/schema/types.ts +16 -25
  333. package/src/parquetjs/schema/variant.ts +313 -0
  334. package/src/parquetjs/utils/crc32.ts +15 -0
  335. package/src/parquetjs/utils/read-utils.ts +26 -1
  336. package/src/unbundled.ts +14 -0
@@ -0,0 +1,190 @@
1
+ // loaders.gl
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+ /** Reads one length-prefixed encrypted Parquet module from a serialized range. */
5
+ export function readParquetEncryptedModule(buffer, offset = 0) {
6
+ if (offset + 4 > buffer.length) {
7
+ throw new Error('Invalid encrypted Parquet module: missing module length');
8
+ }
9
+ const length = new DataView(buffer.buffer, buffer.byteOffset + offset, 4).getUint32(0, true);
10
+ const moduleStart = offset + 4;
11
+ const moduleEnd = moduleStart + length;
12
+ if (length < 12 || moduleEnd > buffer.length) {
13
+ throw new Error('Invalid encrypted Parquet module: truncated module');
14
+ }
15
+ return { bytes: buffer.subarray(moduleStart, moduleEnd), nextOffset: moduleEnd };
16
+ }
17
+ /** Builds the AAD required by the Parquet modular-encryption specification. */
18
+ export function createParquetModuleAad(aadPrefix, fileUnique, module, rowGroupOrdinal, columnOrdinal, pageOrdinal) {
19
+ const moduleType = [
20
+ 'footer',
21
+ 'column-metadata',
22
+ 'data-page',
23
+ 'dictionary-page',
24
+ 'data-page-header',
25
+ 'dictionary-page-header',
26
+ 'column-index',
27
+ 'offset-index',
28
+ 'bloom-filter-header',
29
+ 'bloom-filter-bitset'
30
+ ].indexOf(module);
31
+ if (moduleType < 0)
32
+ throw new Error(`Unknown Parquet encryption module ${module}`);
33
+ const isPageModule = module === 'data-page' || module === 'data-page-header';
34
+ const suffixLength = fileUnique.length + (module === 'footer' ? 1 : isPageModule ? 7 : 5);
35
+ const suffix = new Uint8Array(suffixLength);
36
+ suffix.set(fileUnique);
37
+ suffix[fileUnique.length] = moduleType;
38
+ if (module !== 'footer') {
39
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 1, rowGroupOrdinal ?? 0, true);
40
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 3, columnOrdinal ?? 0, true);
41
+ if (isPageModule)
42
+ new DataView(suffix.buffer).setInt16(fileUnique.length + 5, pageOrdinal ?? 0, true);
43
+ }
44
+ const prefix = aadPrefix || new Uint8Array(0);
45
+ const aad = new Uint8Array(prefix.length + suffix.length);
46
+ aad.set(prefix);
47
+ aad.set(suffix, prefix.length);
48
+ return aad;
49
+ }
50
+ /** Decrypts a Parquet module serialized as `[length][nonce][ciphertext][tag]`. */
51
+ export async function decryptParquetModule(encryptedModule, options) {
52
+ const bytes = toUint8Array(encryptedModule);
53
+ const buffer = hasLengthPrefix(bytes) ? bytes.subarray(4) : bytes;
54
+ const nonceLength = 12;
55
+ if (buffer.length < nonceLength + (options.page ? 0 : 16)) {
56
+ throw new Error('Invalid Parquet encrypted module: truncated nonce or authentication tag');
57
+ }
58
+ const nonce = buffer.subarray(0, nonceLength);
59
+ const ciphertext = buffer.subarray(nonceLength);
60
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
61
+ algorithm: options.algorithm,
62
+ aad: options.aad
63
+ });
64
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, options.page);
65
+ const cryptoProvider = getCryptoProvider();
66
+ const plaintext = options.page && options.algorithm === 'AES_GCM_CTR_V1'
67
+ ? await cryptoProvider.decrypt({ name: 'AES-CTR', counter: makeCounter(nonce), length: 32 }, cryptoKey, ciphertext)
68
+ : await cryptoProvider.decrypt({
69
+ name: 'AES-GCM',
70
+ iv: nonce,
71
+ additionalData: options.aad
72
+ }, cryptoKey, ciphertext);
73
+ return new Uint8Array(plaintext);
74
+ }
75
+ /** Encrypts one Parquet footer module as nonce-prefixed AES-GCM bytes. */
76
+ export async function encryptParquetModule(plaintext, options) {
77
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
78
+ algorithm: options.algorithm,
79
+ aad: options.aad
80
+ });
81
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, false, ['encrypt']);
82
+ const nonce = new Uint8Array(12);
83
+ const cryptoProvider = getCryptoProvider();
84
+ getCryptoRandomValues(nonce);
85
+ const isCtrPage = options.page && options.algorithm === 'AES_GCM_CTR_V1';
86
+ const pageCryptoKey = isCtrPage
87
+ ? await getCryptoKey(keyMaterial, options.algorithm, true, ['encrypt'])
88
+ : cryptoKey;
89
+ const ciphertext = new Uint8Array(await cryptoProvider.encrypt(isCtrPage
90
+ ? { name: 'AES-CTR', counter: makeCounter(nonce), length: 32 }
91
+ : {
92
+ name: 'AES-GCM',
93
+ iv: nonce,
94
+ additionalData: options.aad
95
+ }, pageCryptoKey, toUint8Array(plaintext)));
96
+ const encryptedModule = new Uint8Array(nonce.byteLength + ciphertext.byteLength);
97
+ encryptedModule.set(nonce);
98
+ encryptedModule.set(ciphertext, nonce.byteLength);
99
+ return encryptedModule;
100
+ }
101
+ /** Verifies a plaintext-footer signature by authenticating the serialized footer bytes. */
102
+ export async function verifyParquetFooterSignature(footerBytes, signature, options) {
103
+ if (signature.byteLength !== 28) {
104
+ throw new Error(`Invalid Parquet plaintext-footer signature length ${signature.byteLength}; expected 28`);
105
+ }
106
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, {
107
+ algorithm: options.algorithm,
108
+ aad: options.aad
109
+ });
110
+ const cryptoKey = await getCryptoKey(keyMaterial, options.algorithm, false, ['encrypt']);
111
+ const encryptedFooter = new Uint8Array(await getCryptoProvider().encrypt({
112
+ name: 'AES-GCM',
113
+ iv: signature.subarray(0, 12),
114
+ additionalData: options.aad
115
+ }, cryptoKey, footerBytes));
116
+ const calculatedTag = encryptedFooter.subarray(encryptedFooter.byteLength - 16);
117
+ for (let index = 0; index < 16; index++) {
118
+ if (calculatedTag[index] !== signature[12 + index]) {
119
+ throw new Error('Parquet plaintext-footer signature verification failed');
120
+ }
121
+ }
122
+ }
123
+ /** Creates the nonce and authentication tag used by a plaintext-footer signature. */
124
+ export async function createParquetFooterSignature(footerBytes, options) {
125
+ const algorithm = options.algorithm ?? 'AES_GCM_V1';
126
+ const fileUnique = options.fileUnique ? new Uint8Array(options.fileUnique) : createFileUnique();
127
+ if (fileUnique.byteLength !== 8) {
128
+ throw new Error('Parquet plaintext-footer signature file_unique must be 8 bytes');
129
+ }
130
+ const aad = createParquetModuleAad(options.aadPrefix, fileUnique, 'footer');
131
+ const keyMaterial = await options.keyRetriever(options.keyMetadata, { algorithm, aad });
132
+ const cryptoKey = await getCryptoKey(keyMaterial, algorithm, false, ['encrypt']);
133
+ const nonce = new Uint8Array(12);
134
+ getCryptoRandomValues(nonce);
135
+ const encryptedFooter = new Uint8Array(await getCryptoProvider().encrypt({
136
+ name: 'AES-GCM',
137
+ iv: nonce,
138
+ additionalData: aad
139
+ }, cryptoKey, footerBytes));
140
+ const signature = new Uint8Array(28);
141
+ signature.set(nonce);
142
+ signature.set(encryptedFooter.subarray(encryptedFooter.byteLength - 16), nonce.byteLength);
143
+ return signature;
144
+ }
145
+ function hasLengthPrefix(bytes) {
146
+ if (bytes.length < 4)
147
+ return false;
148
+ const length = new DataView(bytes.buffer, bytes.byteOffset, 4).getUint32(0, true);
149
+ return length === bytes.length - 4;
150
+ }
151
+ function createFileUnique() {
152
+ const fileUnique = new Uint8Array(8);
153
+ getCryptoRandomValues(fileUnique);
154
+ return fileUnique;
155
+ }
156
+ function makeCounter(nonce) {
157
+ const counter = new Uint8Array(16);
158
+ counter.set(nonce);
159
+ counter[15] = 1;
160
+ return counter;
161
+ }
162
+ async function getCryptoKey(keyMaterial, algorithm, page, usages = ['decrypt']) {
163
+ const keyBytes = toUint8Array(keyMaterial);
164
+ if (keyBytes.byteLength !== 16 && keyBytes.byteLength !== 24 && keyBytes.byteLength !== 32) {
165
+ throw new Error(`Invalid Parquet encryption key length ${keyBytes.byteLength}`);
166
+ }
167
+ return await getCryptoProvider().importKey('raw', keyBytes, page && algorithm === 'AES_GCM_CTR_V1' ? { name: 'AES-CTR' } : { name: 'AES-GCM' }, false, usages);
168
+ }
169
+ function getCryptoProvider() {
170
+ const cryptoProvider = globalThis.crypto?.subtle;
171
+ if (!cryptoProvider)
172
+ throw new Error('Parquet encryption requires Web Crypto support');
173
+ return cryptoProvider;
174
+ }
175
+ /** Fills a nonce with cryptographically secure random bytes. */
176
+ function getCryptoRandomValues(array) {
177
+ const cryptoProvider = globalThis.crypto;
178
+ if (!cryptoProvider?.getRandomValues) {
179
+ throw new Error('Parquet encryption requires Web Crypto random values');
180
+ }
181
+ const getRandomValues = cryptoProvider.getRandomValues.bind(cryptoProvider);
182
+ getRandomValues(array);
183
+ return array;
184
+ }
185
+ function toUint8Array(value) {
186
+ return value instanceof ArrayBuffer
187
+ ? new Uint8Array(value)
188
+ : new Uint8Array(value.buffer, value.byteOffset, value.byteLength);
189
+ }
190
+ //# sourceMappingURL=parquet-encryption.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parquet-encryption.js","sourceRoot":"","sources":["../../src/lib/parquet-encryption.ts"],"names":[],"mappings":"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"}
@@ -38,22 +38,51 @@ export type ParquetPagePruningPlan = {
38
38
  /** Logical rows eliminated before data-page reads. */
39
39
  prunedRowCount: number;
40
40
  };
41
+ /** Decrypts an encrypted page-index module before Thrift decoding. */
42
+ export type ParquetPageIndexDecryptor = (bytes: Uint8Array, module: 'column-index' | 'offset-index', rowGroupOrdinal: number, columnOrdinal: number, columnChunk: ColumnChunk) => Promise<Uint8Array>;
43
+ /** Optional controls for reading page indexes from a Parquet source. */
44
+ export type ParquetPagePruningOptions = {
45
+ /** Row-group ordinal used when constructing encrypted-module AAD. */
46
+ rowGroupOrdinal?: number;
47
+ /** Decode legacy INT96 page statistics as epoch nanoseconds. */
48
+ int96AsTimestamp?: boolean;
49
+ /** Decrypts encrypted index modules; omitted for plaintext files. */
50
+ decryptModule?: ParquetPageIndexDecryptor;
51
+ };
52
+ /** Logical statistics attached to one data page. */
53
+ export type ParquetPageStatistics = {
54
+ min?: unknown;
55
+ max?: unknown;
56
+ nullCount?: number;
57
+ minIsExact?: boolean;
58
+ maxIsExact?: boolean;
59
+ };
41
60
  /**
42
61
  * Builds a conservative selective-page plan from Parquet column and offset indexes.
43
62
  *
44
- * Returns `undefined` when indexes or the current flat-column decoder cannot safely avoid full
45
- * column-chunk reads. An empty `rowRanges` array means the indexes prove the predicate cannot match.
63
+ * Returns `undefined` when indexes or the selected decoder cannot safely avoid full column-chunk
64
+ * reads. Repeated leaves are selected only when every decoded column uses the same page row
65
+ * boundaries, so ranges begin and end on complete logical rows. An empty `rowRanges` array means
66
+ * the indexes prove the predicate cannot match.
46
67
  */
47
- export declare function createParquetPagePruningPlan(file: ReadableFile, rowGroup: RowGroup, schema: ParquetSchema, selectedColumnPaths: readonly string[][], predicate: ParquetPredicate, signal?: AbortSignal): Promise<ParquetPagePruningPlan | undefined>;
68
+ export declare function createParquetPagePruningPlan(file: ReadableFile, rowGroup: RowGroup, schema: ParquetSchema, selectedColumnPaths: readonly string[][], predicate: ParquetPredicate, signal?: AbortSignal, options?: ParquetPagePruningOptions): Promise<ParquetPagePruningPlan | undefined>;
48
69
  /** Returns data-page byte ranges needed to decode a selective row-group plan. */
49
- export declare function getParquetPageReadRanges(rowGroup: RowGroup, selectedColumnPaths: readonly string[][], plan: ParquetPagePruningPlan): Array<{
70
+ export declare function getParquetPageReadRanges(rowGroup: RowGroup, selectedColumnPaths: readonly string[][], plan: ParquetPagePruningPlan, schema: ParquetSchema): Array<{
50
71
  offset: number;
51
72
  length: number;
52
73
  }>;
53
74
  /** Decodes one compact-protocol Parquet offset index. */
54
75
  export declare function decodeOffsetIndex(bytes: Uint8Array, rowCount: number): ParquetDataPageLocation[];
76
+ /** Decodes column-index values into logical per-page statistics. */
77
+ export declare function decodeParquetColumnIndex(bytes: Uint8Array, pages: readonly ParquetDataPageLocation[], field: ParquetField, options?: Pick<ParquetPagePruningOptions, 'int96AsTimestamp'>): ParquetPageStatistics[];
55
78
  /** Decodes one physical page-index statistic and applies its Parquet logical annotation. */
56
- export declare function decodeParquetPageStatisticsValue(bytes: Uint8Array, field: ParquetField): unknown;
79
+ export declare function decodeParquetPageStatisticsValue(bytes: Uint8Array, field: ParquetField, options?: Pick<ParquetPagePruningOptions, 'int96AsTimestamp'>): unknown;
80
+ /**
81
+ * Returns whether a column can be decoded from selected page ranges without changing row shape.
82
+ *
83
+ * Repeated leaves are safe only when the selected columns share complete logical-row boundaries.
84
+ */
85
+ export declare function canUseParquetPageIndexForColumn(schema: ParquetSchema, columnChunk: ColumnChunk): boolean;
57
86
  /** Validates one optional footer index byte range against the containing file. */
58
87
  export declare function getParquetIndexRange(offsetValue: ColumnChunk['offset_index_offset'], lengthValue: number | undefined, fileSize: number): {
59
88
  offset: number;
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-page-index.d.ts","sourceRoot":"","sources":["../../src/lib/parquet-page-index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAE3D,OAAO,KAAK,EAIV,gBAAgB,EACjB,mCAAgC;AACjC,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,6CAA0C;AAC3C,OAAO,KAAK,EAAC,YAAY,EAAC,uCAAoC;AAC9D,OAAO,KAAK,EAAC,aAAa,EAAC,sCAAmC;AAgB9D,qEAAqE;AACrE,MAAM,MAAM,eAAe,GAAG;IAC5B,0BAA0B;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb,CAAC;AAEF,kEAAkE;AAClE,MAAM,MAAM,uBAAuB,GAAG;IACpC,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iDAAiD;IACjD,aAAa,EAAE,MAAM,CAAC;IACtB,sDAAsD;IACtD,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,gEAAgE;AAChE,MAAM,MAAM,oBAAoB,GAAG,MAAM,CAAC,MAAM,EAAE,uBAAuB,EAAE,CAAC,CAAC;AAE7E,6CAA6C;AAC7C,MAAM,MAAM,sBAAsB,GAAG;IACnC,uEAAuE;IACvE,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,4DAA4D;IAC5D,aAAa,EAAE,oBAAoB,CAAC;IACpC,uDAAuD;IACvD,UAAU,EAAE,MAAM,CAAC;IACnB,+CAA+C;IAC/C,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAeF;;;;;GAKG;AACH,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,YAAY,EAClB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,aAAa,EACrB,mBAAmB,EAAE,SAAS,MAAM,EAAE,EAAE,EACxC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,sBAAsB,GAAG,SAAS,CAAC,CAqG7C;AAED,iFAAiF;AACjF,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,QAAQ,EAClB,mBAAmB,EAAE,SAAS,MAAM,EAAE,EAAE,EACxC,IAAI,EAAE,sBAAsB,GAC3B,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,CAAC,CAkCzC;AAED,yDAAyD;AACzD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,uBAAuB,EAAE,CA8BhG;AAwFD,4FAA4F;AAC5F,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,GAAG,OAAO,CA6BhG;AA6CD,kFAAkF;AAClF,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAC/C,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,QAAQ,EAAE,MAAM,GACf;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAC,GAAG,SAAS,CAiB9C"}
1
+ {"version":3,"file":"parquet-page-index.d.ts","sourceRoot":"","sources":["../../src/lib/parquet-page-index.ts"],"names":[],"mappings":"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"}
@@ -6,26 +6,29 @@ import * as Types from "../parquetjs/schema/types.js";
6
6
  import { copyUint8Array, readDoubleLE, readFloatLE, readInt32LE, readInt64LE, readUInt32LE, readUInt64LE, toUint8Array } from "../parquetjs/utils/binary-utils.js";
7
7
  import { Uint8ArrayCompactProtocol } from "../parquetjs/utils/uint8-array-compact-protocol.js";
8
8
  import { Uint8ArrayTransport } from "../parquetjs/utils/uint8-array-transport.js";
9
- import { canParquetStatisticsMatch, getParquetPredicateColumns } from "./parquet-predicate.js";
9
+ import { canParquetStatisticsMatch, getParquetPredicatePath, getParquetPredicatePaths } from "./parquet-predicate.js";
10
10
  /**
11
11
  * Builds a conservative selective-page plan from Parquet column and offset indexes.
12
12
  *
13
- * Returns `undefined` when indexes or the current flat-column decoder cannot safely avoid full
14
- * column-chunk reads. An empty `rowRanges` array means the indexes prove the predicate cannot match.
13
+ * Returns `undefined` when indexes or the selected decoder cannot safely avoid full column-chunk
14
+ * reads. Repeated leaves are selected only when every decoded column uses the same page row
15
+ * boundaries, so ranges begin and end on complete logical rows. An empty `rowRanges` array means
16
+ * the indexes prove the predicate cannot match.
15
17
  */
16
- export async function createParquetPagePruningPlan(file, rowGroup, schema, selectedColumnPaths, predicate, signal) {
18
+ export async function createParquetPagePruningPlan(file, rowGroup, schema, selectedColumnPaths, predicate, signal, options) {
17
19
  const rowCount = Number(rowGroup.num_rows);
18
20
  const selectedColumnChunks = getSelectedColumnChunks(rowGroup, selectedColumnPaths);
19
- if (!isSafeFlatPageSelection(schema, selectedColumnChunks) || rowCount <= 0) {
21
+ if (!isSafePageSelection(schema, selectedColumnChunks) || rowCount <= 0) {
20
22
  return undefined;
21
23
  }
22
24
  const pageLocations = {};
23
25
  const pageStatistics = {};
24
- const predicateColumns = new Set(getParquetPredicateColumns(predicate));
26
+ const predicatePaths = new Set(getParquetPredicatePaths(predicate).map(path => JSON.stringify(path)));
25
27
  let indexCount = 0;
26
28
  await Promise.all(selectedColumnChunks.map(async (columnChunk) => {
29
+ const columnOrdinal = rowGroup.columns.indexOf(columnChunk);
27
30
  const path = columnChunk.meta_data.path_in_schema;
28
- const pathKey = path.join('.');
31
+ const pathKey = JSON.stringify(path);
29
32
  const offsetIndexRange = getParquetIndexRange(columnChunk.offset_index_offset, columnChunk.offset_index_length, file.size);
30
33
  if (!offsetIndexRange) {
31
34
  return;
@@ -33,14 +36,17 @@ export async function createParquetPagePruningPlan(file, rowGroup, schema, selec
33
36
  const offsetIndexBytes = await file.read(offsetIndexRange.offset, offsetIndexRange.length, signal);
34
37
  let pages;
35
38
  try {
36
- pages = decodeOffsetIndex(toUint8Array(offsetIndexBytes), rowCount);
39
+ const decryptedBytes = options?.decryptModule
40
+ ? await options.decryptModule(toUint8Array(offsetIndexBytes), 'offset-index', options.rowGroupOrdinal ?? 0, columnOrdinal, columnChunk)
41
+ : toUint8Array(offsetIndexBytes);
42
+ pages = decodeOffsetIndex(decryptedBytes, rowCount);
37
43
  }
38
44
  catch {
39
45
  return;
40
46
  }
41
47
  pageLocations[pathKey] = pages;
42
48
  indexCount++;
43
- if (path.length !== 1 || !predicateColumns.has(path[0])) {
49
+ if (!predicatePaths.has(pathKey)) {
44
50
  return;
45
51
  }
46
52
  const columnIndexRange = getParquetIndexRange(columnChunk.column_index_offset, columnChunk.column_index_length, file.size);
@@ -50,9 +56,12 @@ export async function createParquetPagePruningPlan(file, rowGroup, schema, selec
50
56
  const columnIndexBytes = await file.read(columnIndexRange.offset, columnIndexRange.length, signal);
51
57
  const field = schema.findField(path);
52
58
  try {
53
- pageStatistics[path[0]] = {
59
+ const decryptedBytes = options?.decryptModule
60
+ ? await options.decryptModule(toUint8Array(columnIndexBytes), 'column-index', options.rowGroupOrdinal ?? 0, columnOrdinal, columnChunk)
61
+ : toUint8Array(columnIndexBytes);
62
+ pageStatistics[pathKey] = {
54
63
  pages,
55
- statistics: decodeColumnIndex(toUint8Array(columnIndexBytes), pages, field)
64
+ statistics: decodeParquetColumnIndex(decryptedBytes, pages, field, options)
56
65
  };
57
66
  }
58
67
  catch {
@@ -60,7 +69,10 @@ export async function createParquetPagePruningPlan(file, rowGroup, schema, selec
60
69
  }
61
70
  indexCount++;
62
71
  }));
63
- if (selectedColumnChunks.some(columnChunk => !pageLocations[columnChunk.meta_data.path_in_schema.join('.')])) {
72
+ if (selectedColumnChunks.some(columnChunk => !pageLocations[JSON.stringify(columnChunk.meta_data.path_in_schema)])) {
73
+ return undefined;
74
+ }
75
+ if (!hasCompatiblePageBoundaries(schema, selectedColumnChunks, pageLocations)) {
64
76
  return undefined;
65
77
  }
66
78
  const candidateRanges = getPredicateRowRanges(predicate, pageStatistics, rowCount);
@@ -84,15 +96,17 @@ export async function createParquetPagePruningPlan(file, rowGroup, schema, selec
84
96
  };
85
97
  }
86
98
  /** Returns data-page byte ranges needed to decode a selective row-group plan. */
87
- export function getParquetPageReadRanges(rowGroup, selectedColumnPaths, plan) {
99
+ export function getParquetPageReadRanges(rowGroup, selectedColumnPaths, plan, schema) {
88
100
  const ranges = [];
89
101
  for (const columnChunk of getSelectedColumnChunks(rowGroup, selectedColumnPaths)) {
90
102
  const columnMetadata = columnChunk.meta_data;
91
- const pages = plan.pageLocations[columnMetadata.path_in_schema.join('.')];
103
+ const pages = plan.pageLocations[JSON.stringify(columnMetadata.path_in_schema)];
92
104
  const selectedPages = pages.filter(page => plan.rowRanges.some(range => page.endRowIndex > range.start && page.firstRowIndex < range.end));
93
105
  if (!selectedPages.length) {
94
106
  continue;
95
107
  }
108
+ const field = schema.findField(columnMetadata.path_in_schema);
109
+ const repeated = field.rLevelMax > 0 || field.repetitionType === 'REPEATED';
96
110
  const dictionaryPageOffset = Number(columnMetadata.dictionary_page_offset);
97
111
  if (Number.isSafeInteger(dictionaryPageOffset) && dictionaryPageOffset > 0) {
98
112
  ranges.push({
@@ -105,7 +119,9 @@ export function getParquetPageReadRanges(rowGroup, selectedColumnPaths, plan) {
105
119
  if (!overlappingPages.length) {
106
120
  continue;
107
121
  }
108
- const firstPage = overlappingPages[0];
122
+ // A repeated page may begin with a continuation level. Transfer the complete prefix so
123
+ // worker-backed readers can probe predecessor pages before decoding the selected range.
124
+ const firstPage = repeated ? pages[0] : overlappingPages[0];
109
125
  const lastPage = overlappingPages[overlappingPages.length - 1];
110
126
  ranges.push({
111
127
  offset: firstPage.offset,
@@ -123,9 +139,27 @@ export function decodeOffsetIndex(bytes, rowCount) {
123
139
  Number(offsetIndex.page_locations[0].first_row_index) !== 0) {
124
140
  throw new Error('Invalid Parquet offset index page locations');
125
141
  }
142
+ let previousFirstRowIndex = -1;
143
+ for (const location of offsetIndex.page_locations) {
144
+ const firstRowIndex = Number(location.first_row_index);
145
+ if (!Number.isSafeInteger(firstRowIndex) || firstRowIndex < previousFirstRowIndex) {
146
+ throw new Error('Invalid Parquet offset index page locations');
147
+ }
148
+ previousFirstRowIndex = firstRowIndex;
149
+ }
126
150
  return offsetIndex.page_locations.map((location, index, locations) => {
127
151
  const firstRowIndex = Number(location.first_row_index);
128
- const endRowIndex = index + 1 < locations.length ? Number(locations[index + 1].first_row_index) : rowCount;
152
+ // A repeated row may continue on one or more pages. In that case the offset index
153
+ // legitimately repeats first_row_index. Extend each continuation page to the next
154
+ // strictly larger row start so selecting the row includes the complete continuation.
155
+ let endRowIndex = rowCount;
156
+ for (let nextIndex = index + 1; nextIndex < locations.length; nextIndex++) {
157
+ const nextFirstRowIndex = Number(locations[nextIndex].first_row_index);
158
+ if (nextFirstRowIndex > firstRowIndex) {
159
+ endRowIndex = nextFirstRowIndex;
160
+ break;
161
+ }
162
+ }
129
163
  const offset = Number(location.offset);
130
164
  const compressedByteLength = location.compressed_page_size;
131
165
  if (!Number.isSafeInteger(offset) ||
@@ -166,7 +200,7 @@ function getPredicateRowRanges(predicate, columns, rowCount) {
166
200
  return undefined;
167
201
  }
168
202
  const leafPredicate = predicate;
169
- const column = columns[leafPredicate.args[0].property];
203
+ const column = columns[JSON.stringify(getParquetPredicatePath(leafPredicate.args[0]))];
170
204
  if (!column) {
171
205
  return undefined;
172
206
  }
@@ -179,8 +213,8 @@ function getPredicateRowRanges(predicate, columns, rowCount) {
179
213
  }
180
214
  return mergeRowRanges(ranges);
181
215
  }
182
- /** Decodes column-index values into the logical representation used by exact predicates. */
183
- function decodeColumnIndex(bytes, pages, field) {
216
+ /** Decodes column-index values into logical per-page statistics. */
217
+ export function decodeParquetColumnIndex(bytes, pages, field, options) {
184
218
  const protocol = new Uint8ArrayCompactProtocol(new Uint8ArrayTransport(bytes));
185
219
  const columnIndex = ColumnIndex.read(protocol);
186
220
  if (columnIndex.null_pages.length !== pages.length ||
@@ -192,10 +226,10 @@ function decodeColumnIndex(bytes, pages, field) {
192
226
  return pages.map((_page, pageIndex) => ({
193
227
  min: columnIndex.null_pages[pageIndex]
194
228
  ? undefined
195
- : decodeParquetPageStatisticsValue(columnIndex.min_values[pageIndex], field),
229
+ : decodeParquetPageStatisticsValue(columnIndex.min_values[pageIndex], field, options),
196
230
  max: columnIndex.null_pages[pageIndex]
197
231
  ? undefined
198
- : decodeParquetPageStatisticsValue(columnIndex.max_values[pageIndex], field),
232
+ : decodeParquetPageStatisticsValue(columnIndex.max_values[pageIndex], field, options),
199
233
  nullCount: columnIndex.null_counts?.[pageIndex] !== undefined
200
234
  ? Number(columnIndex.null_counts[pageIndex])
201
235
  : columnIndex.null_pages[pageIndex]
@@ -206,7 +240,7 @@ function decodeColumnIndex(bytes, pages, field) {
206
240
  }));
207
241
  }
208
242
  /** Decodes one physical page-index statistic and applies its Parquet logical annotation. */
209
- export function decodeParquetPageStatisticsValue(bytes, field) {
243
+ export function decodeParquetPageStatisticsValue(bytes, field, options) {
210
244
  let primitiveValue;
211
245
  switch (field.primitiveType) {
212
246
  case 'BOOLEAN':
@@ -227,6 +261,18 @@ export function decodeParquetPageStatisticsValue(bytes, field) {
227
261
  primitiveValue = readDoubleLE(bytes, 0);
228
262
  break;
229
263
  case 'INT96':
264
+ if (options?.int96AsTimestamp && bytes.byteLength >= 12) {
265
+ const dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
266
+ const nanosecondsOfDay = dataView.getBigUint64(0, true);
267
+ if (nanosecondsOfDay < 86400000000000n) {
268
+ primitiveValue =
269
+ (BigInt(dataView.getInt32(8, true)) - 2440588n) * 86400000000000n +
270
+ nanosecondsOfDay;
271
+ break;
272
+ }
273
+ }
274
+ primitiveValue = copyUint8Array(bytes);
275
+ break;
230
276
  case 'BYTE_ARRAY':
231
277
  case 'FIXED_LEN_BYTE_ARRAY':
232
278
  primitiveValue = copyUint8Array(bytes);
@@ -245,24 +291,64 @@ function getSelectedColumnChunks(rowGroup, selectedColumnPaths) {
245
291
  selectedColumnPaths.some(selectedPath => selectedPath[0] === path[0])));
246
292
  });
247
293
  }
248
- /** Restricts selective page reads to independently materializable flat primitive columns. */
249
- function isSafeFlatPageSelection(schema, columnChunks) {
294
+ /** Restricts selective page reads to primitive leaves with safe page boundaries. */
295
+ function isSafePageSelection(schema, columnChunks) {
250
296
  return (columnChunks.length > 0 &&
251
297
  columnChunks.every(columnChunk => {
252
298
  const path = columnChunk.meta_data?.path_in_schema;
253
- if (!path || path.length !== 1) {
299
+ if (!path) {
254
300
  return false;
255
301
  }
256
302
  const field = schema.findField(path);
257
303
  const dictionaryEncoded = columnChunk.meta_data.encodings.some(encoding => encoding === Encoding.PLAIN_DICTIONARY || encoding === Encoding.RLE_DICTIONARY);
258
304
  const dictionaryPageOffset = Number(columnChunk.meta_data.dictionary_page_offset);
259
- return (field.path.length === 1 &&
260
- field.repetitionType !== 'REPEATED' &&
261
- field.rLevelMax === 0 &&
305
+ return (field.primitiveType !== undefined &&
262
306
  (!dictionaryEncoded ||
263
307
  (Number.isSafeInteger(dictionaryPageOffset) && dictionaryPageOffset > 0)));
264
308
  }));
265
309
  }
310
+ /**
311
+ * Returns whether a column can be decoded from selected page ranges without changing row shape.
312
+ *
313
+ * Repeated leaves are safe only when the selected columns share complete logical-row boundaries.
314
+ */
315
+ export function canUseParquetPageIndexForColumn(schema, columnChunk) {
316
+ const path = columnChunk.meta_data?.path_in_schema;
317
+ if (!path) {
318
+ return false;
319
+ }
320
+ const field = schema.findField(path);
321
+ const dictionaryEncoded = columnChunk.meta_data.encodings.some(encoding => encoding === Encoding.PLAIN_DICTIONARY || encoding === Encoding.RLE_DICTIONARY);
322
+ const dictionaryPageOffset = Number(columnChunk.meta_data.dictionary_page_offset);
323
+ return (field.primitiveType !== undefined &&
324
+ field.repetitionType !== 'REPEATED' &&
325
+ field.rLevelMax === 0 &&
326
+ (!dictionaryEncoded || (Number.isSafeInteger(dictionaryPageOffset) && dictionaryPageOffset > 0)));
327
+ }
328
+ /** Ensures repeated selective reads keep every selected column on identical row boundaries. */
329
+ function hasCompatiblePageBoundaries(schema, columnChunks, pageLocations) {
330
+ const hasRepeatedLeaf = columnChunks.some(columnChunk => {
331
+ const field = schema.findField(columnChunk.meta_data.path_in_schema);
332
+ return field.rLevelMax > 0 || field.repetitionType === 'REPEATED';
333
+ });
334
+ if (!hasRepeatedLeaf) {
335
+ return true;
336
+ }
337
+ // Offset indexes identify the first logical row represented by each page, but do not
338
+ // expose repetition levels. Equal starts therefore indicate a continuation page whose
339
+ // boundary cannot be proven safe for a selective read; retain the full-column fallback.
340
+ if (columnChunks.some(columnChunk => {
341
+ const pages = pageLocations[JSON.stringify(columnChunk.meta_data.path_in_schema)];
342
+ return pages.some((page, pageIndex) => pageIndex > 0 && page.firstRowIndex === pages[pageIndex - 1].firstRowIndex);
343
+ })) {
344
+ return false;
345
+ }
346
+ const signatures = columnChunks.map(columnChunk => {
347
+ const pages = pageLocations[JSON.stringify(columnChunk.meta_data.path_in_schema)];
348
+ return pages.map(page => `${page.firstRowIndex}:${page.endRowIndex}`).join('|');
349
+ });
350
+ return signatures.every(signature => signature === signatures[0]);
351
+ }
266
352
  /** Validates one optional footer index byte range against the containing file. */
267
353
  export function getParquetIndexRange(offsetValue, lengthValue, fileSize) {
268
354
  if (offsetValue === undefined || lengthValue === undefined) {
@@ -1 +1 @@
1
- {"version":3,"file":"parquet-page-index.js","sourceRoot":"","sources":["../../src/lib/parquet-page-index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parquet-page-index.js","sourceRoot":"","sources":["../../src/lib/parquet-page-index.ts"],"names":[],"mappings":"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"}