@loaders.gl/parquet 5.0.0-alpha.2 → 5.0.0-alpha.3
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 +15005 -3143
- package/dist/index.cjs.map +3 -3
- package/dist/index.d.ts +7 -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 +15766 -4896
- 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-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 +14911 -4316
- package/dist/parquet-source-loader.cjs.map +3 -3
- package/dist/parquet-source-loader.d.ts +42 -4
- package/dist/parquet-source-loader.d.ts.map +1 -1
- package/dist/parquet-source-loader.js +585 -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 +7055 -6989
- package/dist/parquet-source-worker.js.map +4 -4
- package/dist/parquet-worker-node.cjs +8505 -1041
- 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/parquet-reader.d.ts +78 -12
- package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
- package/dist/parquetjs/parser/parquet-reader.js +605 -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 -11
- package/src/bundled.ts +3 -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 +50 -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-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 +929 -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/parquet-reader.ts +935 -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
|
@@ -5,12 +5,22 @@
|
|
|
5
5
|
// Forked from https://github.com/kbajalc/parquets under MIT license
|
|
6
6
|
// Forked from https://github.com/ironSource/parquetjs under MIT license
|
|
7
7
|
|
|
8
|
-
import type {Compression} from '@loaders.gl/compression';
|
|
9
8
|
import {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
BrotliCompressor,
|
|
10
|
+
BrotliDecompressor,
|
|
11
|
+
GZipCompressor,
|
|
12
|
+
GZipDecompressor,
|
|
13
|
+
LZ4Compressor,
|
|
14
|
+
LZ4Decompressor,
|
|
15
|
+
SnappyCompressor,
|
|
16
|
+
SnappyDecompressor,
|
|
17
|
+
ZstdCompressor,
|
|
18
|
+
ZstdDecompressor,
|
|
19
|
+
Decompressor,
|
|
20
|
+
type Compressor
|
|
21
|
+
} from '@loaders.gl/compression';
|
|
22
|
+
import {SnappyHysnappyDecompressor} from '@loaders.gl/compression/snappy-decompressor-hysnappy';
|
|
23
|
+
import {registerJSModules} from '@loaders.gl/loader-utils';
|
|
14
24
|
|
|
15
25
|
import {ParquetCompression} from './schema/declare';
|
|
16
26
|
import {toArrayBuffer, toUint8Array} from './utils/binary-utils';
|
|
@@ -29,17 +39,40 @@ export const PARQUET_COMPRESSION_METHODS: Partial<Record<ParquetCompression, tru
|
|
|
29
39
|
ZSTD: true
|
|
30
40
|
};
|
|
31
41
|
|
|
32
|
-
/**
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
42
|
+
/** Reader-scoped function that decompresses one independently encoded Parquet page. */
|
|
43
|
+
export type ParquetPageDecompressor = (value: Uint8Array, size: number) => Promise<Uint8Array>;
|
|
44
|
+
|
|
45
|
+
/** Fast Snappy decoder that permanently falls back to snappyjs when WASM is unavailable. */
|
|
46
|
+
class ParquetSnappyDecompressor extends Decompressor {
|
|
47
|
+
/** Compression format name. */
|
|
48
|
+
readonly name = 'snappy';
|
|
49
|
+
/** Snappy does not have a standard standalone file extension. */
|
|
50
|
+
readonly extensions: string[] = [];
|
|
51
|
+
/** Snappy does not have a standard HTTP content encoding. */
|
|
52
|
+
readonly contentEncodings: string[] = [];
|
|
53
|
+
/** snappyjs keeps this composite decoder available without WebAssembly. */
|
|
54
|
+
readonly isSupported = true;
|
|
55
|
+
/** Preferred compact WASM decoder for page-sized frames. */
|
|
56
|
+
private readonly hysnappy = new SnappyHysnappyDecompressor();
|
|
57
|
+
/** Always-supported JavaScript decoder. */
|
|
58
|
+
private readonly snappyjs = new SnappyDecompressor();
|
|
59
|
+
/** Whether this instance has selected the JavaScript fallback. */
|
|
60
|
+
private useSnappyjs = !this.hysnappy.isSupported;
|
|
40
61
|
|
|
41
|
-
/**
|
|
42
|
-
|
|
62
|
+
/** Decodes with hysnappy, retaining snappyjs after the first WASM setup or runtime failure. */
|
|
63
|
+
override async decompress(input: ArrayBuffer, size?: number): Promise<ArrayBuffer> {
|
|
64
|
+
if (!this.useSnappyjs) {
|
|
65
|
+
try {
|
|
66
|
+
return await this.hysnappy.decompress(input, size);
|
|
67
|
+
} catch {
|
|
68
|
+
// CSP can reject WebAssembly compilation even when the WebAssembly global exists. Once
|
|
69
|
+
// that happens, avoid paying the same rejected initialization cost for every Parquet page.
|
|
70
|
+
this.useSnappyjs = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return await this.snappyjs.decompress(input, size);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
43
76
|
|
|
44
77
|
/**
|
|
45
78
|
* Registers optional codec modules without eagerly loading codec-backed implementations.
|
|
@@ -61,7 +94,7 @@ export async function deflate(method: ParquetCompression, value: Uint8Array): Pr
|
|
|
61
94
|
return value;
|
|
62
95
|
}
|
|
63
96
|
|
|
64
|
-
const compression = await
|
|
97
|
+
const compression = await getParquetCompressor(method);
|
|
65
98
|
const inputArrayBuffer = toArrayBuffer(value);
|
|
66
99
|
const compressedArrayBuffer = await compression.compress(inputArrayBuffer);
|
|
67
100
|
return toUint8Array(compressedArrayBuffer);
|
|
@@ -83,79 +116,72 @@ export async function decompress(
|
|
|
83
116
|
return toUint8Array(inputArrayBuffer);
|
|
84
117
|
}
|
|
85
118
|
|
|
86
|
-
const
|
|
87
|
-
if (nativeFormat && shouldUseNativeDecompressionStream(method)) {
|
|
88
|
-
const nativeOutput = await decompressWithNativeDecompressionStream(
|
|
89
|
-
inputArrayBuffer,
|
|
90
|
-
nativeFormat
|
|
91
|
-
);
|
|
92
|
-
if (nativeOutput) {
|
|
93
|
-
return toUint8Array(nativeOutput);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
const compression = await getParquetCompression(method);
|
|
119
|
+
const compression = await getParquetDecompressor(method);
|
|
98
120
|
const compressedArrayBuffer = await compression.decompress(inputArrayBuffer, size);
|
|
99
121
|
return toUint8Array(compressedArrayBuffer);
|
|
100
122
|
}
|
|
101
123
|
|
|
102
124
|
/**
|
|
103
|
-
*
|
|
125
|
+
* Creates a reusable decoder for the independently compressed pages in one Parquet reader.
|
|
104
126
|
*
|
|
105
|
-
*
|
|
106
|
-
*
|
|
127
|
+
* Reusing the lazy codec preserves its selected backend and avoids repeating dynamic import and
|
|
128
|
+
* preload work for every page while keeping module injection scoped to a reader invocation.
|
|
107
129
|
*/
|
|
108
|
-
function
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
130
|
+
export function createParquetPageDecompressor(method: ParquetCompression): ParquetPageDecompressor {
|
|
131
|
+
const decompressor = method === 'UNCOMPRESSED' ? null : createParquetDecompressor(method);
|
|
132
|
+
return async (value: Uint8Array, size: number): Promise<Uint8Array> => {
|
|
133
|
+
const inputArrayBuffer = toArrayBuffer(value);
|
|
134
|
+
if (!decompressor) {
|
|
135
|
+
return toUint8Array(inputArrayBuffer);
|
|
136
|
+
}
|
|
137
|
+
const decompressedArrayBuffer = await decompressor.decompress(inputArrayBuffer, size);
|
|
138
|
+
return toUint8Array(decompressedArrayBuffer);
|
|
139
|
+
};
|
|
116
140
|
}
|
|
117
141
|
|
|
118
|
-
/**
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
* @param method Parquet compression method.
|
|
122
|
-
* @returns Codec-backed compression implementation.
|
|
123
|
-
*/
|
|
124
|
-
async function getParquetCompression(method: ParquetCompression): Promise<Compression> {
|
|
125
|
-
compressionPromises[method] ||= createParquetCompression(method);
|
|
126
|
-
return await compressionPromises[method];
|
|
142
|
+
/** Returns a new lazily selecting compressor for one Parquet method. */
|
|
143
|
+
async function getParquetCompressor(method: ParquetCompression): Promise<Compressor> {
|
|
144
|
+
return createParquetCompressor(method);
|
|
127
145
|
}
|
|
128
146
|
|
|
129
|
-
/**
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
*/
|
|
135
|
-
|
|
147
|
+
/** Returns a new lazily selecting decompressor for one Parquet method. */
|
|
148
|
+
async function getParquetDecompressor(method: ParquetCompression): Promise<Decompressor> {
|
|
149
|
+
return createParquetDecompressor(method);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Creates the root-level default compressor for one Parquet method. */
|
|
153
|
+
function createParquetCompressor(method: ParquetCompression): Compressor {
|
|
136
154
|
switch (method) {
|
|
137
|
-
case 'GZIP':
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
case '
|
|
142
|
-
|
|
143
|
-
return new SnappyCompression();
|
|
144
|
-
}
|
|
145
|
-
case 'BROTLI': {
|
|
146
|
-
const {BrotliCompression} = await import('@loaders.gl/compression/brotli-compression');
|
|
147
|
-
return new BrotliCompression();
|
|
148
|
-
}
|
|
155
|
+
case 'GZIP':
|
|
156
|
+
return new GZipCompressor();
|
|
157
|
+
case 'SNAPPY':
|
|
158
|
+
return new SnappyCompressor();
|
|
159
|
+
case 'BROTLI':
|
|
160
|
+
return new BrotliCompressor();
|
|
149
161
|
case 'LZ4':
|
|
150
|
-
case 'LZ4_RAW':
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
return new
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
162
|
+
case 'LZ4_RAW':
|
|
163
|
+
return new LZ4Compressor();
|
|
164
|
+
case 'ZSTD':
|
|
165
|
+
return new ZstdCompressor();
|
|
166
|
+
default:
|
|
167
|
+
throw new Error(`parquet: invalid compression method: ${method}`);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/** Creates the root-level default decompressor for one Parquet method. */
|
|
172
|
+
function createParquetDecompressor(method: ParquetCompression): Decompressor {
|
|
173
|
+
switch (method) {
|
|
174
|
+
case 'GZIP':
|
|
175
|
+
return new GZipDecompressor();
|
|
176
|
+
case 'SNAPPY':
|
|
177
|
+
return new ParquetSnappyDecompressor();
|
|
178
|
+
case 'BROTLI':
|
|
179
|
+
return new BrotliDecompressor();
|
|
180
|
+
case 'LZ4':
|
|
181
|
+
case 'LZ4_RAW':
|
|
182
|
+
return new LZ4Decompressor();
|
|
183
|
+
case 'ZSTD':
|
|
184
|
+
return new ZstdDecompressor();
|
|
159
185
|
default:
|
|
160
186
|
throw new Error(`parquet: invalid compression method: ${method}`);
|
|
161
187
|
}
|
|
@@ -32,7 +32,12 @@ export function planDictionary(
|
|
|
32
32
|
`Parquet dictionary page size limit must be a positive integer, received ${dictionaryPageSizeLimit}`
|
|
33
33
|
);
|
|
34
34
|
}
|
|
35
|
-
if (policy === false || values.length === 0
|
|
35
|
+
if (policy === false || values.length === 0) {
|
|
36
|
+
if (policy === false && isDictionaryEncoding(column.encoding!)) {
|
|
37
|
+
throw new Error(
|
|
38
|
+
`Parquet column ${column.path.join('.')} requests ${column.encoding} but dictionary encoding is disabled`
|
|
39
|
+
);
|
|
40
|
+
}
|
|
36
41
|
return undefined;
|
|
37
42
|
}
|
|
38
43
|
|
|
@@ -58,7 +63,7 @@ export function planDictionary(
|
|
|
58
63
|
return undefined;
|
|
59
64
|
}
|
|
60
65
|
const bitWidth = dictionaryValues.length <= 1 ? 0 : Math.ceil(Math.log2(dictionaryValues.length));
|
|
61
|
-
if (policy === 'auto') {
|
|
66
|
+
if (policy === 'auto' && !isDictionaryEncoding(column.encoding!)) {
|
|
62
67
|
const encodedIndices = PARQUET_CODECS.RLE_DICTIONARY.encodeValues(
|
|
63
68
|
column.primitiveType!,
|
|
64
69
|
indices,
|