@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.
- package/LICENSE +1 -1
- package/dist/bundled.d.ts +1 -1
- package/dist/bundled.d.ts.map +1 -1
- package/dist/bundled.js.map +1 -1
- package/dist/delta-format.d.ts +9 -0
- package/dist/delta-format.d.ts.map +1 -0
- package/dist/delta-format.js +12 -0
- package/dist/delta-format.js.map +1 -0
- package/dist/delta-source-loader-types.d.ts +27 -0
- package/dist/delta-source-loader-types.d.ts.map +1 -0
- package/dist/delta-source-loader-types.js +28 -0
- package/dist/delta-source-loader-types.js.map +1 -0
- package/dist/delta-source.d.ts +48 -0
- package/dist/delta-source.d.ts.map +1 -0
- package/dist/delta-source.js +222 -0
- package/dist/delta-source.js.map +1 -0
- package/dist/delta-types.d.ts +38 -0
- package/dist/delta-types.d.ts.map +1 -0
- package/dist/delta-types.js +5 -0
- package/dist/delta-types.js.map +1 -0
- package/dist/geoparquet-loader.js +1 -1
- package/dist/iceberg-rest-catalog.d.ts +49 -0
- package/dist/iceberg-rest-catalog.d.ts.map +1 -0
- package/dist/iceberg-rest-catalog.js +78 -0
- package/dist/iceberg-rest-catalog.js.map +1 -0
- package/dist/iceberg-table-source.d.ts +63 -0
- package/dist/iceberg-table-source.d.ts.map +1 -0
- package/dist/iceberg-table-source.js +797 -0
- package/dist/iceberg-table-source.js.map +1 -0
- package/dist/iceberg-types.d.ts +150 -0
- package/dist/iceberg-types.d.ts.map +1 -0
- package/dist/iceberg-types.js +5 -0
- package/dist/iceberg-types.js.map +1 -0
- package/dist/index.cjs +15841 -3306
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +8 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/arrow/convert-schema-from-parquet.d.ts +3 -1
- package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
- package/dist/lib/arrow/convert-schema-from-parquet.js +94 -19
- package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
- package/dist/lib/arrow/create-nested-arrow-vector.js +89 -0
- package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -1
- package/dist/lib/constants.js +1 -1
- package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -1
- package/dist/lib/encoders/encode-table-to-parquet-js.js +202 -7
- package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -1
- package/dist/lib/geo/geoparquet-covering.d.ts +19 -0
- package/dist/lib/geo/geoparquet-covering.d.ts.map +1 -0
- package/dist/lib/geo/geoparquet-covering.js +137 -0
- package/dist/lib/geo/geoparquet-covering.js.map +1 -0
- package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -1
- package/dist/lib/geo/geospatial-metadata.js +39 -13
- package/dist/lib/geo/geospatial-metadata.js.map +1 -1
- package/dist/lib/parquet-bloom-filter-planner.d.ts +16 -0
- package/dist/lib/parquet-bloom-filter-planner.d.ts.map +1 -0
- package/dist/lib/parquet-bloom-filter-planner.js +57 -0
- package/dist/lib/parquet-bloom-filter-planner.js.map +1 -0
- package/dist/lib/parquet-bloom-filter.d.ts +30 -0
- package/dist/lib/parquet-bloom-filter.d.ts.map +1 -0
- package/dist/lib/parquet-bloom-filter.js +289 -0
- package/dist/lib/parquet-bloom-filter.js.map +1 -0
- package/dist/lib/parquet-encryption.d.ts +80 -0
- package/dist/lib/parquet-encryption.d.ts.map +1 -0
- package/dist/lib/parquet-encryption.js +190 -0
- package/dist/lib/parquet-encryption.js.map +1 -0
- package/dist/lib/parquet-page-index.d.ts +34 -5
- package/dist/lib/parquet-page-index.d.ts.map +1 -1
- package/dist/lib/parquet-page-index.js +114 -28
- package/dist/lib/parquet-page-index.js.map +1 -1
- package/dist/lib/parquet-predicate.d.ts +5 -1
- package/dist/lib/parquet-predicate.d.ts.map +1 -1
- package/dist/lib/parquet-predicate.js +42 -14
- package/dist/lib/parquet-predicate.js.map +1 -1
- package/dist/lib/parquet-source-worker-decoder.d.ts +4 -1
- package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -1
- package/dist/lib/parquet-source-worker-decoder.js +83 -17
- package/dist/lib/parquet-source-worker-decoder.js.map +1 -1
- package/dist/lib/parquet-source-worker-types.d.ts +24 -0
- package/dist/lib/parquet-source-worker-types.d.ts.map +1 -1
- package/dist/lib/parsers/get-parquet-schema.d.ts.map +1 -1
- package/dist/lib/parsers/get-parquet-schema.js +3 -1
- package/dist/lib/parsers/get-parquet-schema.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-arrow-js.js +327 -18
- package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-arrow.js +5 -5
- package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-columns.js +3 -1
- package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-json.js +18 -2
- package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
- package/dist/lib/slice-parquet-batch.d.ts +9 -0
- package/dist/lib/slice-parquet-batch.d.ts.map +1 -0
- package/dist/lib/slice-parquet-batch.js +28 -0
- package/dist/lib/slice-parquet-batch.js.map +1 -0
- package/dist/lib/sources/parquet-range-file.d.ts +1 -1
- package/dist/lib/sources/parquet-range-file.d.ts.map +1 -1
- package/dist/lib/sources/parquet-range-file.js +28 -22
- package/dist/lib/sources/parquet-range-file.js.map +1 -1
- package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -1
- package/dist/lib/utils/normalize-parquet-options.js +15 -1
- package/dist/lib/utils/normalize-parquet-options.js.map +1 -1
- package/dist/parquet-dataset-source.cjs +16528 -4928
- package/dist/parquet-dataset-source.cjs.map +3 -3
- package/dist/parquet-dataset-source.d.ts +31 -4
- package/dist/parquet-dataset-source.d.ts.map +1 -1
- package/dist/parquet-dataset-source.js +296 -74
- package/dist/parquet-dataset-source.js.map +1 -1
- package/dist/parquet-encoded-page-types.d.ts +108 -0
- package/dist/parquet-encoded-page-types.d.ts.map +1 -0
- package/dist/parquet-encoded-page-types.js +5 -0
- package/dist/parquet-encoded-page-types.js.map +1 -0
- package/dist/parquet-js-loader-types.d.ts +2 -0
- package/dist/parquet-js-loader-types.d.ts.map +1 -1
- package/dist/parquet-js-loader-types.js +2 -1
- package/dist/parquet-js-loader-types.js.map +1 -1
- package/dist/parquet-js-loader.d.ts +1 -0
- package/dist/parquet-js-loader.d.ts.map +1 -1
- package/dist/parquet-js-loader.js +2 -1
- package/dist/parquet-js-loader.js.map +1 -1
- package/dist/parquet-js-writer.d.ts +23 -2
- package/dist/parquet-js-writer.d.ts.map +1 -1
- package/dist/parquet-js-writer.js +1 -1
- package/dist/parquet-js-writer.js.map +1 -1
- package/dist/parquet-loader-base.js +1 -1
- package/dist/parquet-loader-options.d.ts +11 -0
- package/dist/parquet-loader-options.d.ts.map +1 -1
- package/dist/parquet-loader-options.js.map +1 -1
- package/dist/parquet-source-capabilities.d.ts +8 -1
- package/dist/parquet-source-capabilities.d.ts.map +1 -1
- package/dist/parquet-source-capabilities.js +10 -0
- package/dist/parquet-source-capabilities.js.map +1 -1
- package/dist/parquet-source-loader-types.d.ts +10 -0
- package/dist/parquet-source-loader-types.d.ts.map +1 -1
- package/dist/parquet-source-loader-types.js +11 -1
- package/dist/parquet-source-loader-types.js.map +1 -1
- package/dist/parquet-source-loader.cjs +14121 -2796
- package/dist/parquet-source-loader.cjs.map +3 -3
- package/dist/parquet-source-loader.d.ts +51 -4
- package/dist/parquet-source-loader.d.ts.map +1 -1
- package/dist/parquet-source-loader.js +651 -38
- package/dist/parquet-source-loader.js.map +1 -1
- package/dist/parquet-source-types.d.ts +180 -30
- package/dist/parquet-source-types.d.ts.map +1 -1
- package/dist/parquet-source-worker.js +7378 -6989
- package/dist/parquet-source-worker.js.map +4 -4
- package/dist/parquet-worker-node.cjs +8501 -1045
- package/dist/parquet-worker-node.cjs.map +4 -4
- package/dist/parquet-worker-url.js +5 -1
- package/dist/parquet-worker-url.js.map +1 -1
- package/dist/parquet-worker.js +289 -218
- package/dist/parquet-worker.js.map +4 -4
- package/dist/parquetjs/codecs/declare.d.ts +15 -0
- package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
- package/dist/parquetjs/codecs/declare.js +10 -0
- package/dist/parquetjs/codecs/declare.js.map +1 -1
- package/dist/parquetjs/codecs/delta.d.ts.map +1 -1
- package/dist/parquetjs/codecs/delta.js +356 -7
- package/dist/parquetjs/codecs/delta.js.map +1 -1
- package/dist/parquetjs/codecs/index.d.ts.map +1 -1
- package/dist/parquetjs/codecs/index.js +4 -0
- package/dist/parquetjs/codecs/index.js.map +1 -1
- package/dist/parquetjs/codecs/plain.d.ts +1 -1
- package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
- package/dist/parquetjs/codecs/plain.js +153 -12
- package/dist/parquetjs/codecs/plain.js.map +1 -1
- package/dist/parquetjs/codecs/rle.d.ts +4 -0
- package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
- package/dist/parquetjs/codecs/rle.js +406 -3
- package/dist/parquetjs/codecs/rle.js.map +1 -1
- package/dist/parquetjs/compression.d.ts +9 -0
- package/dist/parquetjs/compression.d.ts.map +1 -1
- package/dist/parquetjs/compression.js +86 -67
- package/dist/parquetjs/compression.js.map +1 -1
- package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -1
- package/dist/parquetjs/encoder/dictionary-planner.js +5 -2
- package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -1
- package/dist/parquetjs/encoder/parquet-encoder.d.ts +43 -1
- package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
- package/dist/parquetjs/encoder/parquet-encoder.js +691 -34
- package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts +29 -0
- package/dist/parquetjs/parquet-thrift/BoundingBox.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/BoundingBox.js +85 -0
- package/dist/parquetjs/parquet-thrift/BoundingBox.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +5 -0
- package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnChunk.js +35 -0
- package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts +35 -0
- package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js +135 -0
- package/dist/parquetjs/parquet-thrift/ColumnCryptoMetaData.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +10 -0
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +73 -0
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts +22 -0
- package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js +111 -0
- package/dist/parquetjs/parquet-thrift/EncryptionAlgorithm.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts +16 -0
- package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js +57 -0
- package/dist/parquetjs/parquet-thrift/FileCryptoMetaData.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +5 -0
- package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/FileMetaData.js +35 -0
- package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts +18 -0
- package/dist/parquetjs/parquet-thrift/GeospatialStatistics.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js +62 -0
- package/dist/parquetjs/parquet-thrift/GeospatialStatistics.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts +26 -0
- package/dist/parquetjs/parquet-thrift/SizeStatistics.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/SizeStatistics.js +85 -0
- package/dist/parquetjs/parquet-thrift/SizeStatistics.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/index.d.ts +6 -0
- package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/index.js +6 -0
- package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
- package/dist/parquetjs/parser/decoders.d.ts +10 -1
- package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
- package/dist/parquetjs/parser/decoders.js +318 -14
- package/dist/parquetjs/parser/decoders.js.map +1 -1
- package/dist/parquetjs/parser/encoded-pages.d.ts +24 -0
- package/dist/parquetjs/parser/encoded-pages.d.ts.map +1 -0
- package/dist/parquetjs/parser/encoded-pages.js +206 -0
- package/dist/parquetjs/parser/encoded-pages.js.map +1 -0
- package/dist/parquetjs/parser/parquet-reader.d.ts +88 -12
- package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
- package/dist/parquetjs/parser/parquet-reader.js +713 -66
- package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
- package/dist/parquetjs/schema/declare.d.ts +22 -3
- package/dist/parquetjs/schema/declare.d.ts.map +1 -1
- package/dist/parquetjs/schema/declare.js.map +1 -1
- package/dist/parquetjs/schema/schema.d.ts.map +1 -1
- package/dist/parquetjs/schema/schema.js +10 -0
- package/dist/parquetjs/schema/schema.js.map +1 -1
- package/dist/parquetjs/schema/shred.d.ts.map +1 -1
- package/dist/parquetjs/schema/shred.js +219 -11
- package/dist/parquetjs/schema/shred.js.map +1 -1
- package/dist/parquetjs/schema/types.js +19 -21
- package/dist/parquetjs/schema/types.js.map +1 -1
- package/dist/parquetjs/schema/variant.d.ts +3 -0
- package/dist/parquetjs/schema/variant.d.ts.map +1 -0
- package/dist/parquetjs/schema/variant.js +248 -0
- package/dist/parquetjs/schema/variant.js.map +1 -0
- package/dist/parquetjs/utils/crc32.d.ts +3 -0
- package/dist/parquetjs/utils/crc32.d.ts.map +1 -0
- package/dist/parquetjs/utils/crc32.js +15 -0
- package/dist/parquetjs/utils/crc32.js.map +1 -0
- package/dist/parquetjs/utils/read-utils.d.ts +11 -1
- package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
- package/dist/parquetjs/utils/read-utils.js +21 -1
- package/dist/parquetjs/utils/read-utils.js.map +1 -1
- package/dist/unbundled.d.ts +2 -1
- package/dist/unbundled.d.ts.map +1 -1
- package/dist/unbundled.js +1 -0
- package/dist/unbundled.js.map +1 -1
- package/package.json +36 -13
- package/src/bundled.ts +10 -0
- package/src/delta-format.ts +12 -0
- package/src/delta-source-loader-types.ts +40 -0
- package/src/delta-source.ts +305 -0
- package/src/delta-types.ts +40 -0
- package/src/iceberg-rest-catalog.ts +122 -0
- package/src/iceberg-table-source.ts +1037 -0
- package/src/iceberg-types.ts +165 -0
- package/src/index.ts +59 -1
- package/src/lib/arrow/convert-schema-from-parquet.ts +113 -19
- package/src/lib/arrow/create-nested-arrow-vector.ts +116 -0
- package/src/lib/encoders/encode-table-to-parquet-js.ts +268 -7
- package/src/lib/geo/geoparquet-covering.ts +201 -0
- package/src/lib/geo/geospatial-metadata.ts +42 -15
- package/src/lib/parquet-bloom-filter-planner.ts +86 -0
- package/src/lib/parquet-bloom-filter.ts +345 -0
- package/src/lib/parquet-encryption.ts +344 -0
- package/src/lib/parquet-page-index.ts +180 -34
- package/src/lib/parquet-predicate.ts +52 -16
- package/src/lib/parquet-source-worker-decoder.ts +116 -20
- package/src/lib/parquet-source-worker-types.ts +25 -0
- package/src/lib/parsers/get-parquet-schema.ts +3 -1
- package/src/lib/parsers/parse-parquet-to-arrow-js.ts +397 -17
- package/src/lib/parsers/parse-parquet-to-arrow.ts +4 -5
- package/src/lib/parsers/parse-parquet-to-columns.ts +3 -1
- package/src/lib/parsers/parse-parquet-to-json.ts +18 -2
- package/src/lib/slice-parquet-batch.ts +32 -0
- package/src/lib/sources/parquet-range-file.ts +35 -29
- package/src/lib/utils/normalize-parquet-options.ts +17 -1
- package/src/parquet-dataset-source.ts +397 -85
- package/src/parquet-encoded-page-types.ts +122 -0
- package/src/parquet-js-loader-types.ts +1 -0
- package/src/parquet-js-loader.ts +2 -1
- package/src/parquet-js-writer.ts +30 -0
- package/src/parquet-loader-options.ts +11 -0
- package/src/parquet-source-capabilities.ts +18 -1
- package/src/parquet-source-loader-types.ts +10 -0
- package/src/parquet-source-loader.ts +1024 -52
- package/src/parquet-source-types.ts +197 -28
- package/src/parquet-worker-url.ts +6 -1
- package/src/parquetjs/codecs/declare.ts +27 -0
- package/src/parquetjs/codecs/delta.ts +466 -6
- package/src/parquetjs/codecs/index.ts +4 -0
- package/src/parquetjs/codecs/plain.ts +177 -11
- package/src/parquetjs/codecs/rle.ts +573 -3
- package/src/parquetjs/compression.ts +102 -76
- package/src/parquetjs/encoder/dictionary-planner.ts +7 -2
- package/src/parquetjs/encoder/parquet-encoder.ts +1016 -38
- package/src/parquetjs/parquet-thrift/BoundingBox.ts +108 -0
- package/src/parquetjs/parquet-thrift/ColumnChunk.ts +35 -0
- package/src/parquetjs/parquet-thrift/ColumnCryptoMetaData.ts +139 -0
- package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +73 -0
- package/src/parquetjs/parquet-thrift/EncryptionAlgorithm.ts +127 -0
- package/src/parquetjs/parquet-thrift/FileCryptoMetaData.ts +60 -0
- package/src/parquetjs/parquet-thrift/FileMetaData.ts +35 -0
- package/src/parquetjs/parquet-thrift/GeospatialStatistics.ts +68 -0
- package/src/parquetjs/parquet-thrift/SizeStatistics.ts +98 -0
- package/src/parquetjs/parquet-thrift/index.ts +6 -0
- package/src/parquetjs/parser/decoders.ts +451 -26
- package/src/parquetjs/parser/encoded-pages.ts +278 -0
- package/src/parquetjs/parser/parquet-reader.ts +1112 -87
- package/src/parquetjs/schema/declare.ts +22 -2
- package/src/parquetjs/schema/schema.ts +10 -0
- package/src/parquetjs/schema/shred.ts +238 -11
- package/src/parquetjs/schema/types.ts +16 -25
- package/src/parquetjs/schema/variant.ts +313 -0
- package/src/parquetjs/utils/crc32.ts +15 -0
- package/src/parquetjs/utils/read-utils.ts +26 -1
- package/src/unbundled.ts +14 -0
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
import { Encoding, PageType } from "../parquet-thrift/index.js";
|
|
5
|
+
import { crc32 } from "../utils/crc32.js";
|
|
6
|
+
import { readUInt32LE } from "../utils/binary-utils.js";
|
|
7
|
+
import { decodePageHeader, getBitWidth, getThriftEnum } from "../utils/read-utils.js";
|
|
8
|
+
/**
|
|
9
|
+
* Splits a plaintext column-chunk buffer into transport-neutral encoded page descriptors.
|
|
10
|
+
*
|
|
11
|
+
* This parses only page headers and level framing. It deliberately does not decode levels,
|
|
12
|
+
* dictionaries, or values, allowing the returned bytes to be consumed by a CPU or GPU backend.
|
|
13
|
+
*/
|
|
14
|
+
export async function scanParquetEncodedPages(buffer, context) {
|
|
15
|
+
const pages = [];
|
|
16
|
+
let offset = 0;
|
|
17
|
+
let dataPageOrdinal = 0;
|
|
18
|
+
while (offset < buffer.byteLength) {
|
|
19
|
+
const { pageHeader, length: headerByteLength } = decodePageHeader(buffer, offset);
|
|
20
|
+
const bodyOffset = offset + headerByteLength;
|
|
21
|
+
const bodyEnd = bodyOffset + pageHeader.compressed_page_size;
|
|
22
|
+
if (pageHeader.compressed_page_size < 0 ||
|
|
23
|
+
pageHeader.uncompressed_page_size < 0 ||
|
|
24
|
+
bodyEnd > buffer.byteLength) {
|
|
25
|
+
throw new Error('Parquet page extends beyond the available column-chunk buffer');
|
|
26
|
+
}
|
|
27
|
+
const compressedBody = buffer.subarray(bodyOffset, bodyEnd);
|
|
28
|
+
verifyEncodedPageChecksum(compressedBody, pageHeader, context.verifyPageChecksums);
|
|
29
|
+
const pageType = getThriftEnum(PageType, pageHeader.type);
|
|
30
|
+
if (pageType === 'DICTIONARY_PAGE') {
|
|
31
|
+
pages.push(await createDictionaryPage(compressedBody, pageHeader, context));
|
|
32
|
+
}
|
|
33
|
+
else if (pageType === 'DATA_PAGE') {
|
|
34
|
+
pages.push(await createDataPageV1(compressedBody, pageHeader, context, dataPageOrdinal++));
|
|
35
|
+
}
|
|
36
|
+
else if (pageType === 'DATA_PAGE_V2') {
|
|
37
|
+
pages.push(await createDataPageV2(compressedBody, pageHeader, context, dataPageOrdinal++));
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
throw new Error(`Unsupported Parquet page type ${pageType}`);
|
|
41
|
+
}
|
|
42
|
+
offset = bodyEnd;
|
|
43
|
+
}
|
|
44
|
+
return pages;
|
|
45
|
+
}
|
|
46
|
+
/** Creates one dictionary-page descriptor, optionally retaining its compressed bytes. */
|
|
47
|
+
async function createDictionaryPage(compressedBody, pageHeader, context) {
|
|
48
|
+
const dictionaryHeader = pageHeader.dictionary_page_header;
|
|
49
|
+
if (!dictionaryHeader) {
|
|
50
|
+
throw new Error('Parquet dictionary page is missing its dictionary header');
|
|
51
|
+
}
|
|
52
|
+
const preserveCompression = shouldPreserveCompression(context);
|
|
53
|
+
const data = preserveCompression
|
|
54
|
+
? compressedBody
|
|
55
|
+
: await decompressPageBody(compressedBody, pageHeader.uncompressed_page_size, context);
|
|
56
|
+
return Object.freeze({
|
|
57
|
+
type: 'dictionary',
|
|
58
|
+
pageOrdinal: -1,
|
|
59
|
+
encoding: getThriftEnum(Encoding, dictionaryHeader.encoding),
|
|
60
|
+
compression: context.compression,
|
|
61
|
+
compressionState: preserveCompression ? 'compressed' : 'decompressed',
|
|
62
|
+
valueCount: dictionaryHeader.num_values,
|
|
63
|
+
nonNullValueCount: dictionaryHeader.num_values,
|
|
64
|
+
data,
|
|
65
|
+
values: preserveCompression ? undefined : createSection(0, data.byteLength),
|
|
66
|
+
compressedByteLength: pageHeader.compressed_page_size,
|
|
67
|
+
uncompressedByteLength: pageHeader.uncompressed_page_size
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** Creates one V1 data-page descriptor and normalizes its length-prefixed level streams. */
|
|
71
|
+
async function createDataPageV1(compressedBody, pageHeader, context, pageOrdinal) {
|
|
72
|
+
const dataHeader = pageHeader.data_page_header;
|
|
73
|
+
if (!dataHeader) {
|
|
74
|
+
throw new Error('Parquet V1 data page is missing its data header');
|
|
75
|
+
}
|
|
76
|
+
const preserveCompression = shouldPreserveCompression(context);
|
|
77
|
+
const data = preserveCompression
|
|
78
|
+
? compressedBody
|
|
79
|
+
: await decompressPageBody(compressedBody, pageHeader.uncompressed_page_size, context);
|
|
80
|
+
let repetitionLevels;
|
|
81
|
+
let definitionLevels;
|
|
82
|
+
let values;
|
|
83
|
+
if (!preserveCompression) {
|
|
84
|
+
let sectionOffset = 0;
|
|
85
|
+
const repetitionLevelEncoding = getThriftEnum(Encoding, dataHeader.repetition_level_encoding);
|
|
86
|
+
repetitionLevels = readV1LevelSection(data, sectionOffset, dataHeader.num_values, context.column.rLevelMax, repetitionLevelEncoding);
|
|
87
|
+
sectionOffset = repetitionLevels.byteOffset + repetitionLevels.byteLength;
|
|
88
|
+
const definitionLevelEncoding = getThriftEnum(Encoding, dataHeader.definition_level_encoding);
|
|
89
|
+
definitionLevels = readV1LevelSection(data, sectionOffset, dataHeader.num_values, context.column.dLevelMax, definitionLevelEncoding);
|
|
90
|
+
sectionOffset = definitionLevels.byteOffset + definitionLevels.byteLength;
|
|
91
|
+
values = createSection(sectionOffset, data.byteLength - sectionOffset);
|
|
92
|
+
}
|
|
93
|
+
return Object.freeze({
|
|
94
|
+
type: 'data-v1',
|
|
95
|
+
pageOrdinal,
|
|
96
|
+
encoding: getThriftEnum(Encoding, dataHeader.encoding),
|
|
97
|
+
repetitionLevelEncoding: getThriftEnum(Encoding, dataHeader.repetition_level_encoding),
|
|
98
|
+
definitionLevelEncoding: getThriftEnum(Encoding, dataHeader.definition_level_encoding),
|
|
99
|
+
compression: context.compression,
|
|
100
|
+
compressionState: preserveCompression ? 'compressed' : 'decompressed',
|
|
101
|
+
valueCount: dataHeader.num_values,
|
|
102
|
+
data,
|
|
103
|
+
repetitionLevels,
|
|
104
|
+
definitionLevels,
|
|
105
|
+
values,
|
|
106
|
+
compressedByteLength: pageHeader.compressed_page_size,
|
|
107
|
+
uncompressedByteLength: pageHeader.uncompressed_page_size
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
/** Creates one V2 data-page descriptor whose level sections are already length-delimited. */
|
|
111
|
+
async function createDataPageV2(compressedBody, pageHeader, context, pageOrdinal) {
|
|
112
|
+
const dataHeader = pageHeader.data_page_header_v2;
|
|
113
|
+
if (!dataHeader) {
|
|
114
|
+
throw new Error('Parquet V2 data page is missing its data header');
|
|
115
|
+
}
|
|
116
|
+
const repetitionByteLength = dataHeader.repetition_levels_byte_length;
|
|
117
|
+
const definitionByteLength = dataHeader.definition_levels_byte_length;
|
|
118
|
+
const levelsByteLength = repetitionByteLength + definitionByteLength;
|
|
119
|
+
if (levelsByteLength > compressedBody.byteLength) {
|
|
120
|
+
throw new Error('Parquet V2 level sections extend beyond the page body');
|
|
121
|
+
}
|
|
122
|
+
const valuesAreCompressed = dataHeader.is_compressed !== false && context.compression !== 'UNCOMPRESSED';
|
|
123
|
+
const preserveCompression = valuesAreCompressed && shouldPreserveCompression(context);
|
|
124
|
+
let data = compressedBody;
|
|
125
|
+
if (valuesAreCompressed && !preserveCompression) {
|
|
126
|
+
const uncompressedValuesByteLength = pageHeader.uncompressed_page_size - levelsByteLength;
|
|
127
|
+
if (uncompressedValuesByteLength < 0) {
|
|
128
|
+
throw new Error('Invalid Parquet V2 uncompressed value length');
|
|
129
|
+
}
|
|
130
|
+
const values = await context.decompressPage(compressedBody.subarray(levelsByteLength), uncompressedValuesByteLength);
|
|
131
|
+
data = new Uint8Array(levelsByteLength + values.byteLength);
|
|
132
|
+
data.set(compressedBody.subarray(0, levelsByteLength));
|
|
133
|
+
data.set(values, levelsByteLength);
|
|
134
|
+
}
|
|
135
|
+
return Object.freeze({
|
|
136
|
+
type: 'data-v2',
|
|
137
|
+
pageOrdinal,
|
|
138
|
+
encoding: getThriftEnum(Encoding, dataHeader.encoding),
|
|
139
|
+
repetitionLevelEncoding: 'RLE',
|
|
140
|
+
definitionLevelEncoding: 'RLE',
|
|
141
|
+
compression: context.compression,
|
|
142
|
+
compressionState: preserveCompression ? 'compressed' : 'decompressed',
|
|
143
|
+
valueCount: dataHeader.num_values,
|
|
144
|
+
nonNullValueCount: dataHeader.num_values - dataHeader.num_nulls,
|
|
145
|
+
data,
|
|
146
|
+
repetitionLevels: createSection(0, repetitionByteLength),
|
|
147
|
+
definitionLevels: createSection(repetitionByteLength, definitionByteLength),
|
|
148
|
+
values: createSection(levelsByteLength, data.byteLength - levelsByteLength),
|
|
149
|
+
compressedByteLength: pageHeader.compressed_page_size,
|
|
150
|
+
uncompressedByteLength: pageHeader.uncompressed_page_size
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
/** Returns whether the downstream decoder requested this nontrivial codec verbatim. */
|
|
154
|
+
function shouldPreserveCompression(context) {
|
|
155
|
+
return (context.compression !== 'UNCOMPRESSED' &&
|
|
156
|
+
Boolean(context.preserveCompression?.has(context.compression)));
|
|
157
|
+
}
|
|
158
|
+
/** Inflates a complete V1 or dictionary page body when its codec is not deferred. */
|
|
159
|
+
async function decompressPageBody(compressedBody, uncompressedByteLength, context) {
|
|
160
|
+
if (context.compression === 'UNCOMPRESSED')
|
|
161
|
+
return compressedBody;
|
|
162
|
+
return await context.decompressPage(compressedBody, uncompressedByteLength);
|
|
163
|
+
}
|
|
164
|
+
/** Locates one V1 repetition/definition level stream without decoding its level values. */
|
|
165
|
+
function readV1LevelSection(data, offset, valueCount, maxLevel, encoding) {
|
|
166
|
+
if (maxLevel === 0)
|
|
167
|
+
return createSection(offset, 0);
|
|
168
|
+
if (encoding === 'RLE') {
|
|
169
|
+
if (offset + 4 > data.byteLength) {
|
|
170
|
+
throw new Error('Parquet V1 RLE level stream is missing its length prefix');
|
|
171
|
+
}
|
|
172
|
+
const byteLength = readUInt32LE(data, offset);
|
|
173
|
+
const byteOffset = offset + 4;
|
|
174
|
+
assertSectionBounds(data, byteOffset, byteLength);
|
|
175
|
+
return createSection(byteOffset, byteLength);
|
|
176
|
+
}
|
|
177
|
+
if (encoding === 'BIT_PACKED') {
|
|
178
|
+
// Legacy BIT_PACKED levels are padded to complete groups of eight values. This differs from
|
|
179
|
+
// simply rounding the total bit count and matters whenever bit width exceeds one.
|
|
180
|
+
const byteLength = Math.ceil(valueCount / 8) * getBitWidth(maxLevel);
|
|
181
|
+
assertSectionBounds(data, offset, byteLength);
|
|
182
|
+
return createSection(offset, byteLength);
|
|
183
|
+
}
|
|
184
|
+
throw new Error(`Unsupported Parquet V1 level encoding ${encoding}`);
|
|
185
|
+
}
|
|
186
|
+
/** Creates an immutable section descriptor. */
|
|
187
|
+
function createSection(byteOffset, byteLength) {
|
|
188
|
+
return Object.freeze({ byteOffset, byteLength });
|
|
189
|
+
}
|
|
190
|
+
/** Validates a page section before exposing it to a deferred decoder. */
|
|
191
|
+
function assertSectionBounds(data, byteOffset, byteLength) {
|
|
192
|
+
if (byteOffset < 0 || byteLength < 0 || byteOffset + byteLength > data.byteLength) {
|
|
193
|
+
throw new Error('Parquet page section extends beyond the page body');
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/** Verifies a page checksum against its stored, still-compressed body. */
|
|
197
|
+
function verifyEncodedPageChecksum(compressedBody, pageHeader, verifyPageChecksums = false) {
|
|
198
|
+
if (!verifyPageChecksums || pageHeader.crc === undefined)
|
|
199
|
+
return;
|
|
200
|
+
const expected = pageHeader.crc >>> 0;
|
|
201
|
+
const actual = crc32(compressedBody);
|
|
202
|
+
if (actual !== expected) {
|
|
203
|
+
throw new Error(`Parquet page checksum mismatch: expected ${expected}, calculated ${actual}`);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
//# sourceMappingURL=encoded-pages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoded-pages.js","sourceRoot":"","sources":["../../../src/parquetjs/parser/encoded-pages.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import type { ReadableFile } from '@loaders.gl/loader-utils';
|
|
2
2
|
import { ParquetSchema } from "../schema/schema.js";
|
|
3
|
+
import type { ParquetEncodedColumnChunk } from "../../parquet-encoded-page-types.js";
|
|
3
4
|
import { ColumnChunk, FileMetaData, RowGroup } from "../parquet-thrift/index.js";
|
|
4
5
|
import { ParquetRowGroup, ParquetColumnChunk, ParquetReaderContext } from "../schema/declare.js";
|
|
5
6
|
import type { ParquetDataPageLocation, ParquetPageLocations, ParquetRowRange } from "../../lib/parquet-page-index.js";
|
|
7
|
+
import { type ParquetEncryptionAlgorithm, type ParquetKeyRetriever } from "../../lib/parquet-encryption.js";
|
|
6
8
|
export type ParquetReaderProps = {
|
|
7
9
|
/** Maximum dictionary-page read size. */
|
|
8
10
|
defaultDictionarySize?: number;
|
|
@@ -14,8 +16,22 @@ export type ParquetReaderProps = {
|
|
|
14
16
|
useTypedValueBuffers?: boolean;
|
|
15
17
|
/** Decode repetition and definition levels into compact unsigned typed arrays. */
|
|
16
18
|
useTypedLevelBuffers?: boolean;
|
|
19
|
+
/** Decode eligible PLAIN BYTE_ARRAY columns into Arrow-compatible contiguous buffers. */
|
|
20
|
+
useArrowByteArrayBuffers?: boolean;
|
|
21
|
+
/** Verify page-header CRC values when present. Disabled by default for throughput. */
|
|
22
|
+
verifyPageChecksums?: boolean;
|
|
23
|
+
/** Decode legacy INT96 values as epoch nanoseconds for Arrow timestamp columns. */
|
|
24
|
+
int96AsTimestamp?: boolean;
|
|
25
|
+
/** Verify plaintext-footer signatures when present. Enabled by default. */
|
|
26
|
+
verifyFooterSignature?: boolean;
|
|
17
27
|
/** Abort signal forwarded to every underlying random-access read. */
|
|
18
28
|
signal?: AbortSignal;
|
|
29
|
+
/** Resolves modular-encryption keys from the file's key metadata. */
|
|
30
|
+
keyRetriever?: ParquetKeyRetriever;
|
|
31
|
+
/** AAD prefix for files that intentionally omit it from FileCryptoMetaData. */
|
|
32
|
+
aadPrefix?: Uint8Array;
|
|
33
|
+
/** Pre-resolved encryption context used by worker-local readers. */
|
|
34
|
+
encryptionContext?: ParquetReaderEncryptionContext;
|
|
19
35
|
};
|
|
20
36
|
/** Properties for initializing a ParquetRowGroupReader */
|
|
21
37
|
export type ParquetIterationProps = {
|
|
@@ -26,6 +42,17 @@ export type ParquetIterationProps = {
|
|
|
26
42
|
/** Abort signal forwarded to row-group and column-chunk reads. */
|
|
27
43
|
signal?: AbortSignal;
|
|
28
44
|
};
|
|
45
|
+
type NormalizedParquetReaderProps = Required<Omit<ParquetReaderProps, 'signal' | 'keyRetriever' | 'aadPrefix' | 'encryptionContext'>> & Pick<ParquetReaderProps, 'signal' | 'keyRetriever' | 'aadPrefix' | 'encryptionContext'>;
|
|
46
|
+
/** File-level parameters needed to authenticate modular-encrypted modules. */
|
|
47
|
+
type ParquetEncryptionContext = {
|
|
48
|
+
algorithm: ParquetEncryptionAlgorithm;
|
|
49
|
+
aadPrefix?: Uint8Array;
|
|
50
|
+
fileUnique: Uint8Array;
|
|
51
|
+
footerKeyMetadata?: Uint8Array;
|
|
52
|
+
footerSigningKeyMetadata?: Uint8Array;
|
|
53
|
+
};
|
|
54
|
+
/** File-level encryption parameters needed to decrypt worker-transferred page modules. */
|
|
55
|
+
export type ParquetReaderEncryptionContext = Pick<ParquetEncryptionContext, 'algorithm' | 'aadPrefix' | 'fileUnique' | 'footerKeyMetadata'>;
|
|
29
56
|
/**
|
|
30
57
|
* The parquet envelope reader allows direct, unbuffered access to the individual
|
|
31
58
|
* sections of the parquet file, namely the header, footer and the row groups.
|
|
@@ -33,18 +60,37 @@ export type ParquetIterationProps = {
|
|
|
33
60
|
* rows from a parquet file use the ParquetReader instead
|
|
34
61
|
*/
|
|
35
62
|
export declare class ParquetReader {
|
|
36
|
-
static defaultProps:
|
|
37
|
-
|
|
38
|
-
};
|
|
39
|
-
props: Required<Omit<ParquetReaderProps, 'signal'>> & {
|
|
40
|
-
signal?: AbortSignal;
|
|
41
|
-
};
|
|
63
|
+
static defaultProps: NormalizedParquetReaderProps;
|
|
64
|
+
props: NormalizedParquetReaderProps;
|
|
42
65
|
file: ReadableFile;
|
|
43
66
|
metadata: Promise<FileMetaData> | null;
|
|
44
67
|
/** Parsed Parquet schema shared by metadata, iteration, and materialization paths. */
|
|
45
68
|
private schema;
|
|
69
|
+
/** Encryption parameters decoded from plaintext or encrypted footer metadata. */
|
|
70
|
+
private encryptionContext?;
|
|
71
|
+
/** Resolved keys shared by encrypted modules in this reader instance. */
|
|
72
|
+
private readonly encryptionKeyCache;
|
|
73
|
+
/** Compression backends selected once and shared by every page in this reader. */
|
|
74
|
+
private readonly pageDecompressors;
|
|
46
75
|
constructor(file: ReadableFile, props?: ParquetReaderProps);
|
|
76
|
+
/** Whether the decoded footer describes an encrypted Parquet file. */
|
|
77
|
+
get encrypted(): boolean;
|
|
78
|
+
/** Whether this reader decodes legacy INT96 values as epoch nanoseconds. */
|
|
79
|
+
get int96AsTimestamp(): boolean;
|
|
80
|
+
/** Returns a cloneable snapshot of the file encryption context for worker decoding. */
|
|
81
|
+
getEncryptionContextForWorker(): ParquetReaderEncryptionContext | undefined;
|
|
82
|
+
/** Resolves one column key on the caller thread before transferring encrypted ranges. */
|
|
83
|
+
getColumnKeyForWorker(columnChunk: ColumnChunk, rowGroupOrdinal: number, columnOrdinal: number): Promise<{
|
|
84
|
+
keyMetadata?: Uint8Array;
|
|
85
|
+
keyMaterial: Uint8Array;
|
|
86
|
+
}>;
|
|
47
87
|
close(): void;
|
|
88
|
+
/** Returns the reader-scoped decoder for one Parquet compression method. */
|
|
89
|
+
private getPageDecompressor;
|
|
90
|
+
/** Reads a byte range, retaining a zero-copy view when the complete file is already in memory. */
|
|
91
|
+
private readBytes;
|
|
92
|
+
/** Returns a reader-scoped key resolver that avoids repeating key-provider work per module. */
|
|
93
|
+
private getCachedKeyRetriever;
|
|
48
94
|
/** Yield one row at a time */
|
|
49
95
|
rowIterator(props?: ParquetIterationProps): AsyncGenerator<import("../schema/declare").ParquetRow, void, unknown>;
|
|
50
96
|
/** Yield one batch of rows at a time */
|
|
@@ -63,16 +109,45 @@ export declare class ParquetReader {
|
|
|
63
109
|
readHeader(signal?: AbortSignal): Promise<void>;
|
|
64
110
|
/** Metadata is stored in the footer */
|
|
65
111
|
readFooter(signal?: AbortSignal): Promise<FileMetaData>;
|
|
112
|
+
/** Reads and decrypts an encrypted footer after the standard trailer. */
|
|
113
|
+
private readEncryptedFooter;
|
|
114
|
+
/** Records the encryption parameters exposed by plaintext-footer files. */
|
|
115
|
+
private setEncryptionContext;
|
|
116
|
+
/** Resolves only the selected encrypted columns, using crypto metadata paths before decryption. */
|
|
117
|
+
resolveColumnMetadata(rowGroup: RowGroup, rowGroupOrdinal: number, selectedColumnPaths?: readonly string[][]): Promise<void>;
|
|
118
|
+
/** Decrypts one encrypted column index or offset index module for selective planning. */
|
|
119
|
+
decryptIndexModule(bytes: Uint8Array, module: 'column-index' | 'offset-index', rowGroupOrdinal: number, columnOrdinal: number, columnChunk: ColumnChunk): Promise<Uint8Array>;
|
|
120
|
+
/** Decrypts the encrypted Bloom-filter header and bitset modules for one column chunk. */
|
|
121
|
+
decryptBloomFilter(bytes: Uint8Array, rowGroupOrdinal: number, columnOrdinal: number, columnChunk: ColumnChunk): Promise<Uint8Array>;
|
|
122
|
+
/** Resolves a column's plaintext metadata, decrypting column-specific metadata when present. */
|
|
123
|
+
private getColumnMetadata;
|
|
66
124
|
/** Data is stored in row groups (similar to Apache Arrow record batches) */
|
|
67
|
-
readRowGroup(schema: ParquetSchema, rowGroup: RowGroup, columnList: string[][], signal?: AbortSignal): Promise<ParquetRowGroup>;
|
|
68
|
-
/**
|
|
69
|
-
|
|
125
|
+
readRowGroup(schema: ParquetSchema, rowGroup: RowGroup, columnList: string[][], signal?: AbortSignal, rowGroupOrdinal?: number): Promise<ParquetRowGroup>;
|
|
126
|
+
/**
|
|
127
|
+
* Reads selected column chunks as encoded page descriptors without materializing values.
|
|
128
|
+
*
|
|
129
|
+
* Page headers, encryption, checksums, and optional decompression remain reader concerns. Value,
|
|
130
|
+
* dictionary, and level decoding is deliberately left to the downstream consumer.
|
|
131
|
+
*/
|
|
132
|
+
readRowGroupEncodedPages(schema: ParquetSchema, rowGroup: RowGroup, columnList: string[][], preserveCompression: ReadonlySet<string>, signal?: AbortSignal, rowGroupOrdinal?: number): Promise<readonly ParquetEncodedColumnChunk[]>;
|
|
133
|
+
/** Reads independently materializable non-repeated columns for one row range using page indexes. */
|
|
134
|
+
readRowGroupRange(schema: ParquetSchema, rowGroup: RowGroup, columnList: string[][], rowRange: ParquetRowRange, pageLocations: ParquetPageLocations, signal?: AbortSignal, rowGroupOrdinal?: number): Promise<ParquetRowGroup>;
|
|
135
|
+
/**
|
|
136
|
+
* Each row group contains column chunks for all the columns.
|
|
137
|
+
*/
|
|
138
|
+
private readUncompressedColumnChunkFromMemory;
|
|
70
139
|
/**
|
|
71
140
|
* Each row group contains column chunks for all the columns.
|
|
72
141
|
*/
|
|
73
|
-
readColumnChunk(schema: ParquetSchema, colChunk: ColumnChunk, signal?: AbortSignal): Promise<ParquetColumnChunk>;
|
|
74
|
-
/** Reads
|
|
75
|
-
|
|
142
|
+
readColumnChunk(schema: ParquetSchema, colChunk: ColumnChunk, signal?: AbortSignal, rowGroupOrdinal?: number, columnOrdinal?: number, resolvedMetadata?: NonNullable<ColumnChunk['meta_data']>): Promise<ParquetColumnChunk>;
|
|
143
|
+
/** Reads one column chunk as encoded dictionaries, levels, and values for deferred decoding. */
|
|
144
|
+
readColumnChunkEncodedPages(schema: ParquetSchema, columnChunk: ColumnChunk, preserveCompression: ReadonlySet<string>, signal?: AbortSignal, rowGroupOrdinal?: number, columnOrdinal?: number, resolvedMetadata?: NonNullable<ColumnChunk['meta_data']>): Promise<ParquetEncodedColumnChunk>;
|
|
145
|
+
/** Decrypts the length-prefixed page header and data modules in one column chunk. */
|
|
146
|
+
private decryptColumnPages;
|
|
147
|
+
/** Resolves the key metadata reference for an encrypted column. */
|
|
148
|
+
private getColumnKeyMetadata;
|
|
149
|
+
/** Reads and decodes contiguous data pages that begin and end on complete row boundaries. */
|
|
150
|
+
readColumnChunkRange(schema: ParquetSchema, columnChunk: ColumnChunk, rowRange: ParquetRowRange, pages: readonly ParquetDataPageLocation[], signal?: AbortSignal, rowGroupOrdinal?: number, columnOrdinal?: number, resolvedMetadata?: NonNullable<ColumnChunk['meta_data']>): Promise<ParquetColumnChunk>;
|
|
76
151
|
/**
|
|
77
152
|
* Getting dictionary for allows to flatten values by indices.
|
|
78
153
|
* @param dictionaryPageOffset
|
|
@@ -82,4 +157,5 @@ export declare class ParquetReader {
|
|
|
82
157
|
*/
|
|
83
158
|
getDictionary(dictionaryPageOffset: number, context: ParquetReaderContext, pagesOffset: number, signal?: AbortSignal): Promise<any[]>;
|
|
84
159
|
}
|
|
160
|
+
export {};
|
|
85
161
|
//# sourceMappingURL=parquet-reader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parquet-reader.d.ts","sourceRoot":"","sources":["../../../src/parquetjs/parser/parquet-reader.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,0BAA0B,CAAC;AAE3D,OAAO,EAAC,aAAa,EAAC,4BAAyB;
|
|
1
|
+
{"version":3,"file":"parquet-reader.d.ts","sourceRoot":"","sources":["../../../src/parquetjs/parser/parquet-reader.ts"],"names":[],"mappings":"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"}
|