vastdb 0.1.1__tar.gz → 0.1.3__tar.gz
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.
- {vastdb-0.1.1 → vastdb-0.1.3}/CHANGELOG.md +32 -0
- {vastdb-0.1.1/vastdb.egg-info → vastdb-0.1.3}/PKG-INFO +8 -4
- {vastdb-0.1.1 → vastdb-0.1.3}/README.md +5 -2
- {vastdb-0.1.1 → vastdb-0.1.3}/requirements.txt +1 -1
- {vastdb-0.1.1 → vastdb-0.1.3}/setup.py +3 -1
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/__init__.py +6 -2
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/bench/test_perf.py +3 -3
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/bucket.py +29 -15
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/errors.py +40 -7
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/internal_commands.py +194 -233
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/schema.py +11 -6
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/session.py +16 -1
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/table.py +181 -77
- vastdb-0.1.3/vastdb/tests/test_duckdb.py +61 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_imports.py +13 -1
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_projections.py +1 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_sanity.py +2 -2
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_schemas.py +3 -3
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_tables.py +60 -50
- vastdb-0.1.3/vastdb/tests/test_util.py +39 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/util.py +1 -4
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/transaction.py +32 -6
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/util.py +42 -6
- {vastdb-0.1.1 → vastdb-0.1.3/vastdb.egg-info}/PKG-INFO +8 -4
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb.egg-info/SOURCES.txt +2 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb.egg-info/requires.txt +1 -1
- {vastdb-0.1.1 → vastdb-0.1.3}/LICENSE +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/MANIFEST.in +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/setup.cfg +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Aggregate.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySlice.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySubscript.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BinaryLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BooleanLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Bound.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Call.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CaseFragment.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Cast.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConcreteBoundImpl.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConditionalCase.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CurrentRow.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DateLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DecimalLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Deref.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DurationLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Expression.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ExpressionImpl.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldIndex.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldRef.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Filter.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FixedSizeBinaryLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float16Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float32Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float64Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Following.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Frame.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Grouping.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int16Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int32Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int64Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int8Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralDaysMilliseconds.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralImpl.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralMonths.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Join.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/JoinKind.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/KeyValue.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Limit.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ListLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralColumn.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralImpl.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralRelation.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapKey.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/OrderBy.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Ordering.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Plan.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Preceding.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Project.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelId.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Relation.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelationImpl.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOpKind.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOperation.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SimpleCase.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SortKey.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Source.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StringLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructField.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimeLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimestampLiteral.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt16Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt32Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt64Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt8Literal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Unbounded.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/WindowCall.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Binary.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Block.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompression.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompressionMethod.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Bool.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Buffer.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/CompressionType.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Date.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/DateUnit.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Decimal.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryBatch.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryEncoding.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryKind.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Duration.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Endianness.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Feature.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Field.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/FieldNode.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeBinary.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeList.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/FloatingPoint.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Footer.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Int.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Interval.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/IntervalUnit.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/KeyValue.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/LargeBinary.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/LargeList.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/LargeUtf8.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/List.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Map.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Message.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/MessageHeader.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/MetadataVersion.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Null.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Precision.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/RecordBatch.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Schema.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixCompressedAxis.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixIndexCSX.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensor.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndex.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCOO.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCSF.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Struct_.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Tensor.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/TensorDim.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Time.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/TimeUnit.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Timestamp.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Type.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Union.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/UnionMode.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/Utf8.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/org/apache/arrow/flatbuf/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/AlterColumnRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/AlterProjectionTableRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/AlterSchemaRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/AlterTableRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/Column.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ColumnType.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/CreateProjectionRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/CreateSchemaRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/GetProjectionTableStatsResponse.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/GetTableStatsResponse.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ImportDataRequest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ListProjectionsResponse.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ListSchemasResponse.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ListTablesResponse.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/ObjectDetails.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/S3File.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/VipRange.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vast_flatbuf/tabular/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/bench/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/conftest.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/__init__.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb/tests/test_nested.py +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb.egg-info/dependency_links.txt +0 -0
- {vastdb-0.1.1 → vastdb-0.1.3}/vastdb.egg-info/top_level.txt +0 -0
|
@@ -4,6 +4,37 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
6
6
|
|
|
7
|
+
## [0.1.3] (2024-05-05)
|
|
8
|
+
[0.1.3]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.2...v0.1.3
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Document predicate pushdown support
|
|
12
|
+
- Access imports' table (for VAST 5.2+)
|
|
13
|
+
- Support `is_in` predicate pushdown
|
|
14
|
+
- Document `table.py`
|
|
15
|
+
|
|
16
|
+
### Fixed
|
|
17
|
+
- Freeze `ibis` dependency at 8.0.0
|
|
18
|
+
- Support snapshot-based access
|
|
19
|
+
- Optimize RecordBatch slicing
|
|
20
|
+
|
|
21
|
+
## [0.1.2] (2024-04-25)
|
|
22
|
+
[0.1.2]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.1...v0.1.2
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
- Allow querying [VAST Catalog](https://www.vastdata.com/blog/vast-catalog-treat-your-file-system-like-a-database)
|
|
26
|
+
- Use [mypy](https://mypy-lang.org/) for type annotation checking
|
|
27
|
+
|
|
28
|
+
### Fixed
|
|
29
|
+
- Fix handling HTTPS endpoints [#50]
|
|
30
|
+
- Optimize `Table.select()` performance
|
|
31
|
+
- Use `GET` request to retrieve cluster version
|
|
32
|
+
- Enable `ruff` preview mode
|
|
33
|
+
- Make sure DuckDB integration fails gracefully when transaction is closed prematurely
|
|
34
|
+
|
|
35
|
+
### Removed
|
|
36
|
+
- Don't return row IDs from `Table.insert()`
|
|
37
|
+
|
|
7
38
|
## [0.1.1] (2024-04-15)
|
|
8
39
|
[0.1.1]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.0...v0.1.1
|
|
9
40
|
|
|
@@ -93,3 +124,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|
|
93
124
|
[#42]: https://github.com/vast-data/vastdb_sdk/pull/42
|
|
94
125
|
[#43]: https://github.com/vast-data/vastdb_sdk/pull/43
|
|
95
126
|
[#47]: https://github.com/vast-data/vastdb_sdk/pull/47
|
|
127
|
+
[#50]: https://github.com/vast-data/vastdb_sdk/pull/50
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: vastdb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: VAST Data SDK
|
|
5
5
|
Home-page: https://github.com/vast-data/vastdb_sdk
|
|
6
6
|
Author: VAST DATA
|
|
7
7
|
Author-email: hello@vastdata.com
|
|
8
8
|
License: Copyright (C) VAST Data Ltd.
|
|
9
|
-
Platform: UNKNOWN
|
|
10
9
|
Classifier: Development Status :: 4 - Beta
|
|
11
10
|
Classifier: License :: OSI Approved :: Apache Software License
|
|
12
11
|
Classifier: Programming Language :: Python :: 3
|
|
@@ -19,6 +18,13 @@ Classifier: Topic :: Database :: Front-Ends
|
|
|
19
18
|
Requires-Python: >=3.9.0
|
|
20
19
|
Description-Content-Type: text/markdown
|
|
21
20
|
License-File: LICENSE
|
|
21
|
+
Requires-Dist: aws-requests-auth
|
|
22
|
+
Requires-Dist: boto3
|
|
23
|
+
Requires-Dist: flatbuffers
|
|
24
|
+
Requires-Dist: ibis-framework==8.0.0
|
|
25
|
+
Requires-Dist: pyarrow
|
|
26
|
+
Requires-Dist: requests
|
|
27
|
+
Requires-Dist: xmltodict
|
|
22
28
|
|
|
23
29
|
|
|
24
30
|
`vastdb` is a Python-based SDK designed for interacting
|
|
@@ -27,5 +33,3 @@ and [VAST Catalog](https://vastdata.com/blog/vast-catalog-treat-your-file-system
|
|
|
27
33
|
enabling schema and table management, efficient ingest, query and modification of columnar data.
|
|
28
34
|
|
|
29
35
|
For more details, see [our whitepaper](https://vastdata.com/whitepaper/#TheVASTDataBase).
|
|
30
|
-
|
|
31
|
-
|
|
@@ -86,6 +86,8 @@ Our SDK supports predicate and projection pushdown:
|
|
|
86
86
|
table.select(predicate=table['c3'].contains('substring'))
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
+
See [here for more details](docs/predicate.md).
|
|
90
|
+
|
|
89
91
|
## Import a single Parquet file via S3 protocol
|
|
90
92
|
|
|
91
93
|
It is possible to efficiently create a table from a Parquet file (without copying it via the client):
|
|
@@ -150,10 +152,11 @@ p.drop()
|
|
|
150
152
|
|
|
151
153
|
## Snapshots
|
|
152
154
|
|
|
153
|
-
It is possible to
|
|
155
|
+
It is possible to use [snapshots](https://vastdata.com/blog/bringing-snapshots-to-vasts-element-store) for accessing the Database:
|
|
154
156
|
|
|
155
157
|
```python
|
|
156
|
-
|
|
158
|
+
snaps = bucket.list_snapshots()
|
|
159
|
+
batches = snaps[0].schema('schema-name').table('table-name').select()
|
|
157
160
|
```
|
|
158
161
|
|
|
159
162
|
## VAST Catalog
|
|
@@ -11,6 +11,7 @@ enabling schema and table management, efficient ingest, query and modification o
|
|
|
11
11
|
For more details, see [our whitepaper](https://vastdata.com/whitepaper/#TheVASTDataBase).
|
|
12
12
|
"""
|
|
13
13
|
|
|
14
|
+
|
|
14
15
|
def _get_version_suffix():
|
|
15
16
|
import subprocess
|
|
16
17
|
|
|
@@ -18,6 +19,7 @@ def _get_version_suffix():
|
|
|
18
19
|
print(f"Git commit: {commit}")
|
|
19
20
|
return f".dev1+vast.{commit.decode()[:16]}"
|
|
20
21
|
|
|
22
|
+
|
|
21
23
|
suffix = ''
|
|
22
24
|
if os.environ.get('VASTDB_APPEND_VERSION_SUFFIX'):
|
|
23
25
|
suffix = _get_version_suffix()
|
|
@@ -26,7 +28,7 @@ setup(
|
|
|
26
28
|
name='vastdb',
|
|
27
29
|
python_requires='>=3.9.0',
|
|
28
30
|
description='VAST Data SDK',
|
|
29
|
-
version='0.1.
|
|
31
|
+
version='0.1.3' + suffix,
|
|
30
32
|
url='https://github.com/vast-data/vastdb_sdk',
|
|
31
33
|
author='VAST DATA',
|
|
32
34
|
author_email='hello@vastdata.com',
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"""VAST Database Python SDK."""
|
|
2
2
|
|
|
3
|
+
import functools
|
|
4
|
+
|
|
3
5
|
from . import session
|
|
4
6
|
|
|
7
|
+
|
|
5
8
|
# A helper function, useful as a short-hand for Session c-tor: `session = vastdb.connect(...)`
|
|
6
|
-
|
|
7
|
-
connect
|
|
9
|
+
@functools.wraps(session.Session)
|
|
10
|
+
def connect(*args, **kwargs): # noqa: D103
|
|
11
|
+
return session.Session(*args, **kwargs)
|
|
@@ -12,7 +12,7 @@ log = logging.getLogger(__name__)
|
|
|
12
12
|
|
|
13
13
|
@pytest.mark.benchmark
|
|
14
14
|
def test_bench(session, clean_bucket_name, parquets_path, crater_path):
|
|
15
|
-
files = [str(parquets_path/f) for f in (parquets_path.glob('**/*.pq'))]
|
|
15
|
+
files = [str(parquets_path / f) for f in (parquets_path.glob('**/*.pq'))]
|
|
16
16
|
|
|
17
17
|
with session.transaction() as tx:
|
|
18
18
|
b = tx.bucket(clean_bucket_name)
|
|
@@ -22,8 +22,8 @@ def test_bench(session, clean_bucket_name, parquets_path, crater_path):
|
|
|
22
22
|
s = time.time()
|
|
23
23
|
pa_table = pa.Table.from_batches(t.select(columns=['sid'], predicate=t['sid'] == 10033007, config=config))
|
|
24
24
|
e = time.time()
|
|
25
|
-
log.info("'SELECT sid from TABLE WHERE sid = 10033007' returned in %s seconds.", e-s)
|
|
25
|
+
log.info("'SELECT sid from TABLE WHERE sid = 10033007' returned in %s seconds.", e - s)
|
|
26
26
|
if crater_path:
|
|
27
27
|
with open(f'{crater_path}/bench_results', 'a') as f:
|
|
28
|
-
f.write(f"'SELECT sid FROM TABLE WHERE sid = 10033007' returned in {e-s} seconds")
|
|
28
|
+
f.write(f"'SELECT sid FROM TABLE WHERE sid = 10033007' returned in {e - s} seconds")
|
|
29
29
|
assert pa_table.num_rows == 255_075
|
|
@@ -6,18 +6,14 @@ It is possible to list and access VAST snapshots generated over a bucket.
|
|
|
6
6
|
|
|
7
7
|
import logging
|
|
8
8
|
from dataclasses import dataclass
|
|
9
|
+
from typing import TYPE_CHECKING, List, Optional
|
|
9
10
|
|
|
10
11
|
from . import errors, schema, transaction
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
@dataclass
|
|
16
|
-
class Snapshot:
|
|
17
|
-
"""VAST bucket-level snapshot."""
|
|
13
|
+
if TYPE_CHECKING:
|
|
14
|
+
from .schema import Schema
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
bucket: "Bucket"
|
|
16
|
+
log = logging.getLogger(__name__)
|
|
21
17
|
|
|
22
18
|
|
|
23
19
|
@dataclass
|
|
@@ -27,7 +23,7 @@ class Bucket:
|
|
|
27
23
|
name: str
|
|
28
24
|
tx: "transaction.Transaction"
|
|
29
25
|
|
|
30
|
-
def create_schema(self, path: str, fail_if_exists=True) -> "
|
|
26
|
+
def create_schema(self, path: str, fail_if_exists=True) -> "Schema":
|
|
31
27
|
"""Create a new schema (a container of tables) under this bucket."""
|
|
32
28
|
if current := self.schema(path, fail_if_missing=False):
|
|
33
29
|
if fail_if_exists:
|
|
@@ -36,9 +32,9 @@ class Bucket:
|
|
|
36
32
|
return current
|
|
37
33
|
self.tx._rpc.api.create_schema(self.name, path, txid=self.tx.txid)
|
|
38
34
|
log.info("Created schema: %s", path)
|
|
39
|
-
return self.schema(path)
|
|
35
|
+
return self.schema(path) # type: ignore[return-value]
|
|
40
36
|
|
|
41
|
-
def schema(self, path: str, fail_if_missing=True) -> "
|
|
37
|
+
def schema(self, path: str, fail_if_missing=True) -> Optional["Schema"]:
|
|
42
38
|
"""Get a specific schema (a container of tables) under this bucket."""
|
|
43
39
|
s = self.schemas(path)
|
|
44
40
|
log.debug("schema: %s", s)
|
|
@@ -51,14 +47,14 @@ class Bucket:
|
|
|
51
47
|
log.debug("Found schema: %s", s[0].name)
|
|
52
48
|
return s[0]
|
|
53
49
|
|
|
54
|
-
def schemas(self, name: str = None) -> ["
|
|
50
|
+
def schemas(self, name: Optional[str] = None) -> List["Schema"]:
|
|
55
51
|
"""List bucket's schemas."""
|
|
56
52
|
schemas = []
|
|
57
53
|
next_key = 0
|
|
58
54
|
exact_match = bool(name)
|
|
59
55
|
log.debug("list schemas param: schema=%s, exact_match=%s", name, exact_match)
|
|
60
56
|
while True:
|
|
61
|
-
|
|
57
|
+
_bucket_name, curr_schemas, next_key, is_truncated, _ = \
|
|
62
58
|
self.tx._rpc.api.list_schemas(bucket=self.name, next_key=next_key, txid=self.tx.txid,
|
|
63
59
|
name_prefix=name, exact_match=exact_match)
|
|
64
60
|
if not curr_schemas:
|
|
@@ -69,7 +65,22 @@ class Bucket:
|
|
|
69
65
|
|
|
70
66
|
return [schema.Schema(name=name, bucket=self) for name, *_ in schemas]
|
|
71
67
|
|
|
72
|
-
def
|
|
68
|
+
def snapshot(self, name, fail_if_missing=True) -> Optional["Bucket"]:
|
|
69
|
+
"""Get snapshot by name (if exists)."""
|
|
70
|
+
snapshots, _is_truncated, _next_key = \
|
|
71
|
+
self.tx._rpc.api.list_snapshots(bucket=self.name, name_prefix=name, max_keys=1)
|
|
72
|
+
|
|
73
|
+
expected_name = f".snapshot/{name}"
|
|
74
|
+
exists = snapshots and snapshots[0] == expected_name + "/"
|
|
75
|
+
if not exists:
|
|
76
|
+
if fail_if_missing:
|
|
77
|
+
raise errors.MissingSnapshot(self.name, expected_name)
|
|
78
|
+
else:
|
|
79
|
+
return None
|
|
80
|
+
|
|
81
|
+
return Bucket(name=f'{self.name}/{expected_name}', tx=self.tx)
|
|
82
|
+
|
|
83
|
+
def snapshots(self) -> List["Bucket"]:
|
|
73
84
|
"""List bucket's snapshots."""
|
|
74
85
|
snapshots = []
|
|
75
86
|
next_key = 0
|
|
@@ -82,4 +93,7 @@ class Bucket:
|
|
|
82
93
|
if not is_truncated:
|
|
83
94
|
break
|
|
84
95
|
|
|
85
|
-
return [
|
|
96
|
+
return [
|
|
97
|
+
Bucket(name=f'{self.name}/{snapshot.strip("/")}', tx=self.tx)
|
|
98
|
+
for snapshot in snapshots
|
|
99
|
+
]
|
|
@@ -26,6 +26,7 @@ log = logging.getLogger(__name__)
|
|
|
26
26
|
class HttpError(Exception):
|
|
27
27
|
code: str
|
|
28
28
|
message: str
|
|
29
|
+
method: str
|
|
29
30
|
url: str
|
|
30
31
|
status: int # HTTP status
|
|
31
32
|
headers: requests.structures.CaseInsensitiveDict # HTTP response headers
|
|
@@ -84,15 +85,33 @@ class InvalidArgument(Exception):
|
|
|
84
85
|
pass
|
|
85
86
|
|
|
86
87
|
|
|
88
|
+
class TooWideRow(InvalidArgument):
|
|
89
|
+
pass
|
|
90
|
+
|
|
91
|
+
|
|
87
92
|
class Missing(Exception):
|
|
88
93
|
pass
|
|
89
94
|
|
|
90
95
|
|
|
96
|
+
class MissingTransaction(Missing):
|
|
97
|
+
pass
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
class NotSupported(Exception):
|
|
101
|
+
pass
|
|
102
|
+
|
|
103
|
+
|
|
91
104
|
@dataclass
|
|
92
105
|
class MissingBucket(Missing):
|
|
93
106
|
bucket: str
|
|
94
107
|
|
|
95
108
|
|
|
109
|
+
@dataclass
|
|
110
|
+
class MissingSnapshot(Missing):
|
|
111
|
+
bucket: str
|
|
112
|
+
snapshot: str
|
|
113
|
+
|
|
114
|
+
|
|
96
115
|
@dataclass
|
|
97
116
|
class MissingSchema(Missing):
|
|
98
117
|
bucket: str
|
|
@@ -131,6 +150,19 @@ class TableExists(Exists):
|
|
|
131
150
|
table: str
|
|
132
151
|
|
|
133
152
|
|
|
153
|
+
@dataclass
|
|
154
|
+
class NotSupportedCommand(NotSupported):
|
|
155
|
+
bucket: str
|
|
156
|
+
schema: str
|
|
157
|
+
table: str
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
@dataclass
|
|
161
|
+
class NotSupportedVersion(NotSupported):
|
|
162
|
+
err_msg: str
|
|
163
|
+
version: str
|
|
164
|
+
|
|
165
|
+
|
|
134
166
|
ERROR_TYPES_MAP = {
|
|
135
167
|
HttpStatus.BAD_REQUEST: BadRequest,
|
|
136
168
|
HttpStatus.FOBIDDEN: Forbidden,
|
|
@@ -150,21 +182,22 @@ def from_response(res: requests.Response):
|
|
|
150
182
|
|
|
151
183
|
log.debug("response: url='%s', code=%s, headers=%s, body='%s'", res.request.url, res.status_code, res.headers, res.text)
|
|
152
184
|
# try to parse S3 XML response for the error details:
|
|
153
|
-
|
|
154
|
-
|
|
185
|
+
code_str = None
|
|
186
|
+
message_str = None
|
|
155
187
|
if res.text:
|
|
156
188
|
try:
|
|
157
189
|
root = xml.etree.ElementTree.fromstring(res.text)
|
|
158
190
|
code = root.find('Code')
|
|
159
|
-
|
|
191
|
+
code_str = code.text if code is not None else None
|
|
160
192
|
message = root.find('Message')
|
|
161
|
-
|
|
193
|
+
message_str = message.text if message is not None else None
|
|
162
194
|
except xml.etree.ElementTree.ParseError:
|
|
163
195
|
log.debug("invalid XML: %r", res.text)
|
|
164
196
|
|
|
165
197
|
kwargs = dict(
|
|
166
|
-
code=
|
|
167
|
-
message=
|
|
198
|
+
code=code_str,
|
|
199
|
+
message=message_str,
|
|
200
|
+
method=res.request.method,
|
|
168
201
|
url=res.request.url,
|
|
169
202
|
status=res.status_code,
|
|
170
203
|
headers=res.headers,
|
|
@@ -172,4 +205,4 @@ def from_response(res: requests.Response):
|
|
|
172
205
|
log.warning("RPC failed: %s", kwargs)
|
|
173
206
|
status = HttpStatus(res.status_code)
|
|
174
207
|
error_type = ERROR_TYPES_MAP.get(status, UnexpectedError)
|
|
175
|
-
|
|
208
|
+
return error_type(**kwargs)
|