vastdb 0.1.9__tar.gz → 0.1.11__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.
Files changed (192) hide show
  1. {vastdb-0.1.9 → vastdb-0.1.11}/CHANGELOG.md +19 -0
  2. {vastdb-0.1.9/vastdb.egg-info → vastdb-0.1.11}/PKG-INFO +1 -1
  3. {vastdb-0.1.9 → vastdb-0.1.11}/README.md +5 -7
  4. {vastdb-0.1.9 → vastdb-0.1.11}/setup.py +1 -1
  5. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/__init__.py +6 -3
  6. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/_internal.py +9 -16
  7. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/bench/test_perf.py +2 -2
  8. vastdb-0.1.11/vastdb/bench/test_sample.py +217 -0
  9. vastdb-0.1.11/vastdb/config.py +65 -0
  10. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/conftest.py +28 -6
  11. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/errors.py +0 -6
  12. vastdb-0.1.11/vastdb/features.py +42 -0
  13. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/schema.py +1 -2
  14. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/session.py +12 -45
  15. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/table.py +8 -52
  16. vastdb-0.1.11/vastdb/tests/metrics.py +43 -0
  17. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_sanity.py +1 -1
  18. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_tables.py +29 -40
  19. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/util.py +1 -8
  20. vastdb-0.1.11/vastdb/vast_tests/test_scale.py +68 -0
  21. {vastdb-0.1.9 → vastdb-0.1.11/vastdb.egg-info}/PKG-INFO +1 -1
  22. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb.egg-info/SOURCES.txt +6 -1
  23. {vastdb-0.1.9 → vastdb-0.1.11}/LICENSE +0 -0
  24. {vastdb-0.1.9 → vastdb-0.1.11}/MANIFEST.in +0 -0
  25. {vastdb-0.1.9 → vastdb-0.1.11}/requirements.txt +0 -0
  26. {vastdb-0.1.9 → vastdb-0.1.11}/setup.cfg +0 -0
  27. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/__init__.py +0 -0
  28. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/__init__.py +0 -0
  29. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/__init__.py +0 -0
  30. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/__init__.py +0 -0
  31. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/__init__.py +0 -0
  32. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Aggregate.py +0 -0
  33. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySlice.py +0 -0
  34. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ArraySubscript.py +0 -0
  35. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BinaryLiteral.py +0 -0
  36. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/BooleanLiteral.py +0 -0
  37. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Bound.py +0 -0
  38. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Call.py +0 -0
  39. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CaseFragment.py +0 -0
  40. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Cast.py +0 -0
  41. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConcreteBoundImpl.py +0 -0
  42. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ConditionalCase.py +0 -0
  43. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/CurrentRow.py +0 -0
  44. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DateLiteral.py +0 -0
  45. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DecimalLiteral.py +0 -0
  46. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Deref.py +0 -0
  47. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/DurationLiteral.py +0 -0
  48. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Expression.py +0 -0
  49. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ExpressionImpl.py +0 -0
  50. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldIndex.py +0 -0
  51. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FieldRef.py +0 -0
  52. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Filter.py +0 -0
  53. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/FixedSizeBinaryLiteral.py +0 -0
  54. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float16Literal.py +0 -0
  55. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float32Literal.py +0 -0
  56. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Float64Literal.py +0 -0
  57. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Following.py +0 -0
  58. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Frame.py +0 -0
  59. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Grouping.py +0 -0
  60. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int16Literal.py +0 -0
  61. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int32Literal.py +0 -0
  62. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int64Literal.py +0 -0
  63. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Int8Literal.py +0 -0
  64. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteral.py +0 -0
  65. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralDaysMilliseconds.py +0 -0
  66. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralImpl.py +0 -0
  67. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/IntervalLiteralMonths.py +0 -0
  68. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Join.py +0 -0
  69. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/JoinKind.py +0 -0
  70. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/KeyValue.py +0 -0
  71. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Limit.py +0 -0
  72. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/ListLiteral.py +0 -0
  73. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Literal.py +0 -0
  74. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralColumn.py +0 -0
  75. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralImpl.py +0 -0
  76. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/LiteralRelation.py +0 -0
  77. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapKey.py +0 -0
  78. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/MapLiteral.py +0 -0
  79. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/OrderBy.py +0 -0
  80. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Ordering.py +0 -0
  81. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Plan.py +0 -0
  82. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Preceding.py +0 -0
  83. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Project.py +0 -0
  84. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelId.py +0 -0
  85. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Relation.py +0 -0
  86. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/RelationImpl.py +0 -0
  87. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOpKind.py +0 -0
  88. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SetOperation.py +0 -0
  89. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SimpleCase.py +0 -0
  90. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/SortKey.py +0 -0
  91. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Source.py +0 -0
  92. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StringLiteral.py +0 -0
  93. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructField.py +0 -0
  94. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/StructLiteral.py +0 -0
  95. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimeLiteral.py +0 -0
  96. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/TimestampLiteral.py +0 -0
  97. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt16Literal.py +0 -0
  98. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt32Literal.py +0 -0
  99. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt64Literal.py +0 -0
  100. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/UInt8Literal.py +0 -0
  101. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/Unbounded.py +0 -0
  102. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/WindowCall.py +0 -0
  103. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/computeir/flatbuf/__init__.py +0 -0
  104. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Binary.py +0 -0
  105. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Block.py +0 -0
  106. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompression.py +0 -0
  107. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/BodyCompressionMethod.py +0 -0
  108. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Bool.py +0 -0
  109. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Buffer.py +0 -0
  110. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/CompressionType.py +0 -0
  111. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Date.py +0 -0
  112. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/DateUnit.py +0 -0
  113. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Decimal.py +0 -0
  114. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryBatch.py +0 -0
  115. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryEncoding.py +0 -0
  116. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/DictionaryKind.py +0 -0
  117. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Duration.py +0 -0
  118. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Endianness.py +0 -0
  119. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Feature.py +0 -0
  120. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Field.py +0 -0
  121. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/FieldNode.py +0 -0
  122. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeBinary.py +0 -0
  123. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/FixedSizeList.py +0 -0
  124. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/FloatingPoint.py +0 -0
  125. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Footer.py +0 -0
  126. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Int.py +0 -0
  127. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Interval.py +0 -0
  128. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/IntervalUnit.py +0 -0
  129. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/KeyValue.py +0 -0
  130. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/LargeBinary.py +0 -0
  131. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/LargeList.py +0 -0
  132. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/LargeUtf8.py +0 -0
  133. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/List.py +0 -0
  134. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Map.py +0 -0
  135. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Message.py +0 -0
  136. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/MessageHeader.py +0 -0
  137. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/MetadataVersion.py +0 -0
  138. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Null.py +0 -0
  139. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Precision.py +0 -0
  140. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/RecordBatch.py +0 -0
  141. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Schema.py +0 -0
  142. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixCompressedAxis.py +0 -0
  143. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseMatrixIndexCSX.py +0 -0
  144. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensor.py +0 -0
  145. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndex.py +0 -0
  146. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCOO.py +0 -0
  147. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/SparseTensorIndexCSF.py +0 -0
  148. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Struct_.py +0 -0
  149. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Tensor.py +0 -0
  150. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/TensorDim.py +0 -0
  151. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Time.py +0 -0
  152. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/TimeUnit.py +0 -0
  153. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Timestamp.py +0 -0
  154. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Type.py +0 -0
  155. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Union.py +0 -0
  156. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/UnionMode.py +0 -0
  157. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/Utf8.py +0 -0
  158. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/org/apache/arrow/flatbuf/__init__.py +0 -0
  159. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/AlterColumnRequest.py +0 -0
  160. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/AlterProjectionTableRequest.py +0 -0
  161. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/AlterSchemaRequest.py +0 -0
  162. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/AlterTableRequest.py +0 -0
  163. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/Column.py +0 -0
  164. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ColumnType.py +0 -0
  165. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/CreateProjectionRequest.py +0 -0
  166. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/CreateSchemaRequest.py +0 -0
  167. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/GetProjectionTableStatsResponse.py +0 -0
  168. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/GetTableStatsResponse.py +0 -0
  169. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ImportDataRequest.py +0 -0
  170. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ListProjectionsResponse.py +0 -0
  171. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ListSchemasResponse.py +0 -0
  172. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ListTablesResponse.py +0 -0
  173. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/ObjectDetails.py +0 -0
  174. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/S3File.py +0 -0
  175. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/VipRange.py +0 -0
  176. {vastdb-0.1.9 → vastdb-0.1.11}/vast_flatbuf/tabular/__init__.py +0 -0
  177. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/bench/__init__.py +0 -0
  178. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/bucket.py +0 -0
  179. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/__init__.py +0 -0
  180. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_duckdb.py +0 -0
  181. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_imports.py +0 -0
  182. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_nested.py +0 -0
  183. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_projections.py +0 -0
  184. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_schemas.py +0 -0
  185. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/test_util.py +0 -0
  186. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/tests/util.py +0 -0
  187. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/transaction.py +0 -0
  188. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/vast_tests/__init__.py +0 -0
  189. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb/vast_tests/test_ha.py +0 -0
  190. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb.egg-info/dependency_links.txt +0 -0
  191. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb.egg-info/requires.txt +0 -0
  192. {vastdb-0.1.9 → vastdb-0.1.11}/vastdb.egg-info/top_level.txt +0 -0
@@ -4,6 +4,25 @@ 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.11] (2024-07-17)
8
+ [0.1.11]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.10...v0.1.11
9
+
10
+ ## Fixed
11
+ - Revert timezone check to keep previous SDK behaviour
12
+
13
+ ## Added
14
+ - Use Sphinx for building documentation
15
+
16
+ ## Changed
17
+ - Defer imports to optimize initial import latency
18
+
19
+ ## [0.1.10] (2024-07-09)
20
+ [0.1.10]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.9...v0.1.10
21
+
22
+ ## Fixed
23
+ - Support responses with no record batches
24
+ - Document supported Arrow data types
25
+
7
26
  ## [0.1.9] (2024-07-01)
8
27
  [0.1.9]: https://github.com/vast-data/vastdb_sdk/compare/v0.1.8...v0.1.9
9
28
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: vastdb
3
- Version: 0.1.9
3
+ Version: 0.1.11
4
4
  Summary: VAST Data SDK
5
5
  Home-page: https://github.com/vast-data/vastdb_sdk
6
6
  Author: VAST DATA
@@ -19,6 +19,11 @@
19
19
  - [S3 access & secret keys on VAST cluster](https://support.vastdata.com/s/article/UUID-4d2e7e23-b2fb-7900-d98f-96c31a499626)
20
20
  - [Tabular identity policy with the proper permissions](https://support.vastdata.com/s/article/UUID-14322b60-d6a2-89ac-3df0-3dfbb6974182)
21
21
 
22
+ ### Required VAST release
23
+
24
+ Currently, VAST DB Python SDK requires `5.0.0-sp10` or later VAST release.
25
+
26
+ If the cluster is running an older VAST release, please contact customer.support@vastdata.com for more details.
22
27
 
23
28
  ### Installation
24
29
 
@@ -203,10 +208,3 @@ See the following blog posts for more examples:
203
208
 
204
209
  - https://vastdata.com/blog/the-vast-catalog-in-action-part-1
205
210
  - https://vastdata.com/blog/the-vast-catalog-in-action-part-2
206
-
207
-
208
- ## Required VAST release
209
-
210
- Currently, VAST DB Python SDK requires `5.0.0-sp10` or later VAST release.
211
-
212
- If the cluster is running an older VAST release, please contact customer.support@vastdata.com for more details.
@@ -29,7 +29,7 @@ setup(
29
29
  name='vastdb',
30
30
  python_requires='>=3.9.0',
31
31
  description='VAST Data SDK',
32
- version='0.1.9' + suffix,
32
+ version='0.1.11' + suffix,
33
33
  url='https://github.com/vast-data/vastdb_sdk',
34
34
  author='VAST DATA',
35
35
  author_email='hello@vastdata.com',
@@ -1,9 +1,6 @@
1
1
  """VAST Database Python SDK."""
2
2
 
3
3
  import functools
4
- import importlib.metadata
5
-
6
- __version__ = importlib.metadata.distribution(__package__).version
7
4
 
8
5
  from . import session
9
6
 
@@ -12,3 +9,9 @@ from . import session
12
9
  @functools.wraps(session.Session)
13
10
  def connect(*args, **kwargs): # noqa: D103
14
11
  return session.Session(*args, **kwargs)
12
+
13
+
14
+ def version():
15
+ """Return VAST DB SDK version."""
16
+ import importlib
17
+ return importlib.metadata.distribution(__package__).version
@@ -5,9 +5,8 @@ import re
5
5
  import struct
6
6
  import urllib.parse
7
7
  from collections import defaultdict, namedtuple
8
- from dataclasses import dataclass, field
9
8
  from enum import Enum
10
- from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union
9
+ from typing import Any, Dict, Iterator, List, Optional, Tuple, Union
11
10
 
12
11
  import backoff
13
12
  import flatbuffers
@@ -104,6 +103,7 @@ from vast_flatbuf.tabular.ListSchemasResponse import ListSchemasResponse as list
104
103
  from vast_flatbuf.tabular.ListTablesResponse import ListTablesResponse as list_tables
105
104
 
106
105
  from . import errors
106
+ from .config import BackoffConfig
107
107
 
108
108
  UINT64_MAX = 18446744073709551615
109
109
 
@@ -742,15 +742,6 @@ def _backoff_giveup(exc: Exception) -> bool:
742
742
  return True # give up in case of other exceptions
743
743
 
744
744
 
745
- @dataclass
746
- class BackoffConfig:
747
- wait_gen: Callable = field(default=backoff.expo)
748
- max_value: Optional[float] = None # max duration for a single wait period
749
- max_tries: int = 10
750
- max_time: float = 60.0 # in seconds
751
- backoff_log_level: int = logging.DEBUG
752
-
753
-
754
745
  class VastdbApi:
755
746
  # we expect the vast version to be <major>.<minor>.<patch>.<protocol>
756
747
  VAST_VERSION_REGEX = re.compile(r'^vast (\d+\.\d+\.\d+\.\d+)$')
@@ -759,15 +750,17 @@ class VastdbApi:
759
750
  *,
760
751
  auth_type=AuthType.SIGV4,
761
752
  ssl_verify=True,
753
+ timeout=None,
762
754
  backoff_config: Optional[BackoffConfig] = None):
763
755
 
764
- from . import __version__ # import lazily here (to avoid circular dependencies)
765
- self.client_sdk_version = f"VAST Database Python SDK {__version__} - 2024 (c)"
756
+ from . import version # import lazily here (to avoid circular dependencies)
757
+ self.client_sdk_version = f"VAST Database Python SDK {version()} - 2024 (c)"
766
758
 
767
759
  url = urllib3.util.parse_url(endpoint)
768
760
  self.access_key = access_key
769
761
  self.secret_key = secret_key
770
762
 
763
+ self.timeout = timeout
771
764
  self.default_max_list_columns_page_size = 1000
772
765
  self._session = requests.Session()
773
766
  self._session.verify = ssl_verify
@@ -820,9 +813,9 @@ class VastdbApi:
820
813
  raise NotImplementedError(msg)
821
814
 
822
815
  def _single_request(self, *, method, url, skip_status_check=False, **kwargs):
823
- _logger.debug("Sending request: %s %s %s", method, url, kwargs)
816
+ _logger.debug("Sending request: %s %s %s timeout=%s", method, url, kwargs, self.timeout)
824
817
  try:
825
- res = self._session.request(method=method, url=url, **kwargs)
818
+ res = self._session.request(method=method, url=url, timeout=self.timeout, **kwargs)
826
819
  except requests.exceptions.ConnectionError as err:
827
820
  # low-level connection issue, it is safe to retry only read-only requests
828
821
  may_retry = (method == "GET")
@@ -1807,7 +1800,7 @@ def _iter_query_data_response_columns(fileobj, stream_ids=None):
1807
1800
  batches.append(batch)
1808
1801
  except StopIteration: # we got an end-of-stream IPC message for a given stream ID
1809
1802
  reader, batches = readers.pop(stream_id) # end of column
1810
- table = pa.Table.from_batches(batches) # concatenate all column chunks (as a single)
1803
+ table = pa.Table.from_batches(batches=batches, schema=reader.schema) # concatenate all column chunks (as a single)
1811
1804
  _logger.debug("stream_id=%d rows=%d column=%s", stream_id, len(table), table)
1812
1805
  yield (stream_id, next_row_id, table)
1813
1806
 
@@ -10,11 +10,11 @@ log = logging.getLogger(__name__)
10
10
 
11
11
 
12
12
  @pytest.mark.benchmark
13
- def test_bench(session, clean_bucket_name, parquets_path, crater_path):
13
+ def test_bench(session, bucket_name, parquets_path, crater_path):
14
14
  files = [str(parquets_path / f) for f in (parquets_path.glob('**/*.pq'))]
15
15
 
16
16
  with session.transaction() as tx:
17
- b = tx.bucket(clean_bucket_name)
17
+ b = tx.bucket(bucket_name)
18
18
  s = b.create_schema('s1')
19
19
  t = util.create_table_from_files(s, 't1', files, config=ImportConfig(import_concurrency=8))
20
20
  config = QueryConfig(num_splits=8, num_sub_splits=4)
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env python3
2
+
3
+ import functools
4
+ import itertools
5
+ import logging
6
+ import os
7
+ import random
8
+ import threading
9
+ import time
10
+ from concurrent.futures import ProcessPoolExecutor, as_completed
11
+
12
+ import numpy as np
13
+ import pyarrow as pa
14
+
15
+ import vastdb.errors
16
+ from vastdb.table import INTERNAL_ROW_ID
17
+ from vastdb.tests import metrics
18
+
19
+ logging.basicConfig(
20
+ level="INFO",
21
+ format="%(asctime)s %(levelname)-10s %(process)d/%(thread)d %(filename)s:%(lineno)d %(message)s")
22
+
23
+ log = logging.getLogger()
24
+
25
+ sdk_version = vastdb.version()
26
+ log.info("Python SDK version: %s", sdk_version)
27
+
28
+ NUM_COLUMNS = 10_000
29
+ COLUMNS_BATCH = 10
30
+
31
+ NUM_ROW_GROUPS = 100
32
+ ROW_GROUP_SIZE = 100_000
33
+
34
+
35
+ INTERNAL_ROWID_FIELD = pa.field(INTERNAL_ROW_ID, pa.uint64()) # used for UPDATE
36
+ EXTERNAL_ROWID_FIELD = pa.field("vastdb_rowid", pa.int64()) # used for INSERT & SELECT
37
+
38
+ SCHEMA = "perf"
39
+ TABLE = "sample"
40
+
41
+ SCHEMA_ARROW = pa.schema(
42
+ [pa.field(f'c{i}', pa.float32()) for i in range(NUM_COLUMNS)]
43
+ )
44
+
45
+
46
+ def load_batch(bucket, session_kwargs, offset, limit):
47
+ log.info('loading into [%d..%d)', offset, limit)
48
+
49
+ # Iterate over all row-groups in this file
50
+ rowids_range = range(offset, limit)
51
+ rowids = pa.array(rowids_range, INTERNAL_ROWID_FIELD.type)
52
+
53
+ session = vastdb.connect(**session_kwargs)
54
+ metrics_rows = []
55
+
56
+ with session.transaction() as tx:
57
+ table = tx.bucket(bucket).schema(SCHEMA).table(TABLE)
58
+
59
+ col = table[EXTERNAL_ROWID_FIELD.name]
60
+ pred = (col >= rowids_range[0]) & (col <= rowids_range[-1])
61
+ count = sum(len(rb) for rb in table.select(columns=[], predicate=pred))
62
+ log.info("%d rows exist at %s", count, rowids_range)
63
+ if count == len(rowids_range):
64
+ # skip already loaded rows
65
+ log.info('skipping [%d..%d)', offset, limit)
66
+
67
+ pid = os.getpid()
68
+ tid = threading.get_native_id()
69
+ total_nbytes = 0
70
+ calls = 0
71
+ t0 = time.time()
72
+ # Insert/update every chunk of columns in this rowgroup
73
+ for j in range(0, len(SCHEMA_ARROW), COLUMNS_BATCH):
74
+ cols_batch = list(SCHEMA_ARROW)[j:j + COLUMNS_BATCH]
75
+ arrays = [
76
+ pa.array(np.float32(np.random.uniform(size=[ROW_GROUP_SIZE])))
77
+ for _ in cols_batch
78
+ ]
79
+ chunk = pa.table(data=arrays, schema=pa.schema(cols_batch))
80
+ nbytes = chunk.get_total_buffer_size()
81
+ start = time.perf_counter()
82
+ if j == 0:
83
+ chunk = chunk.add_column(0, EXTERNAL_ROWID_FIELD, rowids.cast(EXTERNAL_ROWID_FIELD.type))
84
+ op = 'insert'
85
+ table.insert(chunk)
86
+ else:
87
+ chunk = chunk.add_column(0, INTERNAL_ROWID_FIELD, rowids)
88
+ op = 'update'
89
+ table.update(chunk)
90
+ finish = time.perf_counter()
91
+
92
+ metrics_rows.append(metrics.Row(
93
+ start=start, finish=finish, table_path=table.path, op=op,
94
+ nbytes=nbytes, rows=len(chunk), cols=len(cols_batch),
95
+ pid=pid, tid=tid, sdk_version=sdk_version))
96
+
97
+ total_nbytes += nbytes
98
+ calls += 1
99
+ log.debug("%s into %s: %d rows x %d cols, %.3f MB",
100
+ op, rowids_range, len(chunk), len(chunk.schema),
101
+ chunk.get_total_buffer_size() / 1e6)
102
+
103
+ dt = time.time() - t0
104
+
105
+ log.info('loaded into [%d..%d): %d rows x %d cols, %.3f MB, %d RPCs, %.3f seconds',
106
+ offset, limit, limit - offset, NUM_COLUMNS, total_nbytes / 1e6, calls, dt)
107
+ return metrics_rows
108
+
109
+
110
+ def test_ingest(test_bucket_name, session_kwargs, tabular_endpoint_urls, num_workers, perf_metrics_db):
111
+ session = vastdb.connect(**session_kwargs)
112
+ metrics_table = metrics.Table(perf_metrics_db, "ingest")
113
+
114
+ with session.transaction() as tx:
115
+ b = tx.bucket(test_bucket_name)
116
+ try:
117
+ s = b.schema(SCHEMA)
118
+ except vastdb.errors.MissingSchema:
119
+ s = b.create_schema(SCHEMA)
120
+
121
+ try:
122
+ s.table(TABLE)
123
+ except vastdb.errors.MissingTable:
124
+ s.create_table(TABLE, pa.schema([EXTERNAL_ROWID_FIELD] + list(SCHEMA_ARROW)))
125
+
126
+ ranges = [
127
+ (i * ROW_GROUP_SIZE, (i + 1) * ROW_GROUP_SIZE)
128
+ for i in range(NUM_ROW_GROUPS)
129
+ ]
130
+
131
+ with ProcessPoolExecutor(max_workers=num_workers) as executor:
132
+ futures = [
133
+ executor.submit(load_batch, test_bucket_name, session_kwargs | {'endpoint': url}, offset, limit)
134
+ for (offset, limit), url in zip(ranges, itertools.cycle(tabular_endpoint_urls))
135
+ ]
136
+ log.info("spawned %d futures", len(futures))
137
+ for future in as_completed(futures):
138
+ metrics_table.insert(future.result())
139
+
140
+ with session.transaction() as tx:
141
+ t = tx.bucket(test_bucket_name).schema(SCHEMA).table(TABLE)
142
+ count = sum(len(rb) for rb in t.select([]))
143
+ log.info("%s has %d rows: %s", t, count, t.stats)
144
+
145
+
146
+ def run_query(session_kwargs, i, bucket_name, endpoint_url):
147
+ num_columns = 2000
148
+ row_groups_per_query = 10
149
+
150
+ config = vastdb.table.QueryConfig(
151
+ num_sub_splits=1,
152
+ num_splits=1,
153
+ limit_rows_per_sub_split=ROW_GROUP_SIZE,
154
+ num_row_groups_per_sub_split=1)
155
+
156
+ row_group_indices = list(range(NUM_ROW_GROUPS))
157
+ r = random.Random(i)
158
+ r.shuffle(row_group_indices)
159
+
160
+ pid = os.getpid()
161
+ tid = threading.get_native_id()
162
+ metrics_rows = []
163
+
164
+ session = vastdb.connect(**(session_kwargs | {"endpoint": endpoint_url}))
165
+ with session.transaction() as tx:
166
+ t = tx.bucket(bucket_name).schema(SCHEMA).table(TABLE)
167
+
168
+ fields = list(t.arrow_schema)[1:]
169
+ r.shuffle(fields)
170
+ cols = [f.name for f in fields[:num_columns]]
171
+
172
+ vastdb_rowid = t['vastdb_rowid']
173
+ preds = []
174
+ for offset in range(0, len(row_group_indices), row_groups_per_query):
175
+ rowid_ranges = (
176
+ vastdb_rowid.between(j * ROW_GROUP_SIZE, (j + 1) * ROW_GROUP_SIZE - 1)
177
+ for j in row_group_indices[offset:offset + row_groups_per_query]
178
+ )
179
+ pred = functools.reduce((lambda x, y: x | y), rowid_ranges)
180
+ preds.append(pred)
181
+
182
+ for j, pred in enumerate(preds):
183
+ log.info("%d) starting query #%d on %s", i, j, endpoint_url)
184
+
185
+ start = time.perf_counter()
186
+ res = t.select(columns=cols, predicate=pred, config=config)
187
+ rows = 0
188
+ data = 0
189
+ for rb in res:
190
+ rows += len(rb)
191
+ data += rb.nbytes
192
+ dt = time.perf_counter() - start
193
+ log.info("%d) got query #%d batch %.3f[s], %.3f[GB] %.3f[MB/s], %.3f[Mrows]", i, j, dt, data / 1e9, data / 1e6 / dt, rows / 1e6)
194
+
195
+ finish = time.perf_counter()
196
+ dt = finish - start
197
+ log.info("%d) finished query #%d %.3f[s], %.3f[GB], %.3f[MB/s], %.3f[Mrows]", i, j, dt, data / 1e9, data / 1e6 / dt, rows / 1e6)
198
+
199
+ metrics_rows.append(metrics.Row(
200
+ start=start, finish=finish, table_path=t.path, op="select",
201
+ nbytes=data, rows=rows, cols=len(cols),
202
+ pid=pid, tid=tid, sdk_version=sdk_version))
203
+
204
+
205
+ def test_scan(test_bucket_name, session, num_workers, session_kwargs, tabular_endpoint_urls, perf_metrics_db):
206
+ metrics_table = metrics.Table(perf_metrics_db, "query")
207
+
208
+ log.info("starting %d workers, endpoints=%s", num_workers, tabular_endpoint_urls)
209
+ with ProcessPoolExecutor(max_workers=num_workers) as executor:
210
+ futures = [
211
+ executor.submit(run_query, session_kwargs, i, test_bucket_name, url)
212
+ for i, url in zip(range(num_workers), itertools.cycle(tabular_endpoint_urls))
213
+ ]
214
+ for future in as_completed(futures):
215
+ metrics_table.insert(future.result())
216
+
217
+ log.info("finished %d workers", num_workers)
@@ -0,0 +1,65 @@
1
+ """Configuration-related dataclasses."""
2
+
3
+ import logging
4
+ from dataclasses import dataclass, field
5
+ from typing import Callable, List, Optional
6
+
7
+ import backoff
8
+
9
+
10
+ @dataclass
11
+ class BackoffConfig:
12
+ """Retry configuration."""
13
+
14
+ wait_gen: Callable = field(default=backoff.expo)
15
+ max_value: Optional[float] = None # max duration for a single wait period
16
+ max_tries: int = 10
17
+ max_time: float = 60.0 # in seconds
18
+ backoff_log_level: int = logging.DEBUG
19
+
20
+
21
+ @dataclass
22
+ class QueryConfig:
23
+ """Query execution configiration."""
24
+
25
+ # allows server-side parallel processing by issuing multiple reads concurrently for a single RPC
26
+ num_sub_splits: int = 4
27
+
28
+ # used to split the table into disjoint subsets of rows, to be processed concurrently using multiple RPCs
29
+ # will be estimated from the table's row count, if not explicitly set
30
+ num_splits: Optional[int] = None
31
+
32
+ # each endpoint will be handled by a separate worker thread
33
+ # a single endpoint can be specified more than once to benefit from multithreaded execution
34
+ data_endpoints: Optional[List[str]] = None
35
+
36
+ # a subsplit fiber will finish after sending this number of rows back to the client
37
+ limit_rows_per_sub_split: int = 128 * 1024
38
+
39
+ # each fiber will read the following number of rowgroups coninuously before skipping
40
+ # in order to use semi-sorted projections this value must be 8 (this is the hard coded size of a row groups per row block).
41
+ num_row_groups_per_sub_split: int = 8
42
+
43
+ # can be disabled for benchmarking purposes
44
+ use_semi_sorted_projections: bool = True
45
+
46
+ # enforce using a specific semi-sorted projection (if enabled above)
47
+ semi_sorted_projection_name: Optional[str] = None
48
+
49
+ # used to estimate the number of splits, given the table rows' count
50
+ rows_per_split: int = 4000000
51
+
52
+ # used for worker threads' naming
53
+ query_id: str = ""
54
+
55
+ # non-negative integer, used for server-side prioritization of queued requests:
56
+ # - requests with lower values will be served before requests with higher values.
57
+ # - if unset, the request will be added to the queue's end.
58
+ queue_priority: Optional[int] = None
59
+
60
+
61
+ @dataclass
62
+ class ImportConfig:
63
+ """Import execution configiration."""
64
+
65
+ import_concurrency: int = 2
@@ -1,4 +1,5 @@
1
1
  import os
2
+ import sqlite3
2
3
  from pathlib import Path
3
4
 
4
5
  import boto3
@@ -13,27 +14,43 @@ def pytest_addoption(parser):
13
14
  default=os.environ.get("AWS_ACCESS_KEY_ID", None))
14
15
  parser.addoption("--tabular-secret-key", help="Secret key with Tabular permissions (AWS_SECRET_ACCESS_KEY)",
15
16
  default=os.environ.get("AWS_SECRET_ACCESS_KEY", None))
16
- parser.addoption("--tabular-endpoint-url", help="Tabular server endpoint", default="http://localhost:9090")
17
+ parser.addoption("--tabular-endpoint-url", help="Tabular server endpoint", default=[], action="append")
17
18
  parser.addoption("--data-path", help="Data files location", default=None)
18
19
  parser.addoption("--crater-path", help="Save benchmark results in a dedicated location", default=None)
19
20
  parser.addoption("--schema-name", help="Name of schema for the test to operate on", default=None)
20
21
  parser.addoption("--table-name", help="Name of table for the test to operate on", default=None)
22
+ parser.addoption("--num-workers", help="Number of concurrent workers", default=1)
21
23
 
22
24
 
23
25
  @pytest.fixture(scope="session")
24
- def session(request):
25
- return vastdb.connect(
26
+ def session_kwargs(request, tabular_endpoint_urls):
27
+ return dict(
26
28
  access=request.config.getoption("--tabular-access-key"),
27
29
  secret=request.config.getoption("--tabular-secret-key"),
28
- endpoint=request.config.getoption("--tabular-endpoint-url"),
30
+ endpoint=tabular_endpoint_urls[0],
29
31
  )
30
32
 
31
33
 
34
+ @pytest.fixture(scope="session")
35
+ def session(session_kwargs):
36
+ return vastdb.connect(**session_kwargs)
37
+
38
+
39
+ @pytest.fixture(scope="session")
40
+ def num_workers(request):
41
+ return int(request.config.getoption("--num-workers"))
42
+
43
+
32
44
  @pytest.fixture(scope="session")
33
45
  def test_bucket_name(request):
34
46
  return request.config.getoption("--tabular-bucket-name")
35
47
 
36
48
 
49
+ @pytest.fixture(scope="session")
50
+ def tabular_endpoint_urls(request):
51
+ return request.config.getoption("--tabular-endpoint-url") or ["http://localhost:9090"]
52
+
53
+
37
54
  def iter_schemas(s):
38
55
  """Recusively scan all schemas."""
39
56
  children = s.schemas()
@@ -55,12 +72,12 @@ def clean_bucket_name(request, test_bucket_name, session):
55
72
 
56
73
 
57
74
  @pytest.fixture(scope="session")
58
- def s3(request):
75
+ def s3(request, tabular_endpoint_urls):
59
76
  return boto3.client(
60
77
  's3',
61
78
  aws_access_key_id=request.config.getoption("--tabular-access-key"),
62
79
  aws_secret_access_key=request.config.getoption("--tabular-secret-key"),
63
- endpoint_url=request.config.getoption("--tabular-endpoint-url"))
80
+ endpoint_url=tabular_endpoint_urls[0])
64
81
 
65
82
 
66
83
  @pytest.fixture(scope="function")
@@ -81,3 +98,8 @@ def schema_name(request):
81
98
  @pytest.fixture(scope="function")
82
99
  def table_name(request):
83
100
  return request.config.getoption("--table-name")
101
+
102
+
103
+ @pytest.fixture(scope="function")
104
+ def perf_metrics_db(crater_path):
105
+ return sqlite3.connect(f"{crater_path}/metrics.sqlite")
@@ -3,7 +3,6 @@ import xml.etree.ElementTree
3
3
  from dataclasses import dataclass
4
4
  from enum import Enum
5
5
 
6
- import pyarrow as pa
7
6
  import requests
8
7
 
9
8
 
@@ -170,11 +169,6 @@ class NotSupportedCommand(NotSupported):
170
169
  table: str
171
170
 
172
171
 
173
- @dataclass
174
- class NotSupportedType(NotSupported):
175
- field: pa.Field
176
-
177
-
178
172
  @dataclass
179
173
  class NotSupportedVersion(NotSupported):
180
174
  err_msg: str
@@ -0,0 +1,42 @@
1
+ """Version-dependent features."""
2
+
3
+ import logging
4
+
5
+ from .errors import NotSupportedVersion
6
+
7
+ log = logging.getLogger()
8
+
9
+
10
+ class Features:
11
+ """VAST database features - check if server is already support a feature."""
12
+
13
+ def __init__(self, vast_version):
14
+ """Save the server version."""
15
+ self.vast_version = vast_version
16
+
17
+ self.check_imports_table = self._check(
18
+ "Imported objects' table feature requires 5.2+ VAST release",
19
+ vast_version >= (5, 2))
20
+
21
+ self.check_return_row_ids = self._check(
22
+ "Returning row IDs requires 5.1+ VAST release",
23
+ vast_version >= (5, 1))
24
+
25
+ self.check_enforce_semisorted_projection = self._check(
26
+ "Semi-sorted projection enforcement requires 5.1+ VAST release",
27
+ vast_version >= (5, 1))
28
+
29
+ self.check_external_row_ids_allocation = self._check(
30
+ "External row IDs allocation requires 5.1+ VAST release",
31
+ vast_version >= (5, 1))
32
+
33
+ def _check(self, msg, supported):
34
+ log.debug("%s (current version is %s): supported=%s", msg, self.vast_version, supported)
35
+ if not supported:
36
+ def fail():
37
+ raise NotSupportedVersion(msg, self.vast_version)
38
+ return fail
39
+
40
+ def noop():
41
+ pass
42
+ return noop
@@ -10,7 +10,7 @@ from typing import TYPE_CHECKING, Iterable, List, Optional
10
10
 
11
11
  import pyarrow as pa
12
12
 
13
- from . import bucket, errors, schema, table, util
13
+ from . import bucket, errors, schema, table
14
14
 
15
15
  if TYPE_CHECKING:
16
16
  from .table import Table
@@ -86,7 +86,6 @@ class Schema:
86
86
  if use_external_row_ids_allocation:
87
87
  self.tx._rpc.features.check_external_row_ids_allocation()
88
88
 
89
- util.check_supported_types(columns)
90
89
  self.tx._rpc.api.create_table(self.bucket.name, self.name, table_name, columns, txid=self.tx.txid,
91
90
  use_external_row_ids_allocation=use_external_row_ids_allocation)
92
91
  log.info("Created table: %s", table_name)