@loaders.gl/parquet 4.4.5 → 5.0.0-alpha.2
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 +14 -3
- package/dist/bundled.d.ts +9 -0
- package/dist/bundled.d.ts.map +1 -0
- package/dist/bundled.js +10 -0
- package/dist/bundled.js.map +1 -0
- package/dist/geoparquet-loader-with-parser.d.ts +33 -0
- package/dist/geoparquet-loader-with-parser.d.ts.map +1 -0
- package/dist/geoparquet-loader-with-parser.js +52 -0
- package/dist/geoparquet-loader-with-parser.js.map +1 -0
- package/dist/geoparquet-loader.d.ts +59 -0
- package/dist/geoparquet-loader.d.ts.map +1 -0
- package/dist/geoparquet-loader.js +30 -0
- package/dist/geoparquet-loader.js.map +1 -0
- package/dist/index.cjs +25873 -4776
- package/dist/index.cjs.map +3 -4
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -11
- package/dist/index.js.map +1 -1
- package/dist/lib/arrow/convert-columns-to-row-group.js +3 -0
- package/dist/lib/arrow/convert-columns-to-row-group.js.map +1 -1
- package/dist/lib/arrow/convert-schema-from-parquet.d.ts.map +1 -1
- package/dist/lib/arrow/convert-schema-from-parquet.js +86 -26
- package/dist/lib/arrow/convert-schema-from-parquet.js.map +1 -1
- package/dist/lib/arrow/convert-schema-to-parquet.d.ts.map +1 -1
- package/dist/lib/arrow/convert-schema-to-parquet.js +16 -7
- package/dist/lib/arrow/convert-schema-to-parquet.js.map +1 -1
- package/dist/lib/arrow/create-nested-arrow-vector.d.ts +8 -0
- package/dist/lib/arrow/create-nested-arrow-vector.d.ts.map +1 -0
- package/dist/lib/arrow/create-nested-arrow-vector.js +396 -0
- package/dist/lib/arrow/create-nested-arrow-vector.js.map +1 -0
- package/dist/lib/constants.d.ts +0 -1
- package/dist/lib/constants.d.ts.map +1 -1
- package/dist/lib/constants.js +1 -2
- package/dist/lib/constants.js.map +1 -1
- package/dist/lib/encoders/encode-arrow-to-parquet.d.ts +2 -2
- package/dist/lib/encoders/encode-arrow-to-parquet.d.ts.map +1 -1
- package/dist/lib/encoders/encode-arrow-to-parquet.js +3 -10
- package/dist/lib/encoders/encode-arrow-to-parquet.js.map +1 -1
- package/dist/lib/encoders/encode-table-to-parquet-js.d.ts +5 -0
- package/dist/lib/encoders/encode-table-to-parquet-js.d.ts.map +1 -0
- package/dist/lib/encoders/encode-table-to-parquet-js.js +199 -0
- package/dist/lib/encoders/encode-table-to-parquet-js.js.map +1 -0
- package/dist/lib/geo/geospatial-metadata.d.ts +67 -0
- package/dist/lib/geo/geospatial-metadata.d.ts.map +1 -0
- package/dist/lib/geo/geospatial-metadata.js +338 -0
- package/dist/lib/geo/geospatial-metadata.js.map +1 -0
- package/dist/lib/parquet-page-index.d.ts +62 -0
- package/dist/lib/parquet-page-index.d.ts.map +1 -0
- package/dist/lib/parquet-page-index.js +377 -0
- package/dist/lib/parquet-page-index.js.map +1 -0
- package/dist/lib/parquet-predicate.d.ts +17 -0
- package/dist/lib/parquet-predicate.d.ts.map +1 -0
- package/dist/lib/parquet-predicate.js +300 -0
- package/dist/lib/parquet-predicate.js.map +1 -0
- package/dist/lib/parquet-source-worker-client.d.ts +6 -0
- package/dist/lib/parquet-source-worker-client.d.ts.map +1 -0
- package/dist/lib/parquet-source-worker-client.js +22 -0
- package/dist/lib/parquet-source-worker-client.js.map +1 -0
- package/dist/lib/parquet-source-worker-decoder.d.ts +4 -0
- package/dist/lib/parquet-source-worker-decoder.d.ts.map +1 -0
- package/dist/lib/parquet-source-worker-decoder.js +115 -0
- package/dist/lib/parquet-source-worker-decoder.js.map +1 -0
- package/dist/lib/parquet-source-worker-file.d.ts +24 -0
- package/dist/lib/parquet-source-worker-file.d.ts.map +1 -0
- package/dist/lib/parquet-source-worker-file.js +40 -0
- package/dist/lib/parquet-source-worker-file.js.map +1 -0
- package/dist/lib/parquet-source-worker-types.d.ts +97 -0
- package/dist/lib/parquet-source-worker-types.d.ts.map +1 -0
- package/dist/lib/parquet-source-worker-types.js +5 -0
- package/dist/lib/parquet-source-worker-types.js.map +1 -0
- package/dist/lib/parquet-worker-transport.d.ts +8 -0
- package/dist/lib/parquet-worker-transport.d.ts.map +1 -0
- package/dist/lib/parquet-worker-transport.js +40 -0
- package/dist/lib/parquet-worker-transport.js.map +1 -0
- package/dist/lib/parsers/convert-parquet-tables.d.ts +16 -0
- package/dist/lib/parsers/convert-parquet-tables.d.ts.map +1 -0
- package/dist/lib/parsers/convert-parquet-tables.js +30 -0
- package/dist/lib/parsers/convert-parquet-tables.js.map +1 -0
- 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-geoparquet-to-geojson.d.ts +4 -4
- package/dist/lib/parsers/parse-geoparquet-to-geojson.d.ts.map +1 -1
- package/dist/lib/parsers/parse-geoparquet-to-geojson.js +19 -6
- package/dist/lib/parsers/parse-geoparquet-to-geojson.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-tables.d.ts +37 -0
- package/dist/lib/parsers/parse-parquet-tables.d.ts.map +1 -0
- package/dist/lib/parsers/parse-parquet-tables.js +50 -0
- package/dist/lib/parsers/parse-parquet-tables.js.map +1 -0
- package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts +19 -0
- package/dist/lib/parsers/parse-parquet-to-arrow-js.d.ts.map +1 -0
- package/dist/lib/parsers/parse-parquet-to-arrow-js.js +608 -0
- package/dist/lib/parsers/parse-parquet-to-arrow-js.js.map +1 -0
- package/dist/lib/parsers/parse-parquet-to-arrow.d.ts +7 -7
- package/dist/lib/parsers/parse-parquet-to-arrow.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-arrow.js +45 -32
- package/dist/lib/parsers/parse-parquet-to-arrow.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-columns.d.ts +3 -3
- package/dist/lib/parsers/parse-parquet-to-columns.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-columns.js +1 -4
- package/dist/lib/parsers/parse-parquet-to-columns.js.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-json.d.ts +3 -3
- package/dist/lib/parsers/parse-parquet-to-json.d.ts.map +1 -1
- package/dist/lib/parsers/parse-parquet-to-json.js +77 -26
- package/dist/lib/parsers/parse-parquet-to-json.js.map +1 -1
- package/dist/lib/sources/parquet-range-file.d.ts +80 -0
- package/dist/lib/sources/parquet-range-file.d.ts.map +1 -0
- package/dist/lib/sources/parquet-range-file.js +261 -0
- package/dist/lib/sources/parquet-range-file.js.map +1 -0
- package/dist/lib/sources/single-batch-queue.d.ts +24 -0
- package/dist/lib/sources/single-batch-queue.d.ts.map +1 -0
- package/dist/lib/sources/single-batch-queue.js +91 -0
- package/dist/lib/sources/single-batch-queue.js.map +1 -0
- package/dist/lib/utils/load-wasm-node.d.ts +3 -0
- package/dist/lib/utils/load-wasm-node.d.ts.map +1 -0
- package/dist/lib/utils/load-wasm-node.js +23 -0
- package/dist/lib/utils/load-wasm-node.js.map +1 -0
- package/dist/lib/utils/load-wasm.d.ts +2 -2
- package/dist/lib/utils/load-wasm.d.ts.map +1 -1
- package/dist/lib/utils/load-wasm.js +28 -12
- package/dist/lib/utils/load-wasm.js.map +1 -1
- package/dist/lib/utils/make-stream-iterator.d.ts +2 -0
- package/dist/lib/utils/make-stream-iterator.d.ts.map +1 -1
- package/dist/lib/utils/make-stream-iterator.js +123 -14
- package/dist/lib/utils/make-stream-iterator.js.map +1 -1
- package/dist/lib/utils/normalize-parquet-options.d.ts +5 -0
- package/dist/lib/utils/normalize-parquet-options.d.ts.map +1 -0
- package/dist/lib/utils/normalize-parquet-options.js +11 -0
- package/dist/lib/utils/normalize-parquet-options.js.map +1 -0
- package/dist/parquet-dataset-source.cjs +26413 -0
- package/dist/parquet-dataset-source.cjs.map +6 -0
- package/dist/parquet-dataset-source.d.ts +54 -0
- package/dist/parquet-dataset-source.d.ts.map +1 -0
- package/dist/parquet-dataset-source.js +380 -0
- package/dist/parquet-dataset-source.js.map +1 -0
- package/dist/parquet-format.d.ts +2 -0
- package/dist/parquet-format.d.ts.map +1 -1
- package/dist/parquet-format.js +2 -0
- package/dist/parquet-format.js.map +1 -1
- package/dist/parquet-js-loader-types.d.ts +57 -0
- package/dist/parquet-js-loader-types.d.ts.map +1 -0
- package/dist/parquet-js-loader-types.js +33 -0
- package/dist/parquet-js-loader-types.js.map +1 -0
- package/dist/parquet-js-loader.d.ts +32 -0
- package/dist/parquet-js-loader.d.ts.map +1 -0
- package/dist/parquet-js-loader.js +58 -0
- package/dist/parquet-js-loader.js.map +1 -0
- package/dist/parquet-js-writer.d.ts +44 -0
- package/dist/parquet-js-writer.d.ts.map +1 -0
- package/dist/parquet-js-writer.js +28 -0
- package/dist/parquet-js-writer.js.map +1 -0
- package/dist/parquet-loader-base.d.ts +25 -0
- package/dist/parquet-loader-base.d.ts.map +1 -0
- package/dist/parquet-loader-base.js +23 -0
- package/dist/parquet-loader-base.js.map +1 -0
- package/dist/parquet-loader-options.d.ts +44 -0
- package/dist/parquet-loader-options.d.ts.map +1 -0
- package/dist/parquet-loader-options.js +10 -0
- package/dist/parquet-loader-options.js.map +1 -0
- package/dist/parquet-loader-types.d.ts +61 -0
- package/dist/parquet-loader-types.d.ts.map +1 -0
- package/dist/parquet-loader-types.js +17 -0
- package/dist/parquet-loader-types.js.map +1 -0
- package/dist/parquet-loader.d.ts +42 -0
- package/dist/parquet-loader.d.ts.map +1 -0
- package/dist/parquet-loader.js +68 -0
- package/dist/parquet-loader.js.map +1 -0
- package/dist/parquet-source-capabilities.d.ts +36 -0
- package/dist/parquet-source-capabilities.d.ts.map +1 -0
- package/dist/parquet-source-capabilities.js +22 -0
- package/dist/parquet-source-capabilities.js.map +1 -0
- package/dist/parquet-source-loader-types.d.ts +72 -0
- package/dist/parquet-source-loader-types.d.ts.map +1 -0
- package/dist/parquet-source-loader-types.js +74 -0
- package/dist/parquet-source-loader-types.js.map +1 -0
- package/dist/parquet-source-loader.cjs +25975 -0
- package/dist/parquet-source-loader.cjs.map +6 -0
- package/dist/parquet-source-loader.d.ts +120 -0
- package/dist/parquet-source-loader.d.ts.map +1 -0
- package/dist/parquet-source-loader.js +812 -0
- package/dist/parquet-source-loader.js.map +1 -0
- package/dist/parquet-source-types.d.ts +384 -0
- package/dist/parquet-source-types.d.ts.map +1 -0
- package/dist/parquet-source-types.js +5 -0
- package/dist/parquet-source-types.js.map +1 -0
- package/dist/parquet-source-worker-url.d.ts +3 -0
- package/dist/parquet-source-worker-url.d.ts.map +1 -0
- package/dist/parquet-source-worker-url.js +22 -0
- package/dist/parquet-source-worker-url.js.map +1 -0
- package/dist/parquet-source-worker.js +38491 -0
- package/dist/parquet-source-worker.js.map +7 -0
- package/dist/parquet-worker-node.cjs +54779 -0
- package/dist/parquet-worker-node.cjs.map +7 -0
- package/dist/parquet-worker-url.d.ts +3 -0
- package/dist/parquet-worker-url.d.ts.map +1 -0
- package/dist/parquet-worker-url.js +15 -0
- package/dist/parquet-worker-url.js.map +1 -0
- package/dist/parquet-worker.js +19920 -0
- package/dist/parquet-worker.js.map +7 -0
- package/dist/parquet-writer.d.ts +10 -0
- package/dist/parquet-writer.d.ts.map +1 -0
- package/dist/parquet-writer.js +27 -0
- package/dist/parquet-writer.js.map +1 -0
- package/dist/parquet_wasm_bg.wasm +0 -0
- package/dist/parquetjs/codecs/byte-stream-split.d.ts +9 -0
- package/dist/parquetjs/codecs/byte-stream-split.d.ts.map +1 -0
- package/dist/parquetjs/codecs/byte-stream-split.js +159 -0
- package/dist/parquetjs/codecs/byte-stream-split.js.map +1 -0
- package/dist/parquetjs/codecs/declare.d.ts +20 -3
- package/dist/parquetjs/codecs/declare.d.ts.map +1 -1
- package/dist/parquetjs/codecs/declare.js +7 -1
- package/dist/parquetjs/codecs/declare.js.map +1 -1
- package/dist/parquetjs/codecs/delta.d.ts +17 -0
- package/dist/parquetjs/codecs/delta.d.ts.map +1 -0
- package/dist/parquetjs/codecs/delta.js +439 -0
- package/dist/parquetjs/codecs/delta.js.map +1 -0
- package/dist/parquetjs/codecs/dictionary.d.ts +5 -2
- package/dist/parquetjs/codecs/dictionary.d.ts.map +1 -1
- package/dist/parquetjs/codecs/dictionary.js +16 -4
- package/dist/parquetjs/codecs/dictionary.js.map +1 -1
- package/dist/parquetjs/codecs/index.d.ts.map +1 -1
- package/dist/parquetjs/codecs/index.js +18 -0
- package/dist/parquetjs/codecs/index.js.map +1 -1
- package/dist/parquetjs/codecs/plain.d.ts +3 -3
- package/dist/parquetjs/codecs/plain.d.ts.map +1 -1
- package/dist/parquetjs/codecs/plain.js +88 -76
- package/dist/parquetjs/codecs/plain.js.map +1 -1
- package/dist/parquetjs/codecs/rle.d.ts +3 -3
- package/dist/parquetjs/codecs/rle.d.ts.map +1 -1
- package/dist/parquetjs/codecs/rle.js +196 -68
- package/dist/parquetjs/codecs/rle.js.map +1 -1
- package/dist/parquetjs/compression.d.ts +7 -8
- package/dist/parquetjs/compression.d.ts.map +1 -1
- package/dist/parquetjs/compression.js +95 -141
- package/dist/parquetjs/compression.js.map +1 -1
- package/dist/parquetjs/encoder/dictionary-planner.d.ts +17 -0
- package/dist/parquetjs/encoder/dictionary-planner.d.ts.map +1 -0
- package/dist/parquetjs/encoder/dictionary-planner.js +64 -0
- package/dist/parquetjs/encoder/dictionary-planner.js.map +1 -0
- package/dist/parquetjs/encoder/page-planner.d.ts +11 -0
- package/dist/parquetjs/encoder/page-planner.d.ts.map +1 -0
- package/dist/parquetjs/encoder/page-planner.js +60 -0
- package/dist/parquetjs/encoder/page-planner.js.map +1 -0
- package/dist/parquetjs/encoder/parquet-encoder.d.ts +11 -4
- package/dist/parquetjs/encoder/parquet-encoder.d.ts.map +1 -1
- package/dist/parquetjs/encoder/parquet-encoder.js +259 -52
- package/dist/parquetjs/encoder/parquet-encoder.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/BsonType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/BsonType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/BsonType.js +1 -1
- package/dist/parquetjs/parquet-thrift/BsonType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts +2 -2
- package/dist/parquetjs/parquet-thrift/ColumnChunk.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnChunk.js +2 -2
- package/dist/parquetjs/parquet-thrift/ColumnChunk.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts +6 -6
- package/dist/parquetjs/parquet-thrift/ColumnIndex.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnIndex.js +3 -3
- package/dist/parquetjs/parquet-thrift/ColumnIndex.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts +2 -2
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.js +2 -2
- package/dist/parquetjs/parquet-thrift/ColumnMetaData.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnOrder.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnOrder.js +1 -1
- package/dist/parquetjs/parquet-thrift/ColumnOrder.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeader.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeader.js +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeader.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js +1 -1
- package/dist/parquetjs/parquet-thrift/DataPageHeaderV2.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/DateType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/DateType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/DateType.js +1 -1
- package/dist/parquetjs/parquet-thrift/DateType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/DecimalType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/DecimalType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/DecimalType.js +1 -1
- package/dist/parquetjs/parquet-thrift/DecimalType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js +1 -1
- package/dist/parquetjs/parquet-thrift/DictionaryPageHeader.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts +8 -0
- package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js +14 -0
- package/dist/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/Encoding.d.ts +2 -1
- package/dist/parquetjs/parquet-thrift/Encoding.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/Encoding.js +1 -0
- package/dist/parquetjs/parquet-thrift/Encoding.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/EnumType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/EnumType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/EnumType.js +1 -1
- package/dist/parquetjs/parquet-thrift/EnumType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts +2 -2
- package/dist/parquetjs/parquet-thrift/FileMetaData.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/FileMetaData.js +2 -2
- package/dist/parquetjs/parquet-thrift/FileMetaData.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/Float16Type.d.ts +9 -0
- package/dist/parquetjs/parquet-thrift/Float16Type.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/Float16Type.js +27 -0
- package/dist/parquetjs/parquet-thrift/Float16Type.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/GeographyType.d.ts +14 -0
- package/dist/parquetjs/parquet-thrift/GeographyType.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/GeographyType.js +51 -0
- package/dist/parquetjs/parquet-thrift/GeographyType.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/GeometryType.d.ts +11 -0
- package/dist/parquetjs/parquet-thrift/GeometryType.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/GeometryType.js +41 -0
- package/dist/parquetjs/parquet-thrift/GeometryType.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/IndexPageHeader.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/IndexPageHeader.js +1 -1
- package/dist/parquetjs/parquet-thrift/IndexPageHeader.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/IntType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/IntType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/IntType.js +1 -1
- package/dist/parquetjs/parquet-thrift/IntType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/JsonType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/JsonType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/JsonType.js +1 -1
- package/dist/parquetjs/parquet-thrift/JsonType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/KeyValue.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/KeyValue.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/KeyValue.js +1 -1
- package/dist/parquetjs/parquet-thrift/KeyValue.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/ListType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/ListType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/ListType.js +1 -1
- package/dist/parquetjs/parquet-thrift/ListType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/LogicalType.d.ts +17 -1
- package/dist/parquetjs/parquet-thrift/LogicalType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/LogicalType.js +97 -1
- package/dist/parquetjs/parquet-thrift/LogicalType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/MapType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/MapType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/MapType.js +1 -1
- package/dist/parquetjs/parquet-thrift/MapType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/MicroSeconds.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/MicroSeconds.js +1 -1
- package/dist/parquetjs/parquet-thrift/MicroSeconds.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/MilliSeconds.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/MilliSeconds.js +1 -1
- package/dist/parquetjs/parquet-thrift/MilliSeconds.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts +9 -0
- package/dist/parquetjs/parquet-thrift/NanoSeconds.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/NanoSeconds.js +27 -0
- package/dist/parquetjs/parquet-thrift/NanoSeconds.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/NullType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/NullType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/NullType.js +1 -1
- package/dist/parquetjs/parquet-thrift/NullType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/OffsetIndex.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/OffsetIndex.js +1 -1
- package/dist/parquetjs/parquet-thrift/OffsetIndex.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/PageEncodingStats.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageEncodingStats.js +1 -1
- package/dist/parquetjs/parquet-thrift/PageEncodingStats.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageHeader.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/PageHeader.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageHeader.js +1 -1
- package/dist/parquetjs/parquet-thrift/PageHeader.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageLocation.d.ts +2 -2
- package/dist/parquetjs/parquet-thrift/PageLocation.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/PageLocation.js +2 -2
- package/dist/parquetjs/parquet-thrift/PageLocation.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/RowGroup.d.ts +2 -2
- package/dist/parquetjs/parquet-thrift/RowGroup.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/RowGroup.js +2 -2
- package/dist/parquetjs/parquet-thrift/RowGroup.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/SchemaElement.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/SchemaElement.js +1 -1
- package/dist/parquetjs/parquet-thrift/SchemaElement.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/SortingColumn.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/SortingColumn.js +1 -1
- package/dist/parquetjs/parquet-thrift/SortingColumn.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/Statistics.d.ts +14 -10
- package/dist/parquetjs/parquet-thrift/Statistics.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/Statistics.js +38 -2
- package/dist/parquetjs/parquet-thrift/Statistics.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/StringType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/StringType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/StringType.js +1 -1
- package/dist/parquetjs/parquet-thrift/StringType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimeType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/TimeType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimeType.js +1 -1
- package/dist/parquetjs/parquet-thrift/TimeType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts +5 -1
- package/dist/parquetjs/parquet-thrift/TimeUnit.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimeUnit.js +25 -1
- package/dist/parquetjs/parquet-thrift/TimeUnit.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimestampType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/TimestampType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/TimestampType.js +1 -1
- package/dist/parquetjs/parquet-thrift/TimestampType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js +1 -1
- package/dist/parquetjs/parquet-thrift/TypeDefinedOrder.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/UUIDType.d.ts +1 -1
- package/dist/parquetjs/parquet-thrift/UUIDType.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/UUIDType.js +1 -1
- package/dist/parquetjs/parquet-thrift/UUIDType.js.map +1 -1
- package/dist/parquetjs/parquet-thrift/VariantType.d.ts +11 -0
- package/dist/parquetjs/parquet-thrift/VariantType.d.ts.map +1 -0
- package/dist/parquetjs/parquet-thrift/VariantType.js +41 -0
- package/dist/parquetjs/parquet-thrift/VariantType.js.map +1 -0
- package/dist/parquetjs/parquet-thrift/index.d.ts +6 -2
- package/dist/parquetjs/parquet-thrift/index.d.ts.map +1 -1
- package/dist/parquetjs/parquet-thrift/index.js +6 -2
- package/dist/parquetjs/parquet-thrift/index.js.map +1 -1
- package/dist/parquetjs/parser/decoders.d.ts +14 -3
- package/dist/parquetjs/parser/decoders.d.ts.map +1 -1
- package/dist/parquetjs/parser/decoders.js +381 -117
- package/dist/parquetjs/parser/decoders.js.map +1 -1
- package/dist/parquetjs/parser/parquet-reader.d.ts +35 -10
- package/dist/parquetjs/parser/parquet-reader.d.ts.map +1 -1
- package/dist/parquetjs/parser/parquet-reader.js +179 -59
- package/dist/parquetjs/parser/parquet-reader.js.map +1 -1
- package/dist/parquetjs/schema/declare.d.ts +62 -8
- 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 +3 -0
- package/dist/parquetjs/schema/schema.d.ts.map +1 -1
- package/dist/parquetjs/schema/schema.js +21 -3
- package/dist/parquetjs/schema/schema.js.map +1 -1
- package/dist/parquetjs/schema/shred.d.ts +2 -0
- package/dist/parquetjs/schema/shred.d.ts.map +1 -1
- package/dist/parquetjs/schema/shred.js +71 -23
- package/dist/parquetjs/schema/shred.js.map +1 -1
- package/dist/parquetjs/schema/types.d.ts.map +1 -1
- package/dist/parquetjs/schema/types.js +272 -51
- package/dist/parquetjs/schema/types.js.map +1 -1
- package/dist/parquetjs/utils/binary-utils.d.ts +41 -0
- package/dist/parquetjs/utils/binary-utils.d.ts.map +1 -0
- package/dist/parquetjs/utils/binary-utils.js +106 -0
- package/dist/parquetjs/utils/binary-utils.js.map +1 -0
- package/dist/parquetjs/utils/file-utils.d.ts +1 -1
- package/dist/parquetjs/utils/file-utils.d.ts.map +1 -1
- package/dist/parquetjs/utils/file-utils.js +3 -3
- package/dist/parquetjs/utils/file-utils.js.map +1 -1
- package/dist/parquetjs/utils/read-utils.d.ts +14 -6
- package/dist/parquetjs/utils/read-utils.d.ts.map +1 -1
- package/dist/parquetjs/utils/read-utils.js +46 -39
- package/dist/parquetjs/utils/read-utils.js.map +1 -1
- package/dist/parquetjs/utils/thrift-runtime.d.ts +106 -0
- package/dist/parquetjs/utils/thrift-runtime.d.ts.map +1 -0
- package/dist/parquetjs/utils/thrift-runtime.js +50 -0
- package/dist/parquetjs/utils/thrift-runtime.js.map +1 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts +78 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.d.ts.map +1 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js +213 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol-writer.js.map +1 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts +80 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol.d.ts.map +1 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol.js +276 -0
- package/dist/parquetjs/utils/uint8-array-compact-protocol.js.map +1 -0
- package/dist/parquetjs/utils/uint8-array-transport.d.ts +25 -0
- package/dist/parquetjs/utils/uint8-array-transport.d.ts.map +1 -0
- package/dist/parquetjs/utils/uint8-array-transport.js +62 -0
- package/dist/parquetjs/utils/uint8-array-transport.js.map +1 -0
- package/dist/polyfills/process.d.ts +12 -0
- package/dist/polyfills/process.d.ts.map +1 -0
- package/dist/polyfills/process.js +17 -0
- package/dist/polyfills/process.js.map +1 -0
- package/dist/unbundled.d.ts +9 -0
- package/dist/unbundled.d.ts.map +1 -0
- package/dist/unbundled.js +10 -0
- package/dist/unbundled.js.map +1 -0
- package/dist/wasm.d.ts +3 -0
- package/dist/wasm.d.ts.map +1 -0
- package/dist/wasm.js +6 -0
- package/dist/wasm.js.map +1 -0
- package/dist/workers/parquet-source-worker.d.ts +2 -0
- package/dist/workers/parquet-source-worker.d.ts.map +1 -0
- package/dist/workers/parquet-source-worker.js +17 -0
- package/dist/workers/parquet-source-worker.js.map +1 -0
- package/dist/workers/parquet-worker-node.d.ts +2 -0
- package/dist/workers/parquet-worker-node.d.ts.map +1 -0
- package/dist/workers/parquet-worker-node.js +5 -0
- package/dist/workers/parquet-worker-node.js.map +1 -0
- package/dist/workers/parquet-worker.d.ts +2 -0
- package/dist/workers/parquet-worker.d.ts.map +1 -0
- package/dist/workers/parquet-worker.js +27 -0
- package/dist/workers/parquet-worker.js.map +1 -0
- package/package.json +63 -33
- package/src/bundled.ts +33 -0
- package/src/geoparquet-loader-with-parser.ts +95 -0
- package/src/geoparquet-loader.ts +54 -0
- package/src/index.ts +49 -23
- package/src/lib/arrow/convert-columns-to-row-group.ts +3 -0
- package/src/lib/arrow/convert-schema-from-parquet.ts +97 -30
- package/src/lib/arrow/convert-schema-to-parquet.ts +16 -7
- package/src/lib/arrow/create-nested-arrow-vector.ts +589 -0
- package/src/lib/constants.ts +0 -2
- package/src/lib/encoders/encode-arrow-to-parquet.ts +10 -16
- package/src/lib/encoders/encode-table-to-parquet-js.ts +261 -0
- package/src/lib/geo/geospatial-metadata.ts +457 -0
- package/src/lib/parquet-page-index.ts +581 -0
- package/src/lib/parquet-predicate.ts +374 -0
- package/src/lib/parquet-source-worker-client.ts +39 -0
- package/src/lib/parquet-source-worker-decoder.ts +156 -0
- package/src/lib/parquet-source-worker-file.ts +56 -0
- package/src/lib/parquet-source-worker-types.ts +107 -0
- package/src/lib/parquet-worker-transport.ts +57 -0
- package/src/lib/parsers/convert-parquet-tables.ts +39 -0
- package/src/lib/parsers/get-parquet-schema.ts +3 -1
- package/src/lib/parsers/parse-geoparquet-to-geojson.ts +27 -14
- package/src/lib/parsers/parse-parquet-tables.ts +82 -0
- package/src/lib/parsers/parse-parquet-to-arrow-js.ts +829 -0
- package/src/lib/parsers/parse-parquet-to-arrow.ts +63 -36
- package/src/lib/parsers/parse-parquet-to-columns.ts +6 -7
- package/src/lib/parsers/parse-parquet-to-json.ts +101 -33
- package/src/lib/sources/parquet-range-file.ts +359 -0
- package/src/lib/sources/single-batch-queue.ts +95 -0
- package/src/lib/utils/load-wasm-node.ts +25 -0
- package/src/lib/utils/load-wasm.ts +36 -13
- package/src/lib/utils/make-stream-iterator.ts +126 -14
- package/src/lib/utils/normalize-parquet-options.ts +14 -0
- package/src/parquet-dataset-source.ts +488 -0
- package/src/parquet-format.ts +2 -0
- package/src/parquet-js-loader-types.ts +52 -0
- package/src/parquet-js-loader.ts +83 -0
- package/src/parquet-js-writer.ts +68 -0
- package/src/parquet-loader-base.ts +34 -0
- package/src/parquet-loader-options.ts +51 -0
- package/src/parquet-loader-types.ts +35 -0
- package/src/parquet-loader.ts +115 -0
- package/src/parquet-source-capabilities.ts +56 -0
- package/src/parquet-source-loader-types.ts +87 -0
- package/src/parquet-source-loader.ts +1265 -0
- package/src/parquet-source-types.ts +458 -0
- package/src/parquet-source-worker-url.ts +23 -0
- package/src/parquet-worker-url.ts +18 -0
- package/src/parquet-writer.ts +42 -0
- package/src/parquetjs/LICENSE +23 -1
- package/src/parquetjs/codecs/byte-stream-split.ts +221 -0
- package/src/parquetjs/codecs/declare.ts +35 -3
- package/src/parquetjs/codecs/delta.ts +587 -0
- package/src/parquetjs/codecs/dictionary.ts +22 -4
- package/src/parquetjs/codecs/index.ts +18 -0
- package/src/parquetjs/codecs/plain.ts +149 -87
- package/src/parquetjs/codecs/rle.ts +268 -82
- package/src/parquetjs/compression.ts +110 -155
- package/src/parquetjs/encoder/dictionary-planner.ts +99 -0
- package/src/parquetjs/encoder/page-planner.ts +83 -0
- package/src/parquetjs/encoder/parquet-encoder.ts +378 -77
- package/src/parquetjs/parquet-thrift/BsonType.ts +1 -1
- package/src/parquetjs/parquet-thrift/ColumnChunk.ts +2 -2
- package/src/parquetjs/parquet-thrift/ColumnIndex.ts +13 -13
- package/src/parquetjs/parquet-thrift/ColumnMetaData.ts +2 -2
- package/src/parquetjs/parquet-thrift/ColumnOrder.ts +1 -1
- package/src/parquetjs/parquet-thrift/DataPageHeader.ts +1 -1
- package/src/parquetjs/parquet-thrift/DataPageHeaderV2.ts +1 -1
- package/src/parquetjs/parquet-thrift/DateType.ts +1 -1
- package/src/parquetjs/parquet-thrift/DecimalType.ts +1 -1
- package/src/parquetjs/parquet-thrift/DictionaryPageHeader.ts +1 -1
- package/src/parquetjs/parquet-thrift/EdgeInterpolationAlgorithm.ts +13 -0
- package/src/parquetjs/parquet-thrift/Encoding.ts +2 -1
- package/src/parquetjs/parquet-thrift/EnumType.ts +1 -1
- package/src/parquetjs/parquet-thrift/FileMetaData.ts +2 -2
- package/src/parquetjs/parquet-thrift/Float16Type.ts +28 -0
- package/src/parquetjs/parquet-thrift/GeographyType.ts +54 -0
- package/src/parquetjs/parquet-thrift/GeometryType.ts +43 -0
- package/src/parquetjs/parquet-thrift/IndexPageHeader.ts +1 -1
- package/src/parquetjs/parquet-thrift/IntType.ts +1 -1
- package/src/parquetjs/parquet-thrift/JsonType.ts +1 -1
- package/src/parquetjs/parquet-thrift/KeyValue.ts +1 -1
- package/src/parquetjs/parquet-thrift/ListType.ts +1 -1
- package/src/parquetjs/parquet-thrift/LogicalType.ts +97 -1
- package/src/parquetjs/parquet-thrift/MapType.ts +1 -1
- package/src/parquetjs/parquet-thrift/MicroSeconds.ts +1 -1
- package/src/parquetjs/parquet-thrift/MilliSeconds.ts +1 -1
- package/src/parquetjs/parquet-thrift/NanoSeconds.ts +28 -0
- package/src/parquetjs/parquet-thrift/NullType.ts +1 -1
- package/src/parquetjs/parquet-thrift/OffsetIndex.ts +1 -1
- package/src/parquetjs/parquet-thrift/PageEncodingStats.ts +1 -1
- package/src/parquetjs/parquet-thrift/PageHeader.ts +1 -1
- package/src/parquetjs/parquet-thrift/PageLocation.ts +2 -2
- package/src/parquetjs/parquet-thrift/RowGroup.ts +2 -2
- package/src/parquetjs/parquet-thrift/SchemaElement.ts +1 -1
- package/src/parquetjs/parquet-thrift/SortingColumn.ts +1 -1
- package/src/parquetjs/parquet-thrift/Statistics.ts +50 -14
- package/src/parquetjs/parquet-thrift/StringType.ts +1 -1
- package/src/parquetjs/parquet-thrift/TimeType.ts +1 -1
- package/src/parquetjs/parquet-thrift/TimeUnit.ts +25 -1
- package/src/parquetjs/parquet-thrift/TimestampType.ts +1 -1
- package/src/parquetjs/parquet-thrift/TypeDefinedOrder.ts +1 -1
- package/src/parquetjs/parquet-thrift/UUIDType.ts +1 -1
- package/src/parquetjs/parquet-thrift/VariantType.ts +43 -0
- package/src/parquetjs/parquet-thrift/index.ts +6 -4
- package/src/parquetjs/parser/decoders.ts +487 -133
- package/src/parquetjs/parser/parquet-reader.ts +297 -71
- package/src/parquetjs/schema/declare.ts +99 -7
- package/src/parquetjs/schema/schema.ts +23 -3
- package/src/parquetjs/schema/shred.ts +112 -35
- package/src/parquetjs/schema/types.ts +294 -61
- package/src/parquetjs/utils/binary-utils.ts +132 -0
- package/src/parquetjs/utils/file-utils.ts +4 -4
- package/src/parquetjs/utils/read-utils.ts +56 -55
- package/src/parquetjs/utils/thrift-runtime.ts +109 -0
- package/src/parquetjs/utils/uint8-array-compact-protocol-writer.ts +254 -0
- package/src/parquetjs/utils/uint8-array-compact-protocol.ts +322 -0
- package/src/parquetjs/utils/uint8-array-transport.ts +79 -0
- package/src/polyfills/process.ts +17 -0
- package/src/unbundled.ts +33 -0
- package/src/wasm.ts +6 -0
- package/src/workers/parquet-source-worker.ts +21 -0
- package/src/workers/parquet-worker-node.ts +5 -0
- package/src/workers/parquet-worker.ts +31 -0
- package/dist/parquet-arrow-loader.d.ts +0 -43
- package/dist/parquet-arrow-loader.d.ts.map +0 -1
- package/dist/parquet-arrow-loader.js +0 -49
- package/dist/parquet-arrow-loader.js.map +0 -1
- package/dist/parquet-arrow-writer.d.ts +0 -9
- package/dist/parquet-arrow-writer.d.ts.map +0 -1
- package/dist/parquet-arrow-writer.js +0 -23
- package/dist/parquet-arrow-writer.js.map +0 -1
- package/dist/parquet-json-loader.d.ts +0 -148
- package/dist/parquet-json-loader.d.ts.map +0 -1
- package/dist/parquet-json-loader.js +0 -106
- package/dist/parquet-json-loader.js.map +0 -1
- package/dist/parquet-json-writer.d.ts +0 -19
- package/dist/parquet-json-writer.d.ts.map +0 -1
- package/dist/parquet-json-writer.js +0 -20
- package/dist/parquet-json-writer.js.map +0 -1
- package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts +0 -3
- package/dist/polyfills/buffer/buffer-polyfill.browser.d.ts.map +0 -1
- package/dist/polyfills/buffer/buffer-polyfill.browser.js +0 -12
- package/dist/polyfills/buffer/buffer-polyfill.browser.js.map +0 -1
- package/dist/polyfills/buffer/buffer-polyfill.node.d.ts +0 -3
- package/dist/polyfills/buffer/buffer-polyfill.node.d.ts.map +0 -1
- package/dist/polyfills/buffer/buffer-polyfill.node.js +0 -17
- package/dist/polyfills/buffer/buffer-polyfill.node.js.map +0 -1
- package/dist/polyfills/buffer/buffer.d.ts +0 -222
- package/dist/polyfills/buffer/buffer.d.ts.map +0 -1
- package/dist/polyfills/buffer/buffer.js +0 -1868
- package/dist/polyfills/buffer/buffer.js.map +0 -1
- package/dist/polyfills/buffer/index.d.ts +0 -4
- package/dist/polyfills/buffer/index.d.ts.map +0 -1
- package/dist/polyfills/buffer/index.js +0 -9
- package/dist/polyfills/buffer/index.js.map +0 -1
- package/dist/polyfills/buffer/install-buffer-polyfill.d.ts +0 -2
- package/dist/polyfills/buffer/install-buffer-polyfill.d.ts.map +0 -1
- package/dist/polyfills/buffer/install-buffer-polyfill.js +0 -10
- package/dist/polyfills/buffer/install-buffer-polyfill.js.map +0 -1
- package/dist/workers/parquet-json-worker.d.ts +0 -2
- package/dist/workers/parquet-json-worker.d.ts.map +0 -1
- package/dist/workers/parquet-json-worker.js +0 -7
- package/dist/workers/parquet-json-worker.js.map +0 -1
- package/src/parquet-arrow-loader.ts +0 -74
- package/src/parquet-arrow-writer.ts +0 -33
- package/src/parquet-json-loader.ts +0 -160
- package/src/parquet-json-writer.ts +0 -27
- package/src/parquetjs/modules.d.ts +0 -25
- package/src/polyfills/buffer/buffer-polyfill.browser.ts +0 -14
- package/src/polyfills/buffer/buffer-polyfill.node.ts +0 -19
- package/src/polyfills/buffer/buffer.ts +0 -2205
- package/src/polyfills/buffer/index.ts +0 -11
- package/src/polyfills/buffer/install-buffer-polyfill.ts +0 -12
- package/src/workers/parquet-json-worker.ts +0 -8
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {ArrayType} from '@loaders.gl/schema';
|
|
6
|
+
|
|
7
|
+
import type {
|
|
8
|
+
ParquetColumnChunkStatistics,
|
|
9
|
+
ParquetComparisonPredicate,
|
|
10
|
+
ParquetInPredicate,
|
|
11
|
+
ParquetLogicalPredicate,
|
|
12
|
+
ParquetNotPredicate,
|
|
13
|
+
ParquetNullPredicate,
|
|
14
|
+
ParquetPredicate,
|
|
15
|
+
ParquetPredicateValue,
|
|
16
|
+
ParquetRowGroupMetadata
|
|
17
|
+
} from '../parquet-source-types';
|
|
18
|
+
import {encodeUtf8} from '../parquetjs/utils/binary-utils';
|
|
19
|
+
|
|
20
|
+
/** Returns the unique top-level columns referenced by a predicate. */
|
|
21
|
+
export function getParquetPredicateColumns(predicate: ParquetPredicate): string[] {
|
|
22
|
+
const columns = new Set<string>();
|
|
23
|
+
visitParquetPredicate(predicate, child => {
|
|
24
|
+
const property = getPredicateProperty(child);
|
|
25
|
+
if (property) {
|
|
26
|
+
columns.add(property.property);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
return [...columns];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Copies a predicate tree and mutable scalar values for read-scoped option snapshots. */
|
|
33
|
+
export function copyParquetPredicate(predicate: ParquetPredicate): ParquetPredicate {
|
|
34
|
+
if (isParquetLogicalPredicate(predicate)) {
|
|
35
|
+
return {
|
|
36
|
+
op: predicate.op,
|
|
37
|
+
args: predicate.args.map(copyParquetPredicate)
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
if (isParquetNotPredicate(predicate)) {
|
|
41
|
+
return {
|
|
42
|
+
op: 'not',
|
|
43
|
+
args: [copyParquetPredicate(predicate.args[0])]
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const property = copyPredicateProperty(predicate.args[0]);
|
|
47
|
+
if (predicate.op === 'isNull') {
|
|
48
|
+
return {op: 'isNull', args: [property]};
|
|
49
|
+
}
|
|
50
|
+
if (predicate.op === 'in') {
|
|
51
|
+
return {
|
|
52
|
+
op: 'in',
|
|
53
|
+
args: [property, predicate.args[1].map(copyPredicateValue)]
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
op: predicate.op,
|
|
58
|
+
args: [property, copyPredicateValue(predicate.args[1])]
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/** Validates a predicate and every referenced top-level column. */
|
|
63
|
+
export function validateParquetPredicate(
|
|
64
|
+
predicate: ParquetPredicate,
|
|
65
|
+
availableColumns: ReadonlySet<string>
|
|
66
|
+
): void {
|
|
67
|
+
visitParquetPredicate(predicate, child => {
|
|
68
|
+
if (isParquetLogicalPredicate(child)) {
|
|
69
|
+
if (child.args.length < 2) {
|
|
70
|
+
throw new Error(`Parquet predicate ${child.op} requires at least two child predicates`);
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
if (isParquetNotPredicate(child)) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const property = child.args[0];
|
|
78
|
+
if (!availableColumns.has(property.property)) {
|
|
79
|
+
throw new Error(`Parquet predicate column not found: ${property.property}`);
|
|
80
|
+
}
|
|
81
|
+
if (child.op === 'in' && child.args[1].length === 0) {
|
|
82
|
+
throw new Error('Parquet predicate in requires at least one value');
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Conservatively determines whether a row group can contain a matching row. */
|
|
88
|
+
export function canParquetRowGroupMatch(
|
|
89
|
+
predicate: ParquetPredicate,
|
|
90
|
+
rowGroup: ParquetRowGroupMetadata
|
|
91
|
+
): boolean {
|
|
92
|
+
if (isParquetLogicalPredicate(predicate)) {
|
|
93
|
+
return predicate.op === 'and'
|
|
94
|
+
? predicate.args.every(child => canParquetRowGroupMatch(child, rowGroup))
|
|
95
|
+
: predicate.args.some(child => canParquetRowGroupMatch(child, rowGroup));
|
|
96
|
+
}
|
|
97
|
+
if (isParquetNotPredicate(predicate)) {
|
|
98
|
+
const child = predicate.args[0];
|
|
99
|
+
if (child.op !== 'isNull') {
|
|
100
|
+
return true;
|
|
101
|
+
}
|
|
102
|
+
const column = getRowGroupColumn(rowGroup, child.args[0].property);
|
|
103
|
+
return !column?.statistics || column.statistics.nullCount !== rowGroup.rowCount;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const column = getRowGroupColumn(rowGroup, predicate.args[0].property);
|
|
107
|
+
const statistics = column?.statistics;
|
|
108
|
+
if (!statistics) {
|
|
109
|
+
return true;
|
|
110
|
+
}
|
|
111
|
+
return canParquetStatisticsMatch(predicate, statistics, rowGroup.rowCount);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** Conservatively determines whether one predicate leaf can match supplied statistics. */
|
|
115
|
+
export function canParquetStatisticsMatch(
|
|
116
|
+
predicate: ParquetComparisonPredicate | ParquetInPredicate | ParquetNullPredicate,
|
|
117
|
+
statistics: ParquetColumnChunkStatistics,
|
|
118
|
+
rowCount: number
|
|
119
|
+
): boolean {
|
|
120
|
+
if (statistics.nullCount === rowCount) {
|
|
121
|
+
return predicate.op === 'isNull';
|
|
122
|
+
}
|
|
123
|
+
if (predicate.op === 'isNull') {
|
|
124
|
+
return statistics.nullCount !== 0;
|
|
125
|
+
}
|
|
126
|
+
const minimum = statistics.minIsExact === false ? undefined : statistics.min;
|
|
127
|
+
const maximum = statistics.maxIsExact === false ? undefined : statistics.max;
|
|
128
|
+
if (predicate.op === 'in') {
|
|
129
|
+
return predicate.args[1].some(value => canComparisonMatch('=', value, minimum, maximum));
|
|
130
|
+
}
|
|
131
|
+
return canComparisonMatch(predicate.op, predicate.args[1], minimum, maximum);
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/** Returns exact source row indexes matching a predicate. */
|
|
135
|
+
export function filterParquetRowIndices(
|
|
136
|
+
predicate: ParquetPredicate | undefined,
|
|
137
|
+
columns: Record<string, ArrayType>,
|
|
138
|
+
rowCount: number
|
|
139
|
+
): number[] {
|
|
140
|
+
if (!predicate) {
|
|
141
|
+
return Array.from({length: rowCount}, (_, index) => index);
|
|
142
|
+
}
|
|
143
|
+
const rowIndices: number[] = [];
|
|
144
|
+
for (let rowIndex = 0; rowIndex < rowCount; rowIndex++) {
|
|
145
|
+
if (evaluateParquetPredicate(predicate, columns, rowIndex) === true) {
|
|
146
|
+
rowIndices.push(rowIndex);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
return rowIndices;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/** Gathers selected source rows without constructing row objects. */
|
|
153
|
+
export function gatherParquetColumns(
|
|
154
|
+
columns: Record<string, ArrayType>,
|
|
155
|
+
rowIndices: readonly number[],
|
|
156
|
+
selectedColumns?: ReadonlySet<string>
|
|
157
|
+
): Record<string, ArrayType> {
|
|
158
|
+
const gatheredColumns: Record<string, ArrayType> = {};
|
|
159
|
+
for (const [name, column] of Object.entries(columns)) {
|
|
160
|
+
if (selectedColumns && !selectedColumns.has(name)) {
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
gatheredColumns[name] = rowIndices.map(rowIndex => getColumnValue(column, rowIndex));
|
|
164
|
+
}
|
|
165
|
+
return gatheredColumns;
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
/** Applies an exact predicate to one materialized row. */
|
|
169
|
+
function evaluateParquetPredicate(
|
|
170
|
+
predicate: ParquetPredicate,
|
|
171
|
+
columns: Record<string, ArrayType>,
|
|
172
|
+
rowIndex: number
|
|
173
|
+
): boolean | null {
|
|
174
|
+
if (isParquetLogicalPredicate(predicate)) {
|
|
175
|
+
const results = predicate.args.map(child => evaluateParquetPredicate(child, columns, rowIndex));
|
|
176
|
+
if (predicate.op === 'and') {
|
|
177
|
+
return results.includes(false) ? false : results.includes(null) ? null : true;
|
|
178
|
+
}
|
|
179
|
+
return results.includes(true) ? true : results.includes(null) ? null : false;
|
|
180
|
+
}
|
|
181
|
+
if (isParquetNotPredicate(predicate)) {
|
|
182
|
+
const result = evaluateParquetPredicate(predicate.args[0], columns, rowIndex);
|
|
183
|
+
return result === null ? null : !result;
|
|
184
|
+
}
|
|
185
|
+
const value = getColumnValue(columns[predicate.args[0].property], rowIndex);
|
|
186
|
+
if (predicate.op === 'isNull') {
|
|
187
|
+
return value === null || value === undefined;
|
|
188
|
+
}
|
|
189
|
+
if (value === null || value === undefined) {
|
|
190
|
+
return null;
|
|
191
|
+
}
|
|
192
|
+
if (predicate.op === 'in') {
|
|
193
|
+
return predicate.args[1].some(candidate => comparePredicateValues(value, candidate) === 0);
|
|
194
|
+
}
|
|
195
|
+
const comparison = comparePredicateValues(value, predicate.args[1]);
|
|
196
|
+
switch (predicate.op) {
|
|
197
|
+
case '=':
|
|
198
|
+
return comparison === 0;
|
|
199
|
+
case '<>':
|
|
200
|
+
return comparison !== 0;
|
|
201
|
+
case '<':
|
|
202
|
+
return comparison < 0;
|
|
203
|
+
case '<=':
|
|
204
|
+
return comparison <= 0;
|
|
205
|
+
case '>':
|
|
206
|
+
return comparison > 0;
|
|
207
|
+
case '>=':
|
|
208
|
+
return comparison >= 0;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** Returns whether footer min/max leave any possible match for one comparison. */
|
|
213
|
+
function canComparisonMatch(
|
|
214
|
+
operator: '=' | '<>' | '<' | '<=' | '>' | '>=',
|
|
215
|
+
value: ParquetPredicateValue,
|
|
216
|
+
minimum: unknown,
|
|
217
|
+
maximum: unknown
|
|
218
|
+
): boolean {
|
|
219
|
+
try {
|
|
220
|
+
switch (operator) {
|
|
221
|
+
case '=':
|
|
222
|
+
return !(
|
|
223
|
+
(minimum !== undefined && compareStatisticsValues(value, minimum) < 0) ||
|
|
224
|
+
(maximum !== undefined && compareStatisticsValues(value, maximum) > 0)
|
|
225
|
+
);
|
|
226
|
+
case '<>':
|
|
227
|
+
return !(
|
|
228
|
+
minimum !== undefined &&
|
|
229
|
+
maximum !== undefined &&
|
|
230
|
+
compareStatisticsValues(value, minimum) === 0 &&
|
|
231
|
+
compareStatisticsValues(value, maximum) === 0
|
|
232
|
+
);
|
|
233
|
+
case '<':
|
|
234
|
+
return minimum === undefined || compareStatisticsValues(minimum, value) < 0;
|
|
235
|
+
case '<=':
|
|
236
|
+
return minimum === undefined || compareStatisticsValues(minimum, value) <= 0;
|
|
237
|
+
case '>':
|
|
238
|
+
return maximum === undefined || compareStatisticsValues(maximum, value) > 0;
|
|
239
|
+
case '>=':
|
|
240
|
+
return maximum === undefined || compareStatisticsValues(maximum, value) >= 0;
|
|
241
|
+
}
|
|
242
|
+
} catch {
|
|
243
|
+
return true;
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/** Compares statistics using Parquet's unsigned UTF-8 byte ordering for strings. */
|
|
248
|
+
function compareStatisticsValues(left: unknown, right: unknown): number {
|
|
249
|
+
if (typeof left === 'string' && typeof right === 'string') {
|
|
250
|
+
return compareUint8Arrays(encodeUtf8(left), encodeUtf8(right));
|
|
251
|
+
}
|
|
252
|
+
return comparePredicateValues(left, right);
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
/** Compares predicate-compatible scalar values and rejects incomparable types. */
|
|
256
|
+
function comparePredicateValues(left: unknown, right: unknown): number {
|
|
257
|
+
if (left instanceof Uint8Array && right instanceof Uint8Array) {
|
|
258
|
+
return compareUint8Arrays(left, right);
|
|
259
|
+
}
|
|
260
|
+
if (left instanceof Uint8Array || right instanceof Uint8Array) {
|
|
261
|
+
throw new Error('Parquet binary predicates require binary values on both sides');
|
|
262
|
+
}
|
|
263
|
+
if (left instanceof Date || right instanceof Date) {
|
|
264
|
+
if (!(left instanceof Date) || !(right instanceof Date)) {
|
|
265
|
+
throw new Error('Parquet date predicates require date values on both sides');
|
|
266
|
+
}
|
|
267
|
+
const leftTime = left.getTime();
|
|
268
|
+
const rightTime = right.getTime();
|
|
269
|
+
if (!Number.isFinite(leftTime) || !Number.isFinite(rightTime)) {
|
|
270
|
+
throw new Error('Invalid dates cannot be ordered by a Parquet predicate');
|
|
271
|
+
}
|
|
272
|
+
return leftTime < rightTime ? -1 : leftTime > rightTime ? 1 : 0;
|
|
273
|
+
}
|
|
274
|
+
const leftType = typeof left;
|
|
275
|
+
const rightType = typeof right;
|
|
276
|
+
const bothNumeric =
|
|
277
|
+
(leftType === 'number' || leftType === 'bigint') &&
|
|
278
|
+
(rightType === 'number' || rightType === 'bigint');
|
|
279
|
+
if (!bothNumeric && leftType !== rightType) {
|
|
280
|
+
throw new Error(`Parquet predicate cannot compare ${leftType} with ${rightType}`);
|
|
281
|
+
}
|
|
282
|
+
if (!bothNumeric && leftType !== 'string' && leftType !== 'boolean') {
|
|
283
|
+
throw new Error(`Parquet predicate does not support ${leftType} values`);
|
|
284
|
+
}
|
|
285
|
+
const comparableLeft = left as string | boolean | number | bigint;
|
|
286
|
+
const comparableRight = right as string | boolean | number | bigint;
|
|
287
|
+
if (
|
|
288
|
+
(typeof comparableLeft === 'number' && !Number.isFinite(comparableLeft)) ||
|
|
289
|
+
(typeof comparableRight === 'number' && !Number.isFinite(comparableRight))
|
|
290
|
+
) {
|
|
291
|
+
throw new Error('Non-finite numbers cannot be ordered by a Parquet predicate');
|
|
292
|
+
}
|
|
293
|
+
if ((comparableLeft as never) < (comparableRight as never)) {
|
|
294
|
+
return -1;
|
|
295
|
+
}
|
|
296
|
+
if ((comparableLeft as never) > (comparableRight as never)) {
|
|
297
|
+
return 1;
|
|
298
|
+
}
|
|
299
|
+
return 0;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
/** Compares two byte sequences using unsigned lexicographic ordering. */
|
|
303
|
+
function compareUint8Arrays(left: Uint8Array, right: Uint8Array): number {
|
|
304
|
+
const length = Math.min(left.length, right.length);
|
|
305
|
+
for (let index = 0; index < length; index++) {
|
|
306
|
+
if (left[index] !== right[index]) {
|
|
307
|
+
return left[index] < right[index] ? -1 : 1;
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
return Math.sign(left.length - right.length);
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
/** Reads one value from an array-like materialized Parquet column. */
|
|
314
|
+
function getColumnValue(column: ArrayType | undefined, rowIndex: number): unknown {
|
|
315
|
+
if (!column) {
|
|
316
|
+
throw new Error('Parquet predicate column was not decoded');
|
|
317
|
+
}
|
|
318
|
+
return (column as ArrayLike<unknown>)[rowIndex];
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
/** Copies mutable binary and date predicate values. */
|
|
322
|
+
function copyPredicateValue(value: ParquetPredicateValue): ParquetPredicateValue {
|
|
323
|
+
if (value instanceof Uint8Array) {
|
|
324
|
+
return value.slice();
|
|
325
|
+
}
|
|
326
|
+
if (value instanceof Date) {
|
|
327
|
+
return new Date(value.getTime());
|
|
328
|
+
}
|
|
329
|
+
return value;
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
/** Copies a predicate property reference. */
|
|
333
|
+
function copyPredicateProperty(property: {property: string}): {property: string} {
|
|
334
|
+
return {property: property.property};
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
/** Returns the property reference from a leaf predicate. */
|
|
338
|
+
function getPredicateProperty(predicate: ParquetPredicate): {property: string} | undefined {
|
|
339
|
+
return isParquetLogicalPredicate(predicate) || isParquetNotPredicate(predicate)
|
|
340
|
+
? undefined
|
|
341
|
+
: predicate.args[0];
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
/** Returns one top-level column chunk from normalized row-group metadata. */
|
|
345
|
+
function getRowGroupColumn(rowGroup: ParquetRowGroupMetadata, property: string) {
|
|
346
|
+
return rowGroup.columns.find(
|
|
347
|
+
columnChunk => columnChunk.path.length === 1 && columnChunk.path[0] === property
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
/** Visits every predicate node depth-first. */
|
|
352
|
+
function visitParquetPredicate(
|
|
353
|
+
predicate: ParquetPredicate,
|
|
354
|
+
visit: (predicate: ParquetPredicate) => void
|
|
355
|
+
): void {
|
|
356
|
+
visit(predicate);
|
|
357
|
+
if (isParquetLogicalPredicate(predicate) || isParquetNotPredicate(predicate)) {
|
|
358
|
+
for (const child of predicate.args) {
|
|
359
|
+
visitParquetPredicate(child, visit);
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** Returns whether a predicate combines multiple child predicates. */
|
|
365
|
+
function isParquetLogicalPredicate(
|
|
366
|
+
predicate: ParquetPredicate
|
|
367
|
+
): predicate is ParquetLogicalPredicate {
|
|
368
|
+
return predicate.op === 'and' || predicate.op === 'or';
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/** Returns whether a predicate negates one child predicate. */
|
|
372
|
+
function isParquetNotPredicate(predicate: ParquetPredicate): predicate is ParquetNotPredicate {
|
|
373
|
+
return predicate.op === 'not';
|
|
374
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {Loader} from '@loaders.gl/loader-utils';
|
|
6
|
+
import {canParseWithWorker, isBrowser, parseWithWorker} from '@loaders.gl/loader-utils';
|
|
7
|
+
|
|
8
|
+
import {PARQUET_LOADER_BASE} from '../parquet-loader-base';
|
|
9
|
+
import {PARQUET_SOURCE_WORKER_URL} from '../parquet-source-worker-url';
|
|
10
|
+
import type {
|
|
11
|
+
ParquetSourceWorkerInput,
|
|
12
|
+
ParquetSourceWorkerOptions,
|
|
13
|
+
ParquetSourceWorkerResult
|
|
14
|
+
} from './parquet-source-worker-types';
|
|
15
|
+
|
|
16
|
+
/** Private worker descriptor using the package-local selective source worker bundle. */
|
|
17
|
+
const PARQUET_SOURCE_WORKER: Loader = {
|
|
18
|
+
...PARQUET_LOADER_BASE,
|
|
19
|
+
id: 'parquet-source',
|
|
20
|
+
name: 'ParquetSource',
|
|
21
|
+
worker: PARQUET_SOURCE_WORKER_URL
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** Returns whether this runtime and option set can decode Parquet source rows on a worker. */
|
|
25
|
+
export function canDecodeParquetSourceOnWorker(options: ParquetSourceWorkerOptions): boolean {
|
|
26
|
+
return isBrowser && canParseWithWorker(PARQUET_SOURCE_WORKER, options);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Sends selected compressed Parquet chunks to a worker and returns transferable Arrow buffers. */
|
|
30
|
+
export async function decodeParquetSourceRowGroupOnWorker(
|
|
31
|
+
input: ParquetSourceWorkerInput,
|
|
32
|
+
options: ParquetSourceWorkerOptions
|
|
33
|
+
): Promise<ParquetSourceWorkerResult> {
|
|
34
|
+
return (await parseWithWorker(
|
|
35
|
+
PARQUET_SOURCE_WORKER,
|
|
36
|
+
input,
|
|
37
|
+
options
|
|
38
|
+
)) as ParquetSourceWorkerResult;
|
|
39
|
+
}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import {dehydrateArrowTable} from '@loaders.gl/arrow/transport';
|
|
6
|
+
import type {ArrayType} from '@loaders.gl/schema';
|
|
7
|
+
import {convertTable} from '@loaders.gl/schema-utils';
|
|
8
|
+
|
|
9
|
+
import {preloadCompressions} from '../parquetjs/compression';
|
|
10
|
+
import {filterParquetRowIndices, gatherParquetColumns} from './parquet-predicate';
|
|
11
|
+
import type {RowGroup} from '../parquetjs/parquet-thrift/index';
|
|
12
|
+
import {ParquetReader} from '../parquetjs/parser/parquet-reader';
|
|
13
|
+
import {ParquetSchema} from '../parquetjs/schema/schema';
|
|
14
|
+
import {ParquetSourceWorkerFile} from './parquet-source-worker-file';
|
|
15
|
+
import type {
|
|
16
|
+
ParquetSourceWorkerBatch,
|
|
17
|
+
ParquetSourceWorkerInput,
|
|
18
|
+
ParquetSourceWorkerResult
|
|
19
|
+
} from './parquet-source-worker-types';
|
|
20
|
+
|
|
21
|
+
/** Decodes one transferred row group entirely inside the worker. */
|
|
22
|
+
export async function decodeParquetSourceWorkerInput(
|
|
23
|
+
input: ParquetSourceWorkerInput
|
|
24
|
+
): Promise<ParquetSourceWorkerResult> {
|
|
25
|
+
await preloadCompressions();
|
|
26
|
+
const file = new ParquetSourceWorkerFile(input.fileByteLength, input.ranges);
|
|
27
|
+
const schema = new ParquetSchema(input.schemaDefinition);
|
|
28
|
+
const reader = new ParquetReader(file, {preserveBinary: input.preserveBinary});
|
|
29
|
+
const rowGroup = createWorkerRowGroup(input);
|
|
30
|
+
|
|
31
|
+
const decodeStartTime = getCurrentTime();
|
|
32
|
+
const decodedRowGroups = input.pagePlan
|
|
33
|
+
? await Promise.all(
|
|
34
|
+
input.pagePlan.rowRanges.map(rowRange =>
|
|
35
|
+
reader.readRowGroupRange(schema, rowGroup, [], rowRange, input.pagePlan!.pageLocations)
|
|
36
|
+
)
|
|
37
|
+
)
|
|
38
|
+
: [await reader.readRowGroup(schema, rowGroup, [])];
|
|
39
|
+
const columns = concatenateMaterializedColumns(
|
|
40
|
+
decodedRowGroups.map(decodedRowGroup => schema.materializeColumns(decodedRowGroup))
|
|
41
|
+
);
|
|
42
|
+
const sourceRowIndices = input.pagePlan
|
|
43
|
+
? input.pagePlan.rowRanges.flatMap(rowRange =>
|
|
44
|
+
Array.from({length: rowRange.end - rowRange.start}, (_, index) => rowRange.start + index)
|
|
45
|
+
)
|
|
46
|
+
: undefined;
|
|
47
|
+
const sourceRowCount = sourceRowIndices?.length ?? input.rowCount;
|
|
48
|
+
const localRowIndices = input.predicate
|
|
49
|
+
? filterParquetRowIndices(input.predicate, columns, sourceRowCount)
|
|
50
|
+
: undefined;
|
|
51
|
+
const rowIndices = localRowIndices?.map(rowIndex => sourceRowIndices?.[rowIndex] ?? rowIndex);
|
|
52
|
+
const decodeDurationMs = getCurrentTime() - decodeStartTime;
|
|
53
|
+
|
|
54
|
+
const conversionStartTime = getCurrentTime();
|
|
55
|
+
const batches: ParquetSourceWorkerBatch[] = [];
|
|
56
|
+
const outputColumns = new Set(input.projectedSchema.fields.map(field => field.name));
|
|
57
|
+
const outputRowCount = rowIndices?.length ?? sourceRowCount;
|
|
58
|
+
for (
|
|
59
|
+
let outputRowOffset = 0;
|
|
60
|
+
outputRowOffset < outputRowCount;
|
|
61
|
+
outputRowOffset += input.batchSize
|
|
62
|
+
) {
|
|
63
|
+
const rowCount = Math.min(input.batchSize, outputRowCount - outputRowOffset);
|
|
64
|
+
const batchRowIndices = rowIndices?.slice(outputRowOffset, outputRowOffset + rowCount);
|
|
65
|
+
const batchLocalRowIndices = localRowIndices?.slice(
|
|
66
|
+
outputRowOffset,
|
|
67
|
+
outputRowOffset + rowCount
|
|
68
|
+
);
|
|
69
|
+
const rowGroupRowOffset = batchRowIndices?.[0] ?? outputRowOffset;
|
|
70
|
+
const batchColumns = batchLocalRowIndices
|
|
71
|
+
? gatherParquetColumns(columns, batchLocalRowIndices, outputColumns)
|
|
72
|
+
: sliceColumns(columns, outputRowOffset, outputRowOffset + rowCount);
|
|
73
|
+
const arrowTable = convertTable(
|
|
74
|
+
{
|
|
75
|
+
shape: 'columnar-table',
|
|
76
|
+
schema: input.projectedSchema,
|
|
77
|
+
data: batchColumns
|
|
78
|
+
},
|
|
79
|
+
'arrow-table'
|
|
80
|
+
);
|
|
81
|
+
batches.push({
|
|
82
|
+
rowGroupRowOffset,
|
|
83
|
+
rowCount,
|
|
84
|
+
rowGroupRowIndices: batchRowIndices,
|
|
85
|
+
arrowTable: dehydrateArrowTable(arrowTable.data)
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
const arrowConversionDurationMs = getCurrentTime() - conversionStartTime;
|
|
89
|
+
return {
|
|
90
|
+
sourceRowCount,
|
|
91
|
+
rowCount: outputRowCount,
|
|
92
|
+
batches,
|
|
93
|
+
decodeDurationMs,
|
|
94
|
+
arrowConversionDurationMs
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/** Concatenates materialized page-range fragments without constructing row objects. */
|
|
99
|
+
function concatenateMaterializedColumns(
|
|
100
|
+
fragments: readonly Record<string, ArrayType>[]
|
|
101
|
+
): Record<string, ArrayType> {
|
|
102
|
+
const columns: Record<string, unknown[]> = {};
|
|
103
|
+
for (const fragment of fragments) {
|
|
104
|
+
for (const [name, values] of Object.entries(fragment)) {
|
|
105
|
+
columns[name] ||= [];
|
|
106
|
+
const destination = columns[name];
|
|
107
|
+
for (let index = 0; index < values.length; index++) {
|
|
108
|
+
destination.push(values[index]);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return columns as Record<string, ArrayType>;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/** Returns a contiguous row slice of every decoded column without constructing row objects. */
|
|
116
|
+
function sliceColumns(
|
|
117
|
+
columns: Record<string, ArrayType>,
|
|
118
|
+
start: number,
|
|
119
|
+
end: number
|
|
120
|
+
): Record<string, ArrayType> {
|
|
121
|
+
const slicedColumns: Record<string, ArrayType> = {};
|
|
122
|
+
for (const [name, column] of Object.entries(columns)) {
|
|
123
|
+
const slice = (column as ArrayType & {slice?: (start: number, end: number) => ArrayType}).slice;
|
|
124
|
+
slicedColumns[name] = slice
|
|
125
|
+
? slice.call(column, start, end)
|
|
126
|
+
: Array.prototype.slice.call(column, start, end);
|
|
127
|
+
}
|
|
128
|
+
return slicedColumns;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** Reconstructs the minimal Thrift-compatible row-group object used by the decoder. */
|
|
132
|
+
function createWorkerRowGroup(input: ParquetSourceWorkerInput): RowGroup {
|
|
133
|
+
return {
|
|
134
|
+
num_rows: input.rowCount,
|
|
135
|
+
total_byte_size: input.uncompressedByteLength,
|
|
136
|
+
columns: input.columnChunks.map(columnChunk => ({
|
|
137
|
+
file_path: columnChunk.filePath,
|
|
138
|
+
meta_data: {
|
|
139
|
+
type: columnChunk.physicalType,
|
|
140
|
+
codec: columnChunk.compressionCodec,
|
|
141
|
+
path_in_schema: columnChunk.path,
|
|
142
|
+
num_values: columnChunk.valueCount,
|
|
143
|
+
total_compressed_size: columnChunk.compressedByteLength,
|
|
144
|
+
total_uncompressed_size: columnChunk.uncompressedByteLength,
|
|
145
|
+
data_page_offset: columnChunk.dataPageOffset,
|
|
146
|
+
dictionary_page_offset: columnChunk.dictionaryPageOffset,
|
|
147
|
+
encodings: []
|
|
148
|
+
}
|
|
149
|
+
}))
|
|
150
|
+
} as unknown as RowGroup;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/** Returns a monotonic timestamp when available and falls back to wall-clock time. */
|
|
154
|
+
function getCurrentTime(): number {
|
|
155
|
+
return globalThis.performance?.now() ?? Date.now();
|
|
156
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
// loaders.gl
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Copyright (c) vis.gl contributors
|
|
4
|
+
|
|
5
|
+
import type {ReadableFile, Stat} from '@loaders.gl/loader-utils';
|
|
6
|
+
|
|
7
|
+
import type {ParquetSourceWorkerRange} from './parquet-source-worker-types';
|
|
8
|
+
|
|
9
|
+
/** Readable file backed only by selected transferred ranges from the source object. */
|
|
10
|
+
export class ParquetSourceWorkerFile implements ReadableFile {
|
|
11
|
+
/** Synthetic worker-local file handle. */
|
|
12
|
+
readonly handle = 'parquet-source-worker';
|
|
13
|
+
/** Synthetic worker-local URL. */
|
|
14
|
+
readonly url = '';
|
|
15
|
+
/** Total source byte length. */
|
|
16
|
+
readonly size: number;
|
|
17
|
+
/** Total source byte length as a bigint. */
|
|
18
|
+
readonly bigsize: bigint;
|
|
19
|
+
/** Selected ranges available to decoder reads. */
|
|
20
|
+
private readonly ranges: ParquetSourceWorkerRange[];
|
|
21
|
+
|
|
22
|
+
/** Creates a virtual file over transferred selected ranges. */
|
|
23
|
+
constructor(fileByteLength: number, ranges: ParquetSourceWorkerRange[]) {
|
|
24
|
+
this.size = fileByteLength;
|
|
25
|
+
this.bigsize = BigInt(fileByteLength);
|
|
26
|
+
this.ranges = ranges;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** Releases this no-op worker-local virtual file. */
|
|
30
|
+
async close(): Promise<void> {}
|
|
31
|
+
|
|
32
|
+
/** Returns the original source byte length. */
|
|
33
|
+
async stat(): Promise<Stat> {
|
|
34
|
+
return {size: this.size, bigsize: this.bigsize, isDirectory: false};
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/** Reads one decoder-requested slice from a transferred selected range. */
|
|
38
|
+
async read(
|
|
39
|
+
start: number | bigint = 0,
|
|
40
|
+
length: number = this.size - Number(start)
|
|
41
|
+
): Promise<ArrayBuffer> {
|
|
42
|
+
const offset = Number(start);
|
|
43
|
+
const range = this.ranges.find(
|
|
44
|
+
candidate =>
|
|
45
|
+
offset >= candidate.offset &&
|
|
46
|
+
offset + length <= candidate.offset + candidate.data.byteLength
|
|
47
|
+
);
|
|
48
|
+
if (!range) {
|
|
49
|
+
throw new Error(
|
|
50
|
+
`Parquet worker requested unavailable byte range ${offset}-${offset + length - 1}`
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
const relativeOffset = offset - range.offset;
|
|
54
|
+
return range.data.slice(relativeOffset, relativeOffset + length);
|
|
55
|
+
}
|
|
56
|
+
}
|