From 6d329e99c488222ed110539cf3a860ead32076a3 Mon Sep 17 00:00:00 2001 From: Kristen Armes <6732445+kristenarmes@users.noreply.github.com> Date: Fri, 25 Feb 2022 17:58:46 -0800 Subject: [PATCH] feat: Adding TypeMetadata model in amundsen-common (#1732) * Adding common model for complex columns with subtypes Signed-off-by: Kristen Armes * Removing unnecessary optional types Signed-off-by: Kristen Armes * Remove optional from subtype children for consistency Signed-off-by: Kristen Armes * Using type_metadata terminology instead of subtype Signed-off-by: Kristen Armes --- common/amundsen_common/models/table.py | 19 ++ common/setup.py | 2 +- .../models/description_metadata.py | 2 +- .../databuilder/models/type_metadata.py | 6 +- databuilder/setup.py | 2 +- .../test_fixtures/table_metadata_fixtures.py | 117 +++++----- .../tests/unit/models/test_table_metadata.py | 17 +- .../tests/unit/models/test_type_metadata.py | 210 +++++++++--------- 8 files changed, 204 insertions(+), 171 deletions(-) diff --git a/common/amundsen_common/models/table.py b/common/amundsen_common/models/table.py index 8f5d9647d2..7ded9e1213 100644 --- a/common/amundsen_common/models/table.py +++ b/common/amundsen_common/models/table.py @@ -52,6 +52,24 @@ class Meta: register_as_scheme = True +@attr.s(auto_attribs=True, kw_only=True) +class TypeMetadata: + kind: str + name: str + key: str + description: Optional[str] = None + data_type: str + sort_order: int + badges: List[Badge] = [] + children: List['TypeMetadata'] = [] + + +class TypeMetadataSchema(AttrsSchema): + class Meta: + target = TypeMetadata + register_as_scheme = True + + @attr.s(auto_attribs=True, kw_only=True) class Column: name: str @@ -61,6 +79,7 @@ class Column: sort_order: int stats: List[Stat] = [] badges: Optional[List[Badge]] = [] + type_metadata: Optional[TypeMetadata] = None # Used to support complex column types class ColumnSchema(AttrsSchema): diff --git a/common/setup.py b/common/setup.py index d391514d15..b0b2199727 100644 --- a/common/setup.py +++ b/common/setup.py @@ -4,7 +4,7 @@ from setuptools import find_packages, setup -__version__ = '0.25.0' +__version__ = '0.26.0' requirements_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'requirements-dev.txt') diff --git a/databuilder/databuilder/models/description_metadata.py b/databuilder/databuilder/models/description_metadata.py index d0fe42f454..edf5bbafae 100644 --- a/databuilder/databuilder/models/description_metadata.py +++ b/databuilder/databuilder/models/description_metadata.py @@ -33,7 +33,7 @@ def __init__(self, text: Optional[str], source: str = DEFAULT_SOURCE, description_key: Optional[str] = None, - start_label: Optional[str] = None, # Table, Column, Schema, Subtype + start_label: Optional[str] = None, # Table, Column, Schema, Type_Metadata start_key: Optional[str] = None, ): """ diff --git a/databuilder/databuilder/models/type_metadata.py b/databuilder/databuilder/models/type_metadata.py index 3870a359bc..1a7c7a0f91 100644 --- a/databuilder/databuilder/models/type_metadata.py +++ b/databuilder/databuilder/models/type_metadata.py @@ -14,9 +14,9 @@ class TypeMetadata(abc.ABC, GraphSerializable): - NODE_LABEL = 'Subtype' - RELATION_TYPE = 'SUBTYPE' - INVERSE_RELATION_TYPE = 'SUBTYPE_OF' + NODE_LABEL = 'Type_Metadata' + RELATION_TYPE = 'TYPE_METADATA' + INVERSE_RELATION_TYPE = 'TYPE_METADATA_OF' KIND = 'kind' NAME = 'name' DATA_TYPE = 'data_type' diff --git a/databuilder/setup.py b/databuilder/setup.py index 7fbe1cf4f1..d5b26c1b58 100644 --- a/databuilder/setup.py +++ b/databuilder/setup.py @@ -4,7 +4,7 @@ from setuptools import find_packages, setup -__version__ = '6.7.0' +__version__ = '6.7.1' requirements_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'requirements.txt') with open(requirements_path) as requirements_file: diff --git a/databuilder/tests/unit/models/test_fixtures/table_metadata_fixtures.py b/databuilder/tests/unit/models/test_fixtures/table_metadata_fixtures.py index d94e7cee2b..fba04bddb4 100644 --- a/databuilder/tests/unit/models/test_fixtures/table_metadata_fixtures.py +++ b/databuilder/tests/unit/models/test_fixtures/table_metadata_fixtures.py @@ -151,10 +151,10 @@ 'kind:String(single)': 'array', 'name:String(single)': 'has_nested_type', 'data_type:String(single)': 'array>>', - NEPTUNE_HEADER_ID: 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + NEPTUNE_HEADER_ID: 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - NEPTUNE_HEADER_LABEL: 'Subtype', + NEPTUNE_HEADER_LABEL: 'Type_Metadata', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_NODE_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB, }, @@ -162,10 +162,11 @@ 'kind:String(single)': 'array', 'name:String(single)': '_inner_', 'data_type:String(single)': 'array>', - NEPTUNE_HEADER_ID: 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', + NEPTUNE_HEADER_ID: + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', - NEPTUNE_HEADER_LABEL: 'Subtype', + NEPTUNE_HEADER_LABEL: 'Type_Metadata', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_NODE_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB, }, @@ -174,10 +175,10 @@ 'name:String(single)': '_inner_', 'data_type:String(single)': 'array', NEPTUNE_HEADER_ID: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', - NEPTUNE_HEADER_LABEL: 'Subtype', + NEPTUNE_HEADER_LABEL: 'Type_Metadata', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_NODE_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB, }, @@ -720,36 +721,38 @@ { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( from_vertex_id='Column:hive://gold.test_schema1/test_table1/has_nested_type', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - label='SUBTYPE' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + label='TYPE_METADATA' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( from_vertex_id='Column:hive://gold.test_schema1/test_table1/has_nested_type', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - label='SUBTYPE' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + label='TYPE_METADATA' ), NEPTUNE_RELATIONSHIP_HEADER_FROM: 'Column:hive://gold.test_schema1/test_table1/has_nested_type', NEPTUNE_RELATIONSHIP_HEADER_TO: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - NEPTUNE_HEADER_LABEL: 'SUBTYPE', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB }, { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type', to_vertex_id='Column:hive://gold.test_schema1/test_table1/has_nested_type', - label='SUBTYPE_OF' + label='TYPE_METADATA_OF' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type', to_vertex_id='Column:hive://gold.test_schema1/test_table1/has_nested_type', - label='SUBTYPE_OF' + label='TYPE_METADATA_OF' ), NEPTUNE_RELATIONSHIP_HEADER_FROM: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', NEPTUNE_RELATIONSHIP_HEADER_TO: 'Column:hive://gold.test_schema1/test_table1/has_nested_type', - NEPTUNE_HEADER_LABEL: 'SUBTYPE_OF', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA_OF', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB } @@ -757,43 +760,45 @@ [ { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type', + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - label='SUBTYPE' + label='TYPE_METADATA' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type', + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - label='SUBTYPE' + label='TYPE_METADATA' ), NEPTUNE_RELATIONSHIP_HEADER_FROM: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', NEPTUNE_RELATIONSHIP_HEADER_TO: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', - NEPTUNE_HEADER_LABEL: 'SUBTYPE', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB }, { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - label='SUBTYPE_OF' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + label='TYPE_METADATA_OF' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - label='SUBTYPE_OF' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + label='TYPE_METADATA_OF' ), NEPTUNE_RELATIONSHIP_HEADER_FROM: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', NEPTUNE_RELATIONSHIP_HEADER_TO: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - NEPTUNE_HEADER_LABEL: 'SUBTYPE_OF', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA_OF', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB } @@ -801,47 +806,47 @@ [ { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_/_inner_', - label='SUBTYPE' + label='TYPE_METADATA' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_/_inner_', - label='SUBTYPE' + label='TYPE_METADATA' ), NEPTUNE_RELATIONSHIP_HEADER_FROM: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', - NEPTUNE_RELATIONSHIP_HEADER_TO: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', - NEPTUNE_HEADER_LABEL: 'SUBTYPE', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', + NEPTUNE_RELATIONSHIP_HEADER_TO: 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type/_inner_/_inner_', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB }, { NEPTUNE_HEADER_ID: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - label='SUBTYPE_OF' + label='TYPE_METADATA_OF' ), METADATA_KEY_PROPERTY_NAME_BULK_LOADER_FORMAT: "{label}:{from_vertex_id}_{to_vertex_id}".format( - from_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + from_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_/_inner_', - to_vertex_id='Subtype:hive://gold.test_schema1/test_table1/has_nested_type' + to_vertex_id='Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' '/type/has_nested_type/_inner_', - label='SUBTYPE_OF' + label='TYPE_METADATA_OF' ), - NEPTUNE_RELATIONSHIP_HEADER_FROM: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', + NEPTUNE_RELATIONSHIP_HEADER_FROM: 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type' + '/type/has_nested_type/_inner_/_inner_', NEPTUNE_RELATIONSHIP_HEADER_TO: - 'Subtype:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', - NEPTUNE_HEADER_LABEL: 'SUBTYPE_OF', + 'Type_Metadata:hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', + NEPTUNE_HEADER_LABEL: 'TYPE_METADATA_OF', NEPTUNE_LAST_EXTRACTED_AT_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: ANY, NEPTUNE_CREATION_TYPE_RELATIONSHIP_PROPERTY_NAME_BULK_LOADER_FORMAT: NEPTUNE_CREATION_TYPE_JOB } diff --git a/databuilder/tests/unit/models/test_table_metadata.py b/databuilder/tests/unit/models/test_table_metadata.py index ca8a679f00..59110cd39f 100644 --- a/databuilder/tests/unit/models/test_table_metadata.py +++ b/databuilder/tests/unit/models/test_table_metadata.py @@ -117,11 +117,12 @@ def test_serialize(self) -> None: {'description': 'column with nested types', 'KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/_description', 'LABEL': 'Description', 'description_source': 'description'}, - {'kind': 'array', 'name': 'has_nested_type', 'LABEL': 'Subtype', 'data_type': 'array>>', + {'kind': 'array', 'name': 'has_nested_type', 'LABEL': 'Type_Metadata', + 'data_type': 'array>>', 'KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type'}, - {'kind': 'array', 'name': '_inner_', 'LABEL': 'Subtype', 'data_type': 'array>', + {'kind': 'array', 'name': '_inner_', 'LABEL': 'Type_Metadata', 'data_type': 'array>', 'KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_'}, - {'kind': 'array', 'name': '_inner_', 'LABEL': 'Subtype', 'data_type': 'array', + {'kind': 'array', 'name': '_inner_', 'LABEL': 'Type_Metadata', 'data_type': 'array', 'KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_'} ] @@ -170,14 +171,16 @@ def test_serialize(self) -> None: 'END_LABEL': 'Description', 'START_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type', 'TYPE': 'DESCRIPTION', 'REVERSE_TYPE': 'DESCRIPTION_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - 'START_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Column', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/has_nested_type/type/has_nested_type/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] self.expected_rels = copy.deepcopy(self.expected_rels_deduped) diff --git a/databuilder/tests/unit/models/test_type_metadata.py b/databuilder/tests/unit/models/test_type_metadata.py index 2d005c7966..48d34abf7a 100644 --- a/databuilder/tests/unit/models/test_type_metadata.py +++ b/databuilder/tests/unit/models/test_type_metadata.py @@ -44,26 +44,26 @@ def test_serialize_array_type_metadata(self) -> None: nested_array_type_metadata_level2.array_inner_type = nested_scalar_type_metadata_level3 expected_nodes = [ - {'kind': 'array', 'name': 'col1', 'LABEL': 'Subtype', 'data_type': 'array>>', + {'kind': 'array', 'name': 'col1', 'LABEL': 'Type_Metadata', 'data_type': 'array>>', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, - {'kind': 'array', 'name': '_inner_', 'LABEL': 'Subtype', 'data_type': 'array>', + {'kind': 'array', 'name': '_inner_', 'LABEL': 'Type_Metadata', 'data_type': 'array>', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_'}, - {'kind': 'array', 'name': '_inner_', 'LABEL': 'Subtype', 'data_type': 'array', + {'kind': 'array', 'name': '_inner_', 'LABEL': 'Type_Metadata', 'data_type': 'array', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_inner_'} ] expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Column', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] node_row = array_type_metadata.next_node() @@ -123,32 +123,32 @@ def test_serialize_array_map_type_metadata(self) -> None: expected_nodes = [ {'kind': 'array', 'data_type': 'array>>', - 'LABEL': 'Subtype', 'name': 'col1', + 'LABEL': 'Type_Metadata', 'name': 'col1', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, - {'kind': 'map', 'data_type': 'map>', 'LABEL': 'Subtype', 'name': '_inner_', + {'kind': 'map', 'data_type': 'map>', 'LABEL': 'Type_Metadata', 'name': '_inner_', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_'}, - {'kind': 'scalar', 'data_type': 'string', 'LABEL': 'Subtype', 'name': '_map_key', + {'kind': 'scalar', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'name': '_map_key', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_map_key'}, - {'kind': 'array', 'data_type': 'array', 'LABEL': 'Subtype', 'name': '_map_value', + {'kind': 'array', 'data_type': 'array', 'LABEL': 'Type_Metadata', 'name': '_map_value', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_map_value'} ] expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Column', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_map_key', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/_map_value', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] node_row = array_type_metadata.next_node() @@ -204,33 +204,33 @@ def test_serialize_array_struct_type_metadata(self) -> None: expected_nodes = [ {'kind': 'array', 'name': 'col1', 'data_type': 'array,c2:string>>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, {'kind': 'struct', 'name': '_inner_', 'data_type': 'struct,c2:string>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_'}, + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_'}, {'kind': 'array', 'name': 'c1', 'data_type': 'array', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 0, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 0, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/c1'}, {'kind': 'scalar', 'name': 'c2', 'data_type': 'string', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 1, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 1, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/c2'}, ] expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Column', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/c1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_/c2', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_inner_', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] node_row = array_type_metadata.next_node() @@ -302,36 +302,38 @@ def test_serialize_map_type_metadata(self) -> None: expected_nodes = [ {'kind': 'map', 'name': 'col1', 'data_type': 'map>>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, - {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Subtype', + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, + {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_key'}, {'kind': 'map', 'name': '_map_value', 'data_type': 'map>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value'}, - {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Subtype', + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value'}, + {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_key'}, - {'kind': 'map', 'name': '_map_value', 'data_type': 'map', 'LABEL': 'Subtype', + {'kind': 'map', 'name': '_map_value', 'data_type': 'map', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_value'}, - {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Subtype', + {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_value/_map_key'}, - {'kind': 'scalar', 'name': '_map_value', 'data_type': 'string', 'LABEL': 'Subtype', + {'kind': 'scalar', 'name': '_map_value', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_value/_map_value'} ] expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Column', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_key', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_key', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/_map_value', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] node_row = map_type_metadata.next_node() @@ -405,42 +407,46 @@ def test_serialize_map_struct_type_metadata(self) -> None: expected_nodes = [ {'kind': 'map', 'name': 'col1', 'data_type': 'map,c2:string>>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, - {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Subtype', + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, + {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_key'}, {'kind': 'struct', 'name': '_map_value', 'data_type': 'struct,c2:string>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value'}, + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value'}, {'kind': 'map', 'name': 'c1', 'data_type': 'map', 'sort_order:UNQUOTED': 0, - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1'}, - {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Subtype', + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1'}, + {'kind': 'scalar', 'name': '_map_key', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1/_map_key'}, - {'kind': 'scalar', 'name': '_map_value', 'data_type': 'string', 'LABEL': 'Subtype', + {'kind': 'scalar', 'name': '_map_value', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1/_map_value'}, - {'kind': 'scalar', 'name': 'c2', 'data_type': 'string', 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 1, + {'kind': 'scalar', 'name': 'c2', 'data_type': 'string', 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 1, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c2'} ] expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Column', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_key', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'END_LABEL': 'Type_Metadata', + 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1/_map_key', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1/_map_value', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value/c2', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/_map_value', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'} + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', 'TYPE': 'TYPE_METADATA', + 'REVERSE_TYPE': 'TYPE_METADATA_OF'} ] node_row = map_type_metadata.next_node() @@ -514,24 +520,24 @@ def test_serialize_struct_type_metadata(self) -> None: expected_nodes = [ {'kind': 'struct', 'name': 'col1', 'data_type': 'struct>,c5:string>', - 'LABEL': 'Subtype', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, + 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, {'kind': 'struct', 'name': 'c1', 'data_type': 'struct>', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 0, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 0, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1'}, {'kind': 'struct', 'name': 'c2', 'data_type': 'struct', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 0, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 0, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2'}, {'kind': 'scalar', 'name': 'c3', 'data_type': 'string', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 0, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 0, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c3'}, {'description': 'description of c3', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c3/_description', 'LABEL': 'Description', 'description_source': 'description'}, {'kind': 'scalar', 'name': 'c4', 'data_type': 'string', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 1, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 1, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c4'}, {'kind': 'scalar', 'name': 'c5', 'data_type': 'string', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 1, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 1, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c5'}, {'description': 'description of c5', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c5/_description', @@ -540,34 +546,34 @@ def test_serialize_struct_type_metadata(self) -> None: expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Column', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c3', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c3/_description', - 'START_LABEL': 'Subtype', 'END_LABEL': 'Description', + 'START_LABEL': 'Type_Metadata', 'END_LABEL': 'Description', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c3', 'TYPE': 'DESCRIPTION', 'REVERSE_TYPE': 'DESCRIPTION_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2/c4', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/c2', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c5', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c5/_description', - 'START_LABEL': 'Subtype', 'END_LABEL': 'Description', + 'START_LABEL': 'Type_Metadata', 'END_LABEL': 'Description', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c5', 'TYPE': 'DESCRIPTION', 'REVERSE_TYPE': 'DESCRIPTION_OF'} ] @@ -632,23 +638,23 @@ def test_serialize_struct_map_array_type_metadata(self) -> None: nested_array_type_metadata_level1.sort_order = 1 expected_nodes = [ - {'kind': 'struct', 'name': 'col1', 'LABEL': 'Subtype', + {'kind': 'struct', 'name': 'col1', 'LABEL': 'Type_Metadata', 'data_type': 'struct>,c2:array>', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1'}, {'kind': 'map', 'name': 'c1', 'data_type': 'map>', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 0, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 0, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1'}, {'description': 'description of map', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_description', 'LABEL': 'Description', 'description_source': 'description'}, {'kind': 'scalar', 'name': '_map_key', - 'data_type': 'string', 'LABEL': 'Subtype', + 'data_type': 'string', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_map_key'}, {'kind': 'array', 'name': '_map_value', - 'data_type': 'array', 'LABEL': 'Subtype', + 'data_type': 'array', 'LABEL': 'Type_Metadata', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_map_value'}, {'kind': 'array', 'name': 'c2', 'data_type': 'array', - 'LABEL': 'Subtype', 'sort_order:UNQUOTED': 1, + 'LABEL': 'Type_Metadata', 'sort_order:UNQUOTED': 1, 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c2'}, {'description': 'description of array', 'KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c2/_description', @@ -657,30 +663,30 @@ def test_serialize_struct_map_array_type_metadata(self) -> None: expected_rels = [ {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Column', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Column', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_description', - 'START_LABEL': 'Subtype', 'END_LABEL': 'Description', + 'START_LABEL': 'Type_Metadata', 'END_LABEL': 'Description', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', 'TYPE': 'DESCRIPTION', 'REVERSE_TYPE': 'DESCRIPTION_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_map_key', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1/_map_value', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c2', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1', - 'END_LABEL': 'Subtype', 'START_LABEL': 'Subtype', - 'TYPE': 'SUBTYPE', 'REVERSE_TYPE': 'SUBTYPE_OF'}, + 'END_LABEL': 'Type_Metadata', 'START_LABEL': 'Type_Metadata', + 'TYPE': 'TYPE_METADATA', 'REVERSE_TYPE': 'TYPE_METADATA_OF'}, {'END_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c2/_description', - 'START_LABEL': 'Subtype', 'END_LABEL': 'Description', + 'START_LABEL': 'Type_Metadata', 'END_LABEL': 'Description', 'START_KEY': 'hive://gold.test_schema1/test_table1/col1/type/col1/c2', 'TYPE': 'DESCRIPTION', 'REVERSE_TYPE': 'DESCRIPTION_OF'}, ]