acryl-datahub 1.1.1rc3__py3-none-any.whl → 1.2.0__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.

Potentially problematic release.


This version of acryl-datahub might be problematic. Click here for more details.

Files changed (226) hide show
  1. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/METADATA +2559 -2532
  2. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/RECORD +226 -190
  3. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/WHEEL +1 -1
  4. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/entry_points.txt +2 -0
  5. datahub/_version.py +1 -1
  6. datahub/api/entities/dataset/dataset.py +2 -1
  7. datahub/api/entities/external/__init__.py +0 -0
  8. datahub/api/entities/external/external_entities.py +239 -0
  9. datahub/api/entities/external/external_tag.py +145 -0
  10. datahub/api/entities/external/lake_formation_external_entites.py +161 -0
  11. datahub/api/entities/external/restricted_text.py +247 -0
  12. datahub/api/entities/external/unity_catalog_external_entites.py +173 -0
  13. datahub/cli/check_cli.py +88 -7
  14. datahub/cli/cli_utils.py +63 -0
  15. datahub/cli/container_cli.py +5 -0
  16. datahub/cli/delete_cli.py +124 -27
  17. datahub/cli/docker_check.py +107 -12
  18. datahub/cli/docker_cli.py +149 -227
  19. datahub/cli/exists_cli.py +0 -2
  20. datahub/cli/get_cli.py +0 -2
  21. datahub/cli/iceberg_cli.py +5 -0
  22. datahub/cli/ingest_cli.py +12 -16
  23. datahub/cli/migrate.py +2 -0
  24. datahub/cli/put_cli.py +1 -4
  25. datahub/cli/quickstart_versioning.py +50 -7
  26. datahub/cli/specific/assertions_cli.py +0 -4
  27. datahub/cli/specific/datacontract_cli.py +0 -3
  28. datahub/cli/specific/dataproduct_cli.py +0 -11
  29. datahub/cli/specific/dataset_cli.py +1 -8
  30. datahub/cli/specific/forms_cli.py +0 -4
  31. datahub/cli/specific/group_cli.py +0 -2
  32. datahub/cli/specific/structuredproperties_cli.py +1 -4
  33. datahub/cli/specific/user_cli.py +0 -2
  34. datahub/cli/state_cli.py +0 -2
  35. datahub/cli/timeline_cli.py +0 -2
  36. datahub/emitter/response_helper.py +86 -1
  37. datahub/emitter/rest_emitter.py +71 -13
  38. datahub/entrypoints.py +4 -3
  39. datahub/ingestion/api/decorators.py +15 -3
  40. datahub/ingestion/api/report.py +332 -3
  41. datahub/ingestion/api/sink.py +3 -0
  42. datahub/ingestion/api/source.py +48 -44
  43. datahub/ingestion/autogenerated/__init__.py +0 -0
  44. datahub/ingestion/autogenerated/capability_summary.json +3449 -0
  45. datahub/ingestion/autogenerated/lineage.json +401 -0
  46. datahub/ingestion/autogenerated/lineage_helper.py +177 -0
  47. datahub/ingestion/extractor/schema_util.py +13 -4
  48. datahub/ingestion/glossary/classification_mixin.py +5 -0
  49. datahub/ingestion/graph/client.py +100 -15
  50. datahub/ingestion/graph/config.py +1 -0
  51. datahub/ingestion/reporting/datahub_ingestion_run_summary_provider.py +20 -10
  52. datahub/ingestion/run/pipeline.py +54 -2
  53. datahub/ingestion/sink/datahub_rest.py +13 -0
  54. datahub/ingestion/source/abs/source.py +1 -1
  55. datahub/ingestion/source/aws/aws_common.py +4 -0
  56. datahub/ingestion/source/aws/glue.py +489 -244
  57. datahub/ingestion/source/aws/tag_entities.py +292 -0
  58. datahub/ingestion/source/azure/azure_common.py +2 -2
  59. datahub/ingestion/source/bigquery_v2/bigquery.py +50 -23
  60. datahub/ingestion/source/bigquery_v2/bigquery_config.py +1 -1
  61. datahub/ingestion/source/bigquery_v2/bigquery_queries.py +1 -0
  62. datahub/ingestion/source/bigquery_v2/bigquery_schema_gen.py +2 -0
  63. datahub/ingestion/source/bigquery_v2/common.py +1 -1
  64. datahub/ingestion/source/bigquery_v2/profiler.py +4 -2
  65. datahub/ingestion/source/bigquery_v2/queries.py +3 -3
  66. datahub/ingestion/source/cassandra/cassandra.py +1 -1
  67. datahub/ingestion/source/cassandra/cassandra_profiling.py +6 -5
  68. datahub/ingestion/source/common/subtypes.py +45 -0
  69. datahub/ingestion/source/data_lake_common/object_store.py +115 -27
  70. datahub/ingestion/source/data_lake_common/path_spec.py +10 -21
  71. datahub/ingestion/source/datahub/config.py +11 -0
  72. datahub/ingestion/source/datahub/datahub_database_reader.py +187 -35
  73. datahub/ingestion/source/datahub/datahub_source.py +1 -1
  74. datahub/ingestion/source/dbt/dbt_cloud.py +10 -2
  75. datahub/ingestion/source/dbt/dbt_common.py +6 -2
  76. datahub/ingestion/source/dbt/dbt_core.py +3 -0
  77. datahub/ingestion/source/debug/__init__.py +0 -0
  78. datahub/ingestion/source/debug/datahub_debug.py +300 -0
  79. datahub/ingestion/source/dremio/dremio_api.py +114 -73
  80. datahub/ingestion/source/dremio/dremio_config.py +2 -0
  81. datahub/ingestion/source/dremio/dremio_reporting.py +23 -2
  82. datahub/ingestion/source/dremio/dremio_source.py +94 -81
  83. datahub/ingestion/source/dremio/dremio_sql_queries.py +82 -21
  84. datahub/ingestion/source/file.py +3 -0
  85. datahub/ingestion/source/fivetran/fivetran.py +34 -26
  86. datahub/ingestion/source/gcs/gcs_source.py +13 -2
  87. datahub/ingestion/source/ge_data_profiler.py +76 -28
  88. datahub/ingestion/source/ge_profiling_config.py +11 -0
  89. datahub/ingestion/source/hex/api.py +26 -1
  90. datahub/ingestion/source/iceberg/iceberg.py +3 -1
  91. datahub/ingestion/source/identity/azure_ad.py +1 -1
  92. datahub/ingestion/source/identity/okta.py +1 -14
  93. datahub/ingestion/source/kafka/kafka.py +16 -0
  94. datahub/ingestion/source/kafka_connect/sink_connectors.py +156 -47
  95. datahub/ingestion/source/kafka_connect/source_connectors.py +59 -4
  96. datahub/ingestion/source/looker/looker_source.py +1 -0
  97. datahub/ingestion/source/mlflow.py +11 -1
  98. datahub/ingestion/source/mock_data/__init__.py +0 -0
  99. datahub/ingestion/source/mock_data/datahub_mock_data.py +472 -0
  100. datahub/ingestion/source/mock_data/datahub_mock_data_report.py +12 -0
  101. datahub/ingestion/source/mock_data/table_naming_helper.py +91 -0
  102. datahub/ingestion/source/nifi.py +1 -1
  103. datahub/ingestion/source/openapi.py +12 -0
  104. datahub/ingestion/source/openapi_parser.py +56 -37
  105. datahub/ingestion/source/powerbi/powerbi.py +1 -5
  106. datahub/ingestion/source/powerbi/rest_api_wrapper/powerbi_api.py +0 -1
  107. datahub/ingestion/source/powerbi_report_server/report_server.py +0 -23
  108. datahub/ingestion/source/preset.py +2 -2
  109. datahub/ingestion/source/qlik_sense/qlik_sense.py +1 -0
  110. datahub/ingestion/source/redshift/redshift.py +21 -1
  111. datahub/ingestion/source/redshift/usage.py +4 -3
  112. datahub/ingestion/source/s3/report.py +4 -2
  113. datahub/ingestion/source/s3/source.py +367 -115
  114. datahub/ingestion/source/sac/sac.py +3 -1
  115. datahub/ingestion/source/salesforce.py +6 -3
  116. datahub/ingestion/source/sigma/sigma.py +7 -1
  117. datahub/ingestion/source/slack/slack.py +2 -1
  118. datahub/ingestion/source/snowflake/snowflake_config.py +43 -7
  119. datahub/ingestion/source/snowflake/snowflake_queries.py +348 -82
  120. datahub/ingestion/source/snowflake/snowflake_summary.py +5 -0
  121. datahub/ingestion/source/snowflake/snowflake_usage_v2.py +8 -2
  122. datahub/ingestion/source/snowflake/snowflake_utils.py +2 -7
  123. datahub/ingestion/source/snowflake/snowflake_v2.py +33 -8
  124. datahub/ingestion/source/snowflake/stored_proc_lineage.py +143 -0
  125. datahub/ingestion/source/sql/athena.py +119 -11
  126. datahub/ingestion/source/sql/athena_properties_extractor.py +777 -0
  127. datahub/ingestion/source/sql/clickhouse.py +3 -1
  128. datahub/ingestion/source/sql/cockroachdb.py +0 -1
  129. datahub/ingestion/source/sql/hana.py +3 -1
  130. datahub/ingestion/source/sql/hive_metastore.py +3 -11
  131. datahub/ingestion/source/sql/mariadb.py +0 -1
  132. datahub/ingestion/source/sql/mssql/source.py +239 -34
  133. datahub/ingestion/source/sql/mysql.py +0 -1
  134. datahub/ingestion/source/sql/oracle.py +1 -1
  135. datahub/ingestion/source/sql/postgres.py +0 -1
  136. datahub/ingestion/source/sql/sql_common.py +121 -34
  137. datahub/ingestion/source/sql/sql_generic_profiler.py +2 -1
  138. datahub/ingestion/source/sql/teradata.py +997 -235
  139. datahub/ingestion/source/sql/vertica.py +10 -6
  140. datahub/ingestion/source/sql_queries.py +2 -2
  141. datahub/ingestion/source/state/stateful_ingestion_base.py +1 -1
  142. datahub/ingestion/source/superset.py +58 -3
  143. datahub/ingestion/source/tableau/tableau.py +58 -37
  144. datahub/ingestion/source/tableau/tableau_common.py +4 -2
  145. datahub/ingestion/source/tableau/tableau_constant.py +0 -4
  146. datahub/ingestion/source/unity/config.py +5 -0
  147. datahub/ingestion/source/unity/proxy.py +118 -0
  148. datahub/ingestion/source/unity/source.py +195 -17
  149. datahub/ingestion/source/unity/tag_entities.py +295 -0
  150. datahub/ingestion/source/usage/clickhouse_usage.py +4 -1
  151. datahub/ingestion/source/usage/starburst_trino_usage.py +3 -0
  152. datahub/ingestion/transformer/add_dataset_ownership.py +18 -2
  153. datahub/integrations/assertion/snowflake/compiler.py +4 -3
  154. datahub/metadata/_internal_schema_classes.py +1446 -559
  155. datahub/metadata/_urns/urn_defs.py +1721 -1553
  156. datahub/metadata/com/linkedin/pegasus2avro/application/__init__.py +19 -0
  157. datahub/metadata/com/linkedin/pegasus2avro/identity/__init__.py +2 -0
  158. datahub/metadata/com/linkedin/pegasus2avro/logical/__init__.py +15 -0
  159. datahub/metadata/com/linkedin/pegasus2avro/metadata/key/__init__.py +4 -0
  160. datahub/metadata/com/linkedin/pegasus2avro/module/__init__.py +27 -0
  161. datahub/metadata/com/linkedin/pegasus2avro/settings/global/__init__.py +4 -0
  162. datahub/metadata/com/linkedin/pegasus2avro/template/__init__.py +25 -0
  163. datahub/metadata/schema.avsc +18055 -17802
  164. datahub/metadata/schemas/ApplicationKey.avsc +31 -0
  165. datahub/metadata/schemas/ApplicationProperties.avsc +72 -0
  166. datahub/metadata/schemas/Applications.avsc +38 -0
  167. datahub/metadata/schemas/ChartKey.avsc +1 -0
  168. datahub/metadata/schemas/ContainerKey.avsc +1 -0
  169. datahub/metadata/schemas/ContainerProperties.avsc +8 -0
  170. datahub/metadata/schemas/CorpUserSettings.avsc +41 -0
  171. datahub/metadata/schemas/DashboardKey.avsc +1 -0
  172. datahub/metadata/schemas/DataFlowInfo.avsc +8 -0
  173. datahub/metadata/schemas/DataFlowKey.avsc +1 -0
  174. datahub/metadata/schemas/DataHubPageModuleKey.avsc +21 -0
  175. datahub/metadata/schemas/DataHubPageModuleProperties.avsc +200 -0
  176. datahub/metadata/schemas/DataHubPageTemplateKey.avsc +21 -0
  177. datahub/metadata/schemas/DataHubPageTemplateProperties.avsc +175 -0
  178. datahub/metadata/schemas/DataHubPolicyInfo.avsc +12 -1
  179. datahub/metadata/schemas/DataJobInfo.avsc +8 -0
  180. datahub/metadata/schemas/DataJobKey.avsc +1 -0
  181. datahub/metadata/schemas/DataProcessKey.avsc +8 -0
  182. datahub/metadata/schemas/DataProductKey.avsc +1 -0
  183. datahub/metadata/schemas/DataProductProperties.avsc +1 -1
  184. datahub/metadata/schemas/DatasetKey.avsc +11 -1
  185. datahub/metadata/schemas/ExecutionRequestInput.avsc +5 -0
  186. datahub/metadata/schemas/GlobalSettingsInfo.avsc +62 -0
  187. datahub/metadata/schemas/GlossaryTermKey.avsc +1 -0
  188. datahub/metadata/schemas/IcebergWarehouseInfo.avsc +8 -0
  189. datahub/metadata/schemas/LogicalParent.avsc +140 -0
  190. datahub/metadata/schemas/MLFeatureKey.avsc +1 -0
  191. datahub/metadata/schemas/MLFeatureTableKey.avsc +1 -0
  192. datahub/metadata/schemas/MLModelDeploymentKey.avsc +8 -0
  193. datahub/metadata/schemas/MLModelGroupKey.avsc +9 -0
  194. datahub/metadata/schemas/MLModelKey.avsc +9 -0
  195. datahub/metadata/schemas/MLPrimaryKeyKey.avsc +1 -0
  196. datahub/metadata/schemas/MetadataChangeEvent.avsc +20 -1
  197. datahub/metadata/schemas/NotebookKey.avsc +1 -0
  198. datahub/metadata/schemas/QuerySubjects.avsc +1 -12
  199. datahub/metadata/schemas/SchemaFieldKey.avsc +2 -1
  200. datahub/sdk/__init__.py +6 -0
  201. datahub/sdk/_all_entities.py +11 -0
  202. datahub/sdk/_shared.py +118 -1
  203. datahub/sdk/chart.py +315 -0
  204. datahub/sdk/container.py +7 -0
  205. datahub/sdk/dashboard.py +432 -0
  206. datahub/sdk/dataflow.py +309 -0
  207. datahub/sdk/datajob.py +367 -0
  208. datahub/sdk/dataset.py +8 -2
  209. datahub/sdk/entity_client.py +90 -2
  210. datahub/sdk/lineage_client.py +683 -82
  211. datahub/sdk/main_client.py +46 -16
  212. datahub/sdk/mlmodel.py +101 -38
  213. datahub/sdk/mlmodelgroup.py +7 -0
  214. datahub/sdk/search_client.py +4 -3
  215. datahub/specific/chart.py +1 -1
  216. datahub/specific/dataproduct.py +4 -0
  217. datahub/sql_parsing/sql_parsing_aggregator.py +29 -17
  218. datahub/sql_parsing/sqlglot_lineage.py +62 -13
  219. datahub/telemetry/telemetry.py +17 -11
  220. datahub/testing/sdk_v2_helpers.py +7 -1
  221. datahub/upgrade/upgrade.py +46 -13
  222. datahub/utilities/server_config_util.py +8 -0
  223. datahub/utilities/sqlalchemy_query_combiner.py +5 -2
  224. datahub/utilities/stats_collections.py +4 -0
  225. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/licenses/LICENSE +0 -0
  226. {acryl_datahub-1.1.1rc3.dist-info → acryl_datahub-1.2.0.dist-info}/top_level.txt +0 -0
datahub/sdk/dataset.py CHANGED
@@ -26,12 +26,14 @@ from datahub.sdk._shared import (
26
26
  HasInstitutionalMemory,
27
27
  HasOwnership,
28
28
  HasPlatformInstance,
29
+ HasStructuredProperties,
29
30
  HasSubtype,
30
31
  HasTags,
31
32
  HasTerms,
32
33
  LinksInputType,
33
34
  OwnersInputType,
34
35
  ParentContainerInputType,
36
+ StructuredPropertyInputType,
35
37
  TagInputType,
36
38
  TagsInputType,
37
39
  TermInputType,
@@ -428,6 +430,7 @@ class Dataset(
428
430
  HasTags,
429
431
  HasTerms,
430
432
  HasDomain,
433
+ HasStructuredProperties,
431
434
  Entity,
432
435
  ):
433
436
  """Represents a dataset in DataHub.
@@ -471,12 +474,12 @@ class Dataset(
471
474
  links: Optional[LinksInputType] = None,
472
475
  tags: Optional[TagsInputType] = None,
473
476
  terms: Optional[TermsInputType] = None,
474
- # TODO structured_properties
475
477
  domain: Optional[DomainInputType] = None,
476
- extra_aspects: ExtraAspectsType = None,
477
478
  # Dataset-specific aspects.
478
479
  schema: Optional[SchemaFieldsInputType] = None,
479
480
  upstreams: Optional[models.UpstreamLineageClass] = None,
481
+ structured_properties: Optional[StructuredPropertyInputType] = None,
482
+ extra_aspects: ExtraAspectsType = None,
480
483
  ):
481
484
  """Initialize a new Dataset instance.
482
485
 
@@ -548,6 +551,9 @@ class Dataset(
548
551
  self.set_terms(terms)
549
552
  if domain is not None:
550
553
  self.set_domain(domain)
554
+ if structured_properties is not None:
555
+ for key, value in structured_properties.items():
556
+ self.set_structured_property(property_urn=key, values=value)
551
557
 
552
558
  @classmethod
553
559
  def _new_from_graph(cls, urn: Urn, current_aspects: models.AspectBag) -> Self:
@@ -9,7 +9,11 @@ from datahub.emitter.mcp_patch_builder import MetadataPatchProposal
9
9
  from datahub.errors import IngestionAttributionWarning, ItemNotFoundError, SdkUsageError
10
10
  from datahub.ingestion.graph.client import DataHubGraph
11
11
  from datahub.metadata.urns import (
12
+ ChartUrn,
12
13
  ContainerUrn,
14
+ DashboardUrn,
15
+ DataFlowUrn,
16
+ DataJobUrn,
13
17
  DatasetUrn,
14
18
  MlModelGroupUrn,
15
19
  MlModelUrn,
@@ -17,7 +21,11 @@ from datahub.metadata.urns import (
17
21
  )
18
22
  from datahub.sdk._all_entities import ENTITY_CLASSES
19
23
  from datahub.sdk._shared import UrnOrStr
24
+ from datahub.sdk.chart import Chart
20
25
  from datahub.sdk.container import Container
26
+ from datahub.sdk.dashboard import Dashboard
27
+ from datahub.sdk.dataflow import DataFlow
28
+ from datahub.sdk.datajob import DataJob
21
29
  from datahub.sdk.dataset import Dataset
22
30
  from datahub.sdk.entity import Entity
23
31
  from datahub.sdk.mlmodel import MLModel
@@ -57,6 +65,14 @@ class EntityClient:
57
65
  @overload
58
66
  def get(self, urn: MlModelGroupUrn) -> MLModelGroup: ...
59
67
  @overload
68
+ def get(self, urn: DataFlowUrn) -> DataFlow: ...
69
+ @overload
70
+ def get(self, urn: DataJobUrn) -> DataJob: ...
71
+ @overload
72
+ def get(self, urn: DashboardUrn) -> Dashboard: ...
73
+ @overload
74
+ def get(self, urn: ChartUrn) -> Chart: ...
75
+ @overload
60
76
  def get(self, urn: Union[Urn, str]) -> Entity: ...
61
77
  def get(self, urn: UrnOrStr) -> Entity:
62
78
  """Retrieve an entity by its urn.
@@ -76,7 +92,26 @@ class EntityClient:
76
92
  urn = Urn.from_string(urn)
77
93
 
78
94
  # TODO: add error handling around this with a suggested alternative if not yet supported
79
- EntityClass = ENTITY_CLASSES[urn.entity_type]
95
+ try:
96
+ EntityClass = ENTITY_CLASSES[urn.entity_type]
97
+ except KeyError as e:
98
+ # Try to import cloud-specific entities if not found
99
+ try:
100
+ from acryl_datahub_cloud._sdk_extras.entities.assertion import Assertion
101
+ from acryl_datahub_cloud._sdk_extras.entities.monitor import Monitor
102
+
103
+ if urn.entity_type == "assertion":
104
+ EntityClass = Assertion
105
+ elif urn.entity_type == "monitor":
106
+ EntityClass = Monitor
107
+ else:
108
+ raise SdkUsageError(
109
+ f"Entity type {urn.entity_type} is not yet supported"
110
+ ) from e
111
+ except ImportError as e:
112
+ raise SdkUsageError(
113
+ f"Entity type {urn.entity_type} is not yet supported"
114
+ ) from e
80
115
 
81
116
  if not self._graph.exists(str(urn)):
82
117
  raise ItemNotFoundError(f"Entity {urn} not found")
@@ -84,7 +119,19 @@ class EntityClient:
84
119
  aspects = self._graph.get_entity_semityped(str(urn))
85
120
 
86
121
  # TODO: save the timestamp so we can use If-Unmodified-Since on the updates
87
- return EntityClass._new_from_graph(urn, aspects)
122
+ entity = EntityClass._new_from_graph(urn, aspects)
123
+
124
+ # Type narrowing for cloud-specific entities
125
+ if urn.entity_type == "assertion":
126
+ from acryl_datahub_cloud._sdk_extras.entities.assertion import Assertion
127
+
128
+ assert isinstance(entity, Assertion)
129
+ elif urn.entity_type == "monitor":
130
+ from acryl_datahub_cloud._sdk_extras.entities.monitor import Monitor
131
+
132
+ assert isinstance(entity, Monitor)
133
+
134
+ return entity
88
135
 
89
136
  def create(self, entity: Entity) -> None:
90
137
  mcps = []
@@ -145,3 +192,44 @@ class EntityClient:
145
192
 
146
193
  mcps = updater.build()
147
194
  self._graph.emit_mcps(mcps)
195
+
196
+ def delete(
197
+ self,
198
+ urn: UrnOrStr,
199
+ check_exists: bool = True,
200
+ cascade: bool = False,
201
+ hard: bool = False,
202
+ ) -> None:
203
+ """Delete an entity by its urn.
204
+
205
+ Args:
206
+ urn: The urn of the entity to delete. Can be a string or :py:class:`Urn` object.
207
+ check_exists: Whether to check if the entity exists before deletion. Defaults to True.
208
+ cascade: Whether to cascade delete related entities. When True, deletes child entities
209
+ like datajobs within dataflows, datasets within containers, etc. Not yet supported.
210
+ hard: Whether to perform a hard delete (permanent) or soft delete. Defaults to False.
211
+
212
+ Raises:
213
+ SdkUsageError: If the entity does not exist and check_exists is True, or if cascade is True (not supported).
214
+
215
+ Note:
216
+ When hard is True, the operation is irreversible and the entity will be permanently removed.
217
+
218
+ Impact of cascade deletion (still to be done) depends on the input entity type:
219
+ - Container: Recursively deletes all containers and data assets within the container.
220
+ - Dataflow: Recursively deletes all data jobs within the dataflow.
221
+ - Dashboard: TBD
222
+ - DataPlatformInstance: TBD
223
+ - ...
224
+ """
225
+ urn_str = str(urn) if isinstance(urn, Urn) else urn
226
+ if check_exists and not self._graph.exists(entity_urn=urn_str):
227
+ raise SdkUsageError(
228
+ f"Entity {urn_str} does not exist, and hence cannot be deleted. "
229
+ "You can bypass this check by setting check_exists=False."
230
+ )
231
+
232
+ if cascade:
233
+ raise SdkUsageError("The 'cascade' parameter is not yet supported.")
234
+
235
+ self._graph.delete_entity(urn=urn_str, hard=hard)