From 5da7bb049ca2ff751d0779cf786b58ae230ffaee Mon Sep 17 00:00:00 2001 From: Imri Paran Date: Tue, 20 Aug 2024 10:42:10 +0200 Subject: [PATCH] MINOR: fix table profiler on empty tables in trino (#17471) * fix(profiler): trino coalesce row count to 0 if result is null. this value gets returned for empty tables * fixed test_metadata.py --- .../pydantic/test_utils.py | 9 +- .../metadata/profiler/orm/functions/sum.py | 2 +- ingestion/tests/integration/conftest.py | 18 ++- .../tests/integration/postgres/test_usage.py | 16 ++- ingestion/tests/integration/trino/conftest.py | 71 ++++++++--- .../integration/trino/data/empty.parquet | Bin 0 -> 1828 bytes .../tests/integration/trino/data/iris.parquet | Bin 0 -> 2448 bytes .../integration/trino/data/table.parquet | Bin 0 -> 4312 bytes .../integration/trino/data/titanic.parquet | Bin 0 -> 40013 bytes .../integration/trino/data/userdata.parquet | Bin 0 -> 113629 bytes .../tests/integration/trino/test_metadata.py | 32 +++-- .../tests/integration/trino/test_profiler.py | 115 +++++++++++++++++- .../trino/trino/etc/log.properties | 3 +- 13 files changed, 225 insertions(+), 41 deletions(-) create mode 100644 ingestion/tests/integration/trino/data/empty.parquet create mode 100644 ingestion/tests/integration/trino/data/iris.parquet create mode 100644 ingestion/tests/integration/trino/data/table.parquet create mode 100644 ingestion/tests/integration/trino/data/titanic.parquet create mode 100644 ingestion/tests/integration/trino/data/userdata.parquet diff --git a/ingestion/src/_openmetadata_testutils/pydantic/test_utils.py b/ingestion/src/_openmetadata_testutils/pydantic/test_utils.py index f914403a32a..34c91246c72 100644 --- a/ingestion/src/_openmetadata_testutils/pydantic/test_utils.py +++ b/ingestion/src/_openmetadata_testutils/pydantic/test_utils.py @@ -43,7 +43,6 @@ def assert_equal_pydantic_objects( """ errors = [] queue = deque([(expected, actual, "")]) - while queue: expected, actual, current_key_prefix = queue.popleft() if not isinstance(expected, actual.__class__): @@ -52,11 +51,13 @@ def assert_equal_pydantic_objects( f"expected: [{type(expected).__name__}], actual: [{type(actual).__name__}]" ) continue - if issubclass(expected.__class__, BaseModel): - for key, expected_value in expected.dict().items(): + if issubclass(expected.__class__, BaseModel) and isinstance( + expected.model_dump(), dict + ): + for key, expected_value in expected.model_dump().items(): if expected_value is None and ignore_none: continue - actual_value = actual.dict().get(key) + actual_value = actual.model_dump().get(key) new_key_prefix = ( f"{current_key_prefix}.{key}" if current_key_prefix else key ) diff --git a/ingestion/src/metadata/profiler/orm/functions/sum.py b/ingestion/src/metadata/profiler/orm/functions/sum.py index a89810d2ba0..74534d1956c 100644 --- a/ingestion/src/metadata/profiler/orm/functions/sum.py +++ b/ingestion/src/metadata/profiler/orm/functions/sum.py @@ -45,7 +45,7 @@ def _(element, compiler, **kw): def _(element, compiler, **kw): """Cast to DECIMAL to address cannot cast nan to bigint""" proc = compiler.process(element.clauses, **kw) - return f"SUM(TRY_CAST({proc} AS DECIMAL))" + return f"COALESCE(SUM(CAST({proc} AS DECIMAL)),0)" @compiles(SumFn, Dialects.BigQuery) diff --git a/ingestion/tests/integration/conftest.py b/ingestion/tests/integration/conftest.py index 5f41c7bae76..1de0ffbf39a 100644 --- a/ingestion/tests/integration/conftest.py +++ b/ingestion/tests/integration/conftest.py @@ -59,7 +59,7 @@ def workflow_config(metadata): } -@pytest.fixture() +@pytest.fixture(scope="module") def profiler_config(db_service, workflow_config, sink_config): return { "source": { @@ -82,7 +82,7 @@ def profiler_config(db_service, workflow_config, sink_config): } -@pytest.fixture() +@pytest.fixture(scope="module") def run_workflow(): def _run(workflow_type: Type[IngestionWorkflow], config, raise_from_status=True): workflow: IngestionWorkflow = workflow_type.create(config) @@ -152,8 +152,14 @@ def create_service_request(): raise NotImplementedError("Implement in the test module") -@pytest.fixture() -def patch_passwords_for_db_services(db_service, unmask_password, monkeypatch): +@pytest.fixture(scope="module") +def monkeymodule(): + with pytest.MonkeyPatch.context() as mp: + yield mp + + +@pytest.fixture(scope="module") +def patch_passwords_for_db_services(db_service, unmask_password, monkeymodule): """Patch the password for all db services returned by the metadata service. Usage: @@ -178,12 +184,12 @@ def patch_passwords_for_db_services(db_service, unmask_password, monkeypatch): return inner - monkeypatch.setattr( + monkeymodule.setattr( "metadata.ingestion.ometa.ometa_api.OpenMetadata.get_by_name", override_password(OpenMetadata.get_by_name), ) - monkeypatch.setattr( + monkeymodule.setattr( "metadata.ingestion.ometa.ometa_api.OpenMetadata.get_by_id", override_password(OpenMetadata.get_by_id), ) diff --git a/ingestion/tests/integration/postgres/test_usage.py b/ingestion/tests/integration/postgres/test_usage.py index dfe6d3e7d00..9eca038818a 100644 --- a/ingestion/tests/integration/postgres/test_usage.py +++ b/ingestion/tests/integration/postgres/test_usage.py @@ -42,7 +42,14 @@ def usage_config(sink_config, workflow_config, db_service): } -def test_usage(run_workflow, ingestion_config, usage_config, metadata, db_service): +def test_usage( + patch_passwords_for_db_services, + run_workflow, + ingestion_config, + usage_config, + metadata, + db_service, +): search_cache.clear() run_workflow(MetadataWorkflow, ingestion_config) run_workflow(UsageWorkflow, usage_config) @@ -54,7 +61,12 @@ def test_usage(run_workflow, ingestion_config, usage_config, metadata, db_servic strict=True, ) def test_usage_delete_usage( - run_workflow, ingestion_config, usage_config, metadata, db_service + patch_passwords_for_db_services, + run_workflow, + ingestion_config, + usage_config, + metadata, + db_service, ): search_cache.clear() run_workflow(MetadataWorkflow, ingestion_config) diff --git a/ingestion/tests/integration/trino/conftest.py b/ingestion/tests/integration/trino/conftest.py index 32dbd225b02..0e9ebef298d 100644 --- a/ingestion/tests/integration/trino/conftest.py +++ b/ingestion/tests/integration/trino/conftest.py @@ -1,10 +1,13 @@ import os.path import random +from time import sleep import docker +import pandas as pd import pytest import testcontainers.core.network -from sqlalchemy import create_engine +from sqlalchemy import create_engine, insert +from sqlalchemy.engine import make_url from tenacity import retry, stop_after_delay, wait_fixed from testcontainers.core.container import DockerContainer from testcontainers.core.generic import DbContainer @@ -121,15 +124,19 @@ def docker_network(): @pytest.fixture(scope="session") def trino_container(hive_metastore_container, minio_container, docker_network): - with TrinoContainer(image="trinodb/trino:418").with_network( - docker_network - ).with_env( - "HIVE_METASTORE_URI", - f"thrift://metastore:{hive_metastore_container.port}", - ).with_env( - "MINIO_ENDPOINT", - f"http://minio:{minio_container.port}", - ) as trino: + container = ( + TrinoContainer(image="trinodb/trino:418") + .with_network(docker_network) + .with_env( + "HIVE_METASTORE_URI", + f"thrift://metastore:{hive_metastore_container.port}", + ) + .with_env( + "MINIO_ENDPOINT", + f"http://minio:{minio_container.port}", + ) + ) + with try_bind(container, container.port, container.port + 1) as trino: yield trino @@ -177,15 +184,51 @@ def minio_container(docker_network): @pytest.fixture(scope="session") def create_test_data(trino_container): - engine = create_engine(trino_container.get_connection_url()) + engine = create_engine( + make_url(trino_container.get_connection_url()).set(database="minio") + ) engine.execute( "create schema minio.my_schema WITH (location = 's3a://hive-warehouse/')" ) - engine.execute("create table minio.my_schema.test_table (id int)") - engine.execute("insert into minio.my_schema.test_table values (1), (2), (3)") + data_dir = os.path.dirname(__file__) + "/data" + for file in os.listdir(data_dir): + df = pd.read_parquet(f"{data_dir}/{file}") + for col in df.columns: + if pd.api.types.is_datetime64tz_dtype(df[col]): + df[col] = df[col].dt.tz_convert(None) + df.to_sql( + file.replace(".parquet", ""), + engine, + schema="my_schema", + if_exists="fail", + index=False, + method=custom_insert, + ) + sleep(1) return +def custom_insert(self, conn, keys: list[str], data_iter): + """ + Hack pandas.io.sql.SQLTable._execute_insert_multi to retry untill rows are inserted. + This is required becauase using trino with pd.to_sql in our setup us unreliable. + """ + rowcount = 0 + max_tries = 10 + try_num = 0 + data = [dict(zip(keys, row)) for row in data_iter] + while rowcount != len(data): + if try_num >= max_tries: + raise RuntimeError(f"Failed to insert data after {max_tries} tries") + try_num += 1 + stmt = insert(self.table).values(data) + conn.execute(stmt) + rowcount = conn.execute( + "SELECT COUNT(*) FROM " + f'"{self.schema}"."{self.name}"' + ).scalar() + return rowcount + + @pytest.fixture(scope="module") def create_service_request(trino_container, tmp_path_factory): return CreateDatabaseServiceRequest( @@ -203,7 +246,7 @@ def create_service_request(trino_container, tmp_path_factory): ) -@pytest.fixture +@pytest.fixture(scope="module") def ingestion_config(db_service, sink_config, workflow_config, base_ingestion_config): base_ingestion_config["source"]["sourceConfig"]["config"]["schemaFilterPattern"] = { "excludes": [ diff --git a/ingestion/tests/integration/trino/data/empty.parquet b/ingestion/tests/integration/trino/data/empty.parquet new file mode 100644 index 0000000000000000000000000000000000000000..3027ff75c8a4ba8690c09713a43fddc197435368 GIT binary patch literal 1828 zcmbtV-EQJW6!u0@+KXPT3IZvrkflYcL{bbP4XfRYF^j=8u!)oP->Ql{wlN0Vc>ROp zM0tYtWqRKS>Eraw*h?W@sVj8^=FIu|zHiRVm@6c4mBR{CIk9#?;8GR<#)JT5XJ=XuHRFaD{)J2k;xP5n)esU5}U!uE~IA#lDr01EF< z0!VF4?J840uD8BMM)PZUs~1%eUw!jE!_-@~qtFN}Bd+~+_{h3}W#8YKYcKVKn0?*& z_{grn2NoL{fn&3+1{)Z@4UQo7Jeb9a5hXBfQ+pk5O`Dk9)34w!@a`zMUBd38%w5~F z?)H6!th*!+2_2gTuDP}f1*sqA+rSzxZ8IUtd^<5LBQYTTk+lOzcLRsiez+A*F4(6X zG5ac5gOu-yC|u7p*nXJgvYM_Gy=WVrt(ZNqVomF3x7{uWx=Lqwfq5 zLf7ym;}?X^5bq!XAqNc{>f`ynct)JVZG4DGJdO5}?Rk#K`XF0qLr!j&5bvCzrIX64r1{2JIm|reYI?X42gfuwAe3>@|8;&?a7vw?D_v`^K6`2ls zdMS8%DT@0+lIT_8U1B|4LFzpsmkmHPKt%+QWPHAlJd%iql9u;}&MB2fv#yDM2mkF` orq&3J=u>JZCuSI)&=*Fdd?7T7S4F*b%rNj_{y1WoEBJr>8+r8+u>b%7 literal 0 HcmV?d00001 diff --git a/ingestion/tests/integration/trino/data/iris.parquet b/ingestion/tests/integration/trino/data/iris.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9224dead94cc960679a7f5681efe4efdbe61bedc GIT binary patch literal 2448 zcmZ`*L1-Ii7JgDj^8efVlXZ3pC; zdH?&rdGCGSd%w%Cyb)^BKaJ|c>>u^rG@i3MOY~n^I738t)2X#gDmNZ|@^LDa8;idE zCY7>Aqs;l-+Gs?X6nmtvI7F-?84DdvXHqnFS-_xdIE8ioJV!QiQLCRkvB_aavfO&!Uh*vVA10Zx#hO|yEjP#u}B3KldA+>P!8pB ze@1QN-eI4{RKgxN!ySA-B1iea$m5I8D2J1k+ zxZ=-$qG`7+YoUiI60W+DtN^FMEiNNahxZXV?=2NWL9TAfJ%nTfsumXMIkmNPM9-?d zaFYrMw~G&ZT%+^alO2w*UdGP}YY4x|9ePf;7JIM*f%kBCm9tdG{svuCg4YvQu)dro6!ktqdJRu7@t3~DmYkEWlq*N8PABJy*18MU%M{bw>%nfVJ z1|foXN$Qxsef}JMGYeR*%9zrs?G~j&XMrlT9ag0PkVC_$q|`#zxdrL-@1XLnFkAJ&*s*lhJTH)KGThUTQh+mywVC%a}1Z)a46>%4=MeHww} z5=!d?Dz%^icr5L3D{Pe#Q-BJ7MGnGh*jy-*tdl?}+;z)PYfkmT9-d;izUVB)ypKHM zaKi+(SmiCsBA5(>vQyelaWdPQiRrx!H$lLasm^Ru?uPXRL9!e6coUT?%4nfN1vDKl zam?c5-(eBew+`pP;@aVy=}B>a4#d)tcF45gLv3d+KI@_9gk?IH9zcaQ{frVFXrF7` z$Xv6gA8N0JLRV;Cn}&OgY#*TNzPlqE3m%nxLd(_ZV7^7X#Xj3c@ilINrNhf;`a>O~ zsxjt)te8JBde64(2nZfTV0aY9z5~e=Q7#`6virYLNGzwS7IaXTWe!lq#N9+|ZAcFq zbIkbQ0Ar&ftHu$PH4+N|A#!Q4QUnw@H@i0dn2fe&#iF=)UqW;P(4Xk6QT?*DN{$13#l! zk1%mIq5K1k^D+x?^-zO3cqdSbPX|zYmm4mc%t$4gL7yII41|6a#Z(#7t!G&gKKWSr z7DZ^%N5D-%Hh4+sq4Gl?riO9aBbqN0J2FDYdKd(WTa_EQ2MA~nbdqx1mTW`AZj(KE zgggxJmRSI1f{A+w(WUj4j299rbqG>?jFajptib9?2*MI#B&ObEZ z#3l|w`rGR58@HB+@$~oAo43}l-nf3_rZjKsH?OU~yMA>Uv$mkU{=sPv4$iYL9`l)A zp_SB1TBqIXFF`UZ|GN72%3E*Vx>{X*XIT%E9-c@$xm&BXuCLzy_XJV?ZrUxl|Cq$lGwf;{rcZrEr?H;DGnW5! zXi~iFh{36GF>=Io|Kcc5{%=^3^%KO?L7o79I5heB&

~5qr#a3h}fRD^C!gO7aBq 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

<5QmW@a)%XyPtNWgIEit#r_8r)-w0KV8 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 literal 0 HcmV?d00001 diff --git a/ingestion/tests/integration/trino/data/userdata.parquet b/ingestion/tests/integration/trino/data/userdata.parquet new file mode 100644 index 0000000000000000000000000000000000000000..2ae23dac0ffe794068f26c163b7245b3509f31c5 GIT binary patch literal 113629 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 DbfIxZ literal 0 HcmV?d00001 diff --git a/ingestion/tests/integration/trino/test_metadata.py b/ingestion/tests/integration/trino/test_metadata.py index aa489bd74f9..85c3c5b5c0e 100644 --- a/ingestion/tests/integration/trino/test_metadata.py +++ b/ingestion/tests/integration/trino/test_metadata.py @@ -1,19 +1,27 @@ +import pytest + from metadata.generated.schema.entity.data.table import Table from metadata.ingestion.ometa.ometa_api import OpenMetadata from metadata.workflow.metadata import MetadataWorkflow -def test_metadata( - db_service, metadata: OpenMetadata, run_workflow, ingestion_config, create_test_data -): +@pytest.fixture(scope="module") +def run_workflow(run_workflow, ingestion_config, create_test_data): run_workflow(MetadataWorkflow, ingestion_config) - tables = metadata.list_entities( - Table, - params={ - "databaseSchema": f"{db_service.fullyQualifiedName.root}.minio.my_schema" - }, - ) - assert ( - next((t for t in tables.entities if t.name.root == "test_table"), None) - is not None + + +@pytest.mark.parametrize( + "table_name", + [ + "{database_service}.minio.my_schema.table", + "{database_service}.minio.my_schema.titanic", + "{database_service}.minio.my_schema.iris", + "{database_service}.minio.my_schema.userdata", + "{database_service}.minio.my_schema.empty", + ], + ids=lambda x: x.split(".")[-1], +) +def test_metadata(run_workflow, db_service, metadata: OpenMetadata, table_name): + metadata.get_by_name( + Table, table_name.format(database_service=db_service.fullyQualifiedName.root) ) diff --git a/ingestion/tests/integration/trino/test_profiler.py b/ingestion/tests/integration/trino/test_profiler.py index af8bab0512e..5406df19e04 100644 --- a/ingestion/tests/integration/trino/test_profiler.py +++ b/ingestion/tests/integration/trino/test_profiler.py @@ -1,9 +1,22 @@ +from dataclasses import dataclass +from typing import List + +import pytest + +from _openmetadata_testutils.pydantic.test_utils import assert_equal_pydantic_objects +from metadata.generated.schema.entity.data.table import ( + ColumnProfile, + Table, + TableProfile, +) +from metadata.generated.schema.type.basic import Timestamp from metadata.ingestion.lineage.sql_lineage import search_cache from metadata.workflow.metadata import MetadataWorkflow from metadata.workflow.profiler import ProfilerWorkflow -def test_profiler( +@pytest.fixture(scope="module") +def run_profiler( patch_passwords_for_db_services, run_workflow, ingestion_config, @@ -13,3 +26,103 @@ def test_profiler( search_cache.clear() run_workflow(MetadataWorkflow, ingestion_config) run_workflow(ProfilerWorkflow, profiler_config) + + +@dataclass +class ProfilerTestParameters: + table_fqn: str + expected_table_profile: TableProfile + expected_column_profiles: List[ColumnProfile] = None + + +@pytest.mark.parametrize( + "parameters", + [ + ProfilerTestParameters( + "{database_service}.minio.my_schema.table", + TableProfile(timestamp=Timestamp(0), rowCount=3), + [ + ColumnProfile( + name="three", + timestamp=Timestamp(0), + valuesCount=2, + nullCount=1, + ) + ], + ), + ProfilerTestParameters( + "{database_service}.minio.my_schema.titanic", + TableProfile(timestamp=Timestamp(0), rowCount=891), + [ + ColumnProfile( + name="name", + timestamp=Timestamp(0), + valuesCount=891, + nullCount=0, + ) + ], + ), + ProfilerTestParameters( + "{database_service}.minio.my_schema.iris", + TableProfile(timestamp=Timestamp(0), rowCount=150), + [ + ColumnProfile( + name="petal.length", + timestamp=Timestamp(0), + valuesCount=150, + nullCount=0, + ) + ], + ), + ProfilerTestParameters( + "{database_service}.minio.my_schema.userdata", + TableProfile(timestamp=Timestamp(0), rowCount=1000), + [ + ColumnProfile( + name="gender", + timestamp=Timestamp(0), + valuesCount=1000, + nullCount=0, + ) + ], + ), + ProfilerTestParameters( + "{database_service}.minio.my_schema.empty", + TableProfile(timestamp=Timestamp(0), rowCount=0), + [ + ColumnProfile( + name="a", + timestamp=Timestamp(0), + valuesCount=0, + nullCount=0, + ) + ], + ), + ], + ids=lambda x: x.table_fqn.split(".")[-1], +) +def test_profiler( + run_profiler, metadata, db_service, parameters: ProfilerTestParameters +): + table: Table = metadata.get_latest_table_profile( + parameters.table_fqn.format(database_service=db_service.fullyQualifiedName.root) + ) + assert_equal_pydantic_objects( + parameters.expected_table_profile, + # we dont want to validate the timestamp because it will be different for each run + table.profile.model_copy( + update={"timestamp": parameters.expected_table_profile.timestamp} + ), + ) + for profile in parameters.expected_column_profiles: + column = next( + (col for col in table.columns if col.profile.name == profile.name), None + ) + if column is None: + raise AssertionError( + f"Column [{profile.name}] not found in table [{table.fullyQualifiedName.root}]" + ) + assert_equal_pydantic_objects( + profile, + column.profile.model_copy(update={"timestamp": profile.timestamp}), + ) diff --git a/ingestion/tests/integration/trino/trino/etc/log.properties b/ingestion/tests/integration/trino/trino/etc/log.properties index 6420205581a..c03f8bb285d 100644 --- a/ingestion/tests/integration/trino/trino/etc/log.properties +++ b/ingestion/tests/integration/trino/trino/etc/log.properties @@ -1 +1,2 @@ -io.trino=DEBUG \ No newline at end of file +# Set to DEBUG for verbose logging +io.trino=INFO