deltacat 2.0.0b11__py3-none-any.whl → 2.0.0b12__py3-none-any.whl

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 (194) hide show
  1. deltacat/__init__.py +78 -3
  2. deltacat/api.py +122 -67
  3. deltacat/aws/constants.py +0 -23
  4. deltacat/aws/s3u.py +4 -631
  5. deltacat/benchmarking/conftest.py +0 -18
  6. deltacat/catalog/__init__.py +2 -0
  7. deltacat/catalog/delegate.py +445 -63
  8. deltacat/catalog/interface.py +188 -62
  9. deltacat/catalog/main/impl.py +2417 -271
  10. deltacat/catalog/model/catalog.py +49 -10
  11. deltacat/catalog/model/properties.py +38 -0
  12. deltacat/compute/compactor/compaction_session.py +97 -75
  13. deltacat/compute/compactor/model/compact_partition_params.py +75 -30
  14. deltacat/compute/compactor/model/compaction_session_audit_info.py +17 -0
  15. deltacat/compute/compactor/model/round_completion_info.py +16 -6
  16. deltacat/compute/compactor/repartition_session.py +8 -21
  17. deltacat/compute/compactor/steps/hash_bucket.py +5 -5
  18. deltacat/compute/compactor/steps/materialize.py +9 -7
  19. deltacat/compute/compactor/steps/repartition.py +12 -11
  20. deltacat/compute/compactor/utils/io.py +6 -5
  21. deltacat/compute/compactor/utils/round_completion_reader.py +117 -0
  22. deltacat/compute/compactor/utils/system_columns.py +3 -1
  23. deltacat/compute/compactor_v2/compaction_session.py +17 -14
  24. deltacat/compute/compactor_v2/constants.py +30 -1
  25. deltacat/compute/compactor_v2/model/evaluate_compaction_result.py +0 -1
  26. deltacat/compute/compactor_v2/model/hash_bucket_input.py +9 -3
  27. deltacat/compute/compactor_v2/model/merge_file_group.py +5 -2
  28. deltacat/compute/compactor_v2/model/merge_input.py +33 -8
  29. deltacat/compute/compactor_v2/private/compaction_utils.py +167 -68
  30. deltacat/compute/compactor_v2/steps/hash_bucket.py +5 -2
  31. deltacat/compute/compactor_v2/steps/merge.py +267 -55
  32. deltacat/compute/compactor_v2/utils/content_type_params.py +34 -6
  33. deltacat/compute/compactor_v2/utils/dedupe.py +1 -1
  34. deltacat/compute/compactor_v2/utils/delta.py +5 -3
  35. deltacat/compute/compactor_v2/utils/io.py +11 -4
  36. deltacat/compute/compactor_v2/utils/merge.py +15 -2
  37. deltacat/compute/compactor_v2/utils/primary_key_index.py +28 -4
  38. deltacat/compute/compactor_v2/utils/task_options.py +45 -33
  39. deltacat/compute/converter/converter_session.py +145 -32
  40. deltacat/compute/converter/model/convert_input.py +26 -19
  41. deltacat/compute/converter/model/convert_input_files.py +33 -16
  42. deltacat/compute/converter/model/convert_result.py +35 -16
  43. deltacat/compute/converter/model/converter_session_params.py +24 -21
  44. deltacat/compute/converter/pyiceberg/catalog.py +21 -18
  45. deltacat/compute/converter/pyiceberg/overrides.py +18 -9
  46. deltacat/compute/converter/pyiceberg/update_snapshot_overrides.py +148 -100
  47. deltacat/compute/converter/steps/convert.py +157 -50
  48. deltacat/compute/converter/steps/dedupe.py +24 -11
  49. deltacat/compute/converter/utils/convert_task_options.py +27 -12
  50. deltacat/compute/converter/utils/converter_session_utils.py +126 -60
  51. deltacat/compute/converter/utils/iceberg_columns.py +8 -8
  52. deltacat/compute/converter/utils/io.py +101 -12
  53. deltacat/compute/converter/utils/s3u.py +33 -27
  54. deltacat/compute/janitor.py +205 -0
  55. deltacat/compute/jobs/client.py +19 -8
  56. deltacat/compute/resource_estimation/delta.py +38 -6
  57. deltacat/compute/resource_estimation/model.py +8 -0
  58. deltacat/constants.py +44 -0
  59. deltacat/docs/autogen/schema/__init__.py +0 -0
  60. deltacat/docs/autogen/schema/inference/__init__.py +0 -0
  61. deltacat/docs/autogen/schema/inference/generate_type_mappings.py +687 -0
  62. deltacat/docs/autogen/schema/inference/parse_json_type_mappings.py +673 -0
  63. deltacat/examples/compactor/__init__.py +0 -0
  64. deltacat/examples/compactor/aws/__init__.py +1 -0
  65. deltacat/examples/compactor/bootstrap.py +863 -0
  66. deltacat/examples/compactor/compactor.py +373 -0
  67. deltacat/examples/compactor/explorer.py +473 -0
  68. deltacat/examples/compactor/gcp/__init__.py +1 -0
  69. deltacat/examples/compactor/job_runner.py +439 -0
  70. deltacat/examples/compactor/utils/__init__.py +1 -0
  71. deltacat/examples/compactor/utils/common.py +261 -0
  72. deltacat/examples/experimental/iceberg/converter/__init__.py +0 -0
  73. deltacat/examples/experimental/iceberg/converter/beam/__init__.py +0 -0
  74. deltacat/examples/experimental/iceberg/converter/beam/app.py +226 -0
  75. deltacat/examples/experimental/iceberg/converter/beam/main.py +133 -0
  76. deltacat/examples/experimental/iceberg/converter/beam/test_workflow.py +113 -0
  77. deltacat/examples/experimental/iceberg/converter/beam/utils/__init__.py +3 -0
  78. deltacat/examples/experimental/iceberg/converter/beam/utils/common.py +174 -0
  79. deltacat/examples/experimental/iceberg/converter/beam/utils/spark.py +263 -0
  80. deltacat/exceptions.py +66 -4
  81. deltacat/experimental/catalog/iceberg/impl.py +2 -2
  82. deltacat/experimental/compatibility/__init__.py +0 -0
  83. deltacat/experimental/compatibility/backfill_locator_to_id_mappings.py +201 -0
  84. deltacat/experimental/converter_agent/__init__.py +0 -0
  85. deltacat/experimental/converter_agent/beam/__init__.py +0 -0
  86. deltacat/experimental/converter_agent/beam/managed.py +173 -0
  87. deltacat/experimental/converter_agent/table_monitor.py +479 -0
  88. deltacat/experimental/storage/iceberg/iceberg_scan_planner.py +105 -4
  89. deltacat/experimental/storage/iceberg/impl.py +5 -3
  90. deltacat/experimental/storage/iceberg/model.py +7 -3
  91. deltacat/experimental/storage/iceberg/visitor.py +119 -0
  92. deltacat/experimental/storage/rivulet/dataset.py +0 -3
  93. deltacat/experimental/storage/rivulet/metastore/delta.py +0 -2
  94. deltacat/experimental/storage/rivulet/reader/dataset_metastore.py +3 -2
  95. deltacat/io/datasource/deltacat_datasource.py +0 -1
  96. deltacat/storage/__init__.py +20 -2
  97. deltacat/storage/interface.py +54 -32
  98. deltacat/storage/main/impl.py +1494 -541
  99. deltacat/storage/model/delta.py +27 -3
  100. deltacat/storage/model/locator.py +6 -12
  101. deltacat/storage/model/manifest.py +182 -6
  102. deltacat/storage/model/metafile.py +151 -78
  103. deltacat/storage/model/namespace.py +8 -1
  104. deltacat/storage/model/partition.py +117 -42
  105. deltacat/storage/model/schema.py +2427 -159
  106. deltacat/storage/model/sort_key.py +40 -0
  107. deltacat/storage/model/stream.py +9 -2
  108. deltacat/storage/model/table.py +12 -1
  109. deltacat/storage/model/table_version.py +11 -0
  110. deltacat/storage/model/transaction.py +1184 -208
  111. deltacat/storage/model/transform.py +81 -2
  112. deltacat/storage/model/types.py +48 -26
  113. deltacat/tests/_io/test_cloudpickle_bug_fix.py +8 -4
  114. deltacat/tests/aws/test_s3u.py +2 -31
  115. deltacat/tests/catalog/main/test_catalog_impl_table_operations.py +1606 -70
  116. deltacat/tests/catalog/test_catalogs.py +54 -11
  117. deltacat/tests/catalog/test_default_catalog_impl.py +12152 -71
  118. deltacat/tests/compute/compact_partition_test_cases.py +35 -8
  119. deltacat/tests/compute/compactor/steps/test_repartition.py +12 -12
  120. deltacat/tests/compute/compactor/utils/test_io.py +124 -120
  121. deltacat/tests/compute/compactor/utils/test_round_completion_reader.py +254 -0
  122. deltacat/tests/compute/compactor_v2/test_compaction_session.py +423 -312
  123. deltacat/tests/compute/compactor_v2/utils/test_content_type_params.py +266 -0
  124. deltacat/tests/compute/compactor_v2/utils/test_primary_key_index.py +45 -0
  125. deltacat/tests/compute/compactor_v2/utils/test_task_options.py +270 -1
  126. deltacat/tests/compute/conftest.py +8 -44
  127. deltacat/tests/compute/converter/test_convert_session.py +675 -490
  128. deltacat/tests/compute/converter/utils.py +15 -6
  129. deltacat/tests/compute/resource_estimation/test_delta.py +145 -79
  130. deltacat/tests/compute/test_compact_partition_incremental.py +103 -70
  131. deltacat/tests/compute/test_compact_partition_multiple_rounds.py +89 -66
  132. deltacat/tests/compute/test_compact_partition_params.py +13 -8
  133. deltacat/tests/compute/test_compact_partition_rebase.py +77 -62
  134. deltacat/tests/compute/test_compact_partition_rebase_then_incremental.py +263 -193
  135. deltacat/tests/compute/test_janitor.py +236 -0
  136. deltacat/tests/compute/test_util_common.py +716 -43
  137. deltacat/tests/compute/test_util_constant.py +0 -1
  138. deltacat/tests/{storage/conftest.py → conftest.py} +1 -1
  139. deltacat/tests/experimental/__init__.py +1 -0
  140. deltacat/tests/experimental/compatibility/__init__.py +1 -0
  141. deltacat/tests/experimental/compatibility/test_backfill_locator_to_id_mappings.py +582 -0
  142. deltacat/tests/storage/main/test_main_storage.py +6900 -95
  143. deltacat/tests/storage/model/test_metafile_io.py +78 -173
  144. deltacat/tests/storage/model/test_partition_scheme.py +85 -0
  145. deltacat/tests/storage/model/test_schema.py +171 -0
  146. deltacat/tests/storage/model/test_schema_update.py +1925 -0
  147. deltacat/tests/storage/model/test_sort_scheme.py +90 -0
  148. deltacat/tests/storage/model/test_transaction.py +393 -48
  149. deltacat/tests/storage/model/test_transaction_history.py +886 -0
  150. deltacat/tests/test_deltacat_api.py +988 -4
  151. deltacat/tests/test_exceptions.py +9 -5
  152. deltacat/tests/test_utils/pyarrow.py +52 -21
  153. deltacat/tests/test_utils/storage.py +23 -34
  154. deltacat/tests/types/__init__.py +0 -0
  155. deltacat/tests/types/test_tables.py +104 -0
  156. deltacat/tests/utils/exceptions.py +22 -0
  157. deltacat/tests/utils/main_deltacat_storage_mock.py +31 -0
  158. deltacat/tests/utils/ray_utils/test_dataset.py +123 -5
  159. deltacat/tests/utils/test_daft.py +121 -31
  160. deltacat/tests/utils/test_numpy.py +1193 -0
  161. deltacat/tests/utils/test_pandas.py +1106 -0
  162. deltacat/tests/utils/test_polars.py +1040 -0
  163. deltacat/tests/utils/test_pyarrow.py +1370 -89
  164. deltacat/types/media.py +221 -11
  165. deltacat/types/tables.py +2329 -59
  166. deltacat/utils/arguments.py +33 -1
  167. deltacat/utils/daft.py +411 -150
  168. deltacat/utils/filesystem.py +100 -0
  169. deltacat/utils/metafile_locator.py +2 -1
  170. deltacat/utils/numpy.py +118 -26
  171. deltacat/utils/pandas.py +577 -48
  172. deltacat/utils/polars.py +658 -27
  173. deltacat/utils/pyarrow.py +1258 -213
  174. deltacat/utils/ray_utils/dataset.py +101 -10
  175. deltacat/utils/reader_compatibility_mapping.py +3083 -0
  176. deltacat/utils/url.py +56 -15
  177. deltacat-2.0.0b12.dist-info/METADATA +1163 -0
  178. {deltacat-2.0.0b11.dist-info → deltacat-2.0.0b12.dist-info}/RECORD +183 -145
  179. {deltacat-2.0.0b11.dist-info → deltacat-2.0.0b12.dist-info}/WHEEL +1 -1
  180. deltacat/compute/compactor/utils/round_completion_file.py +0 -97
  181. deltacat/compute/merge_on_read/__init__.py +0 -4
  182. deltacat/compute/merge_on_read/daft.py +0 -40
  183. deltacat/compute/merge_on_read/model/merge_on_read_params.py +0 -66
  184. deltacat/compute/merge_on_read/utils/delta.py +0 -42
  185. deltacat/tests/compute/compactor/utils/test_round_completion_file.py +0 -231
  186. deltacat/tests/compute/test_util_create_table_deltas_repo.py +0 -388
  187. deltacat/tests/local_deltacat_storage/__init__.py +0 -1236
  188. deltacat/tests/local_deltacat_storage/exceptions.py +0 -10
  189. deltacat/utils/s3fs.py +0 -21
  190. deltacat-2.0.0b11.dist-info/METADATA +0 -67
  191. /deltacat/{compute/merge_on_read/model → docs}/__init__.py +0 -0
  192. /deltacat/{compute/merge_on_read/utils → docs/autogen}/__init__.py +0 -0
  193. {deltacat-2.0.0b11.dist-info → deltacat-2.0.0b12.dist-info/licenses}/LICENSE +0 -0
  194. {deltacat-2.0.0b11.dist-info → deltacat-2.0.0b12.dist-info}/top_level.txt +0 -0
deltacat/types/media.py CHANGED
@@ -1,11 +1,14 @@
1
1
  from enum import Enum
2
- from typing import Set
2
+ from typing import Set, Dict
3
3
 
4
4
 
5
5
  class ContentType(str, Enum):
6
6
  """
7
- Enumeration used to resolve the entity-body Media Type (formerly known as
8
- MIME type) in an HTTP request.
7
+ Enumeration used to resolve a file's entity-body Media Type (formerly known
8
+ as MIME type). All content types here are writeable by at least one
9
+ :class:`deltacat.types.media.DatasetType`. The Media Type is used as the
10
+ content type of each :class:`deltacat.storage.model.manifest.ManifestEntry`
11
+ written by that dataset type.
9
12
 
10
13
  https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.17
11
14
 
@@ -16,16 +19,10 @@ class ContentType(str, Enum):
16
19
  AVRO = "application/avro"
17
20
  BINARY = "application/octet-stream"
18
21
  CSV = "text/csv"
19
- HDF = "application/x-hdf"
20
- HTML = "text/html"
21
22
  JSON = "application/json"
22
- TEXT = "text/plain"
23
- WEBDATASET = "application/x-web-dataset"
24
- XML = "text/xml"
25
23
 
26
24
  # unregistered types
27
25
  FEATHER = "application/feather"
28
- ION = "application/x-amzn-ion"
29
26
  ORC = "application/orc"
30
27
  PARQUET = "application/parquet"
31
28
  PSV = "text/psv"
@@ -37,7 +34,7 @@ class ContentEncoding(str, Enum):
37
34
  """
38
35
  Enumeration used as a modifier for :class:`deltacat.types.media.ContentType`
39
36
  to indicate that additional encodings have been applied to the entity-body
40
- Media Type in an HTTP request.
37
+ Media Type.
41
38
 
42
39
  https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.11
43
40
 
@@ -55,6 +52,46 @@ class ContentEncoding(str, Enum):
55
52
  SNAPPY = "snappy"
56
53
 
57
54
 
55
+ # Map of file extensions to content types
56
+ EXT_TO_CONTENT_TYPE: Dict[str, ContentType] = {
57
+ ".parquet": ContentType.PARQUET,
58
+ ".pq": ContentType.PARQUET,
59
+ ".csv": ContentType.CSV,
60
+ ".tsv": ContentType.TSV,
61
+ ".psv": ContentType.PSV,
62
+ ".json": ContentType.JSON,
63
+ ".feather": ContentType.FEATHER,
64
+ ".avro": ContentType.AVRO,
65
+ ".orc": ContentType.ORC,
66
+ }
67
+
68
+ # Inverse map of content types to file extensions
69
+ CONTENT_TYPE_TO_EXT: Dict[ContentType, str] = {
70
+ v: k for k, v in EXT_TO_CONTENT_TYPE.items()
71
+ }
72
+
73
+ # Map of file extensions to content encodings
74
+ EXT_TO_CONTENT_ENCODING: Dict[str, ContentEncoding] = {
75
+ ".gz": ContentEncoding.GZIP,
76
+ ".bz2": ContentEncoding.BZIP2,
77
+ ".zst": ContentEncoding.ZSTD,
78
+ ".sz": ContentEncoding.SNAPPY,
79
+ ".zz": ContentEncoding.DEFLATE,
80
+ ".zip": ContentEncoding.DEFLATE,
81
+ }
82
+
83
+ # Inverse map of content encodings to file extensions
84
+ CONTENT_ENCODING_TO_EXT: Dict[ContentEncoding, str] = {
85
+ v: k for k, v in EXT_TO_CONTENT_ENCODING.items()
86
+ }
87
+
88
+ SCHEMA_CONTENT_TYPES: Set[str] = {
89
+ ContentType.PARQUET.value,
90
+ ContentType.ORC.value,
91
+ ContentType.FEATHER.value,
92
+ ContentType.AVRO.value,
93
+ }
94
+
58
95
  DELIMITED_TEXT_CONTENT_TYPES: Set[str] = {
59
96
  ContentType.UNESCAPED_TSV.value,
60
97
  ContentType.TSV.value,
@@ -119,6 +156,158 @@ class DatasetType(str, Enum):
119
156
  DatasetType.PYARROW_PARQUET,
120
157
  }
121
158
 
159
+ def readable_content_types(self) -> Set[ContentType]:
160
+ # if this is DAFT then it can read PARQUET, JSON, and CSV
161
+ if self == DatasetType.DAFT:
162
+ return {
163
+ ContentType.PARQUET,
164
+ ContentType.JSON,
165
+ ContentType.CSV,
166
+ ContentType.PSV,
167
+ ContentType.TSV,
168
+ ContentType.UNESCAPED_TSV,
169
+ }
170
+ if self == DatasetType.RAY_DATASET:
171
+ return {
172
+ ContentType.CSV,
173
+ ContentType.TSV,
174
+ ContentType.UNESCAPED_TSV,
175
+ ContentType.PSV,
176
+ ContentType.PARQUET,
177
+ ContentType.JSON,
178
+ ContentType.AVRO,
179
+ ContentType.ORC,
180
+ ContentType.FEATHER,
181
+ }
182
+ if self == DatasetType.PYARROW:
183
+ return {
184
+ ContentType.CSV,
185
+ ContentType.TSV,
186
+ ContentType.UNESCAPED_TSV,
187
+ ContentType.PSV,
188
+ ContentType.PARQUET,
189
+ ContentType.FEATHER,
190
+ ContentType.JSON,
191
+ ContentType.AVRO,
192
+ ContentType.ORC,
193
+ }
194
+ if self == DatasetType.PANDAS:
195
+ return {
196
+ ContentType.CSV,
197
+ ContentType.TSV,
198
+ ContentType.UNESCAPED_TSV,
199
+ ContentType.PSV,
200
+ ContentType.PARQUET,
201
+ ContentType.FEATHER,
202
+ ContentType.JSON,
203
+ ContentType.AVRO,
204
+ ContentType.ORC,
205
+ }
206
+ if self == DatasetType.POLARS:
207
+ return {
208
+ ContentType.CSV,
209
+ ContentType.TSV,
210
+ ContentType.UNESCAPED_TSV,
211
+ ContentType.PSV,
212
+ ContentType.PARQUET,
213
+ ContentType.FEATHER,
214
+ ContentType.JSON,
215
+ ContentType.AVRO,
216
+ ContentType.ORC,
217
+ }
218
+ if self == DatasetType.NUMPY:
219
+ return {
220
+ ContentType.CSV,
221
+ ContentType.TSV,
222
+ ContentType.UNESCAPED_TSV,
223
+ ContentType.PSV,
224
+ ContentType.PARQUET,
225
+ ContentType.FEATHER,
226
+ ContentType.JSON,
227
+ ContentType.AVRO,
228
+ ContentType.ORC,
229
+ }
230
+ if self == DatasetType.PYARROW_PARQUET:
231
+ return {ContentType.PARQUET}
232
+ raise ValueError(f"No readable content types for {self}")
233
+
234
+ def writable_content_types(self) -> Set[ContentType]:
235
+ if self == DatasetType.PYARROW:
236
+ return {
237
+ ContentType.CSV,
238
+ ContentType.TSV,
239
+ ContentType.UNESCAPED_TSV,
240
+ ContentType.PSV,
241
+ ContentType.PARQUET,
242
+ ContentType.FEATHER,
243
+ ContentType.JSON,
244
+ ContentType.AVRO,
245
+ ContentType.ORC,
246
+ }
247
+ if self == DatasetType.PANDAS:
248
+ return {
249
+ ContentType.CSV,
250
+ ContentType.TSV,
251
+ ContentType.UNESCAPED_TSV,
252
+ ContentType.PSV,
253
+ ContentType.PARQUET,
254
+ ContentType.FEATHER,
255
+ ContentType.JSON,
256
+ ContentType.AVRO,
257
+ ContentType.ORC,
258
+ }
259
+ if self == DatasetType.POLARS:
260
+ return {
261
+ ContentType.CSV,
262
+ ContentType.TSV,
263
+ ContentType.UNESCAPED_TSV,
264
+ ContentType.PSV,
265
+ ContentType.PARQUET,
266
+ ContentType.FEATHER,
267
+ ContentType.JSON,
268
+ ContentType.AVRO,
269
+ ContentType.ORC,
270
+ }
271
+ if self == DatasetType.RAY_DATASET:
272
+ return {
273
+ ContentType.CSV,
274
+ ContentType.TSV,
275
+ ContentType.UNESCAPED_TSV,
276
+ ContentType.PSV,
277
+ ContentType.PARQUET,
278
+ ContentType.JSON,
279
+ }
280
+ if self == DatasetType.DAFT:
281
+ return {
282
+ ContentType.CSV,
283
+ ContentType.TSV,
284
+ ContentType.UNESCAPED_TSV,
285
+ ContentType.PSV,
286
+ ContentType.PARQUET,
287
+ ContentType.JSON,
288
+ }
289
+ if self == DatasetType.NUMPY:
290
+ return {
291
+ ContentType.CSV,
292
+ ContentType.TSV,
293
+ ContentType.UNESCAPED_TSV,
294
+ ContentType.PSV,
295
+ ContentType.PARQUET,
296
+ ContentType.FEATHER,
297
+ ContentType.JSON,
298
+ ContentType.AVRO,
299
+ ContentType.ORC,
300
+ }
301
+ if self == DatasetType.PYARROW_PARQUET:
302
+ return {}
303
+ raise ValueError(f"No writable content types for {self}")
304
+
305
+ def can_read(self, content_type: ContentType) -> bool:
306
+ return content_type in self.readable_content_types()
307
+
308
+ def can_write(self, content_type: ContentType) -> bool:
309
+ return content_type in self.writable_content_types()
310
+
122
311
 
123
312
  # deprecated by DatasetType - populated dynamically for backwards compatibility
124
313
  TableType = Enum(
@@ -140,6 +329,26 @@ class StorageType(str, Enum):
140
329
  DISTRIBUTED = "distributed"
141
330
 
142
331
 
332
+ DATASET_TYPE_TO_SUPPORTED_READ_CONTENT_TYPES: Dict[DatasetType, Set[str]] = {
333
+ DatasetType.DAFT: {
334
+ ContentType.CSV,
335
+ ContentType.PARQUET,
336
+ ContentType.JSON,
337
+ },
338
+ DatasetType.RAY_DATASET: {
339
+ ContentType.CSV,
340
+ ContentType.TSV,
341
+ ContentType.UNESCAPED_TSV,
342
+ ContentType.PSV,
343
+ ContentType.PARQUET,
344
+ ContentType.JSON,
345
+ ContentType.AVRO,
346
+ ContentType.ORC,
347
+ ContentType.FEATHER,
348
+ },
349
+ }
350
+
351
+
143
352
  class DatastoreType(str, Enum):
144
353
  """
145
354
  Enumeration used to identify the type of reader required to connect to and
@@ -151,7 +360,8 @@ class DatastoreType(str, Enum):
151
360
  :class:`deltacat.types.media.ContentType` is to resolve a file's MIME type,
152
361
  and may be used together with datastores that support storing different
153
362
  file types to describe the specific file type read/written from/to that
154
- datastore (e.g., Iceberg, Hudi, Delta Lake, Audio, Images, Video, etc.)
363
+ datastore (e.g., DeltaCAT, Iceberg, Hudi, Delta Lake, Audio, Images, Video,
364
+ etc.)
155
365
  """
156
366
 
157
367
  # DeltaCAT Catalog Datasets