diff options
author | Filitov Mikhail <filitovme@gmail.com> | 2025-05-29 10:39:08 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2025-05-29 10:39:08 +0200 |
commit | 4ab3a5e265c54c5462eb7311554eaded2f9e6f9c (patch) | |
tree | eba79a6d50aaf0abb3b1590cb206b0f630900b21 | |
parent | b96b2416cfb0094f2190bbca4a35b70c9d390a80 (diff) | |
download | ydb-4ab3a5e265c54c5462eb7311554eaded2f9e6f9c.tar.gz |
Add udf compatibility test digest (#18910)
-rw-r--r-- | ydb/tests/compatibility/udf/test_datetime2.py (renamed from ydb/tests/compatibility/test_datetime2.py) | 16 | ||||
-rw-r--r-- | ydb/tests/compatibility/udf/test_digest.py | 100 | ||||
-rw-r--r-- | ydb/tests/compatibility/ya.make | 3 |
3 files changed, 111 insertions, 8 deletions
diff --git a/ydb/tests/compatibility/test_datetime2.py b/ydb/tests/compatibility/udf/test_datetime2.py index d8269e75171..02576c33f30 100644 --- a/ydb/tests/compatibility/test_datetime2.py +++ b/ydb/tests/compatibility/udf/test_datetime2.py @@ -67,7 +67,8 @@ class TestDatetime2(MixedClusterFixture): PRIMARY KEY(id) ) WITH ( - PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))}) + PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))}), + AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = {self.rows} ); """ @@ -176,17 +177,18 @@ class TestDatetime2(MixedClusterFixture): return f""" SELECT DateTime::MakeDate(DateTime::StartOfYear(DateTime::Split(d))), - DateTime::MakeDate(DateTime::EndOfYear(DateTime::Split(d))), DateTime::MakeDate(DateTime::StartOfQuarter(DateTime::Split(d))), - DateTime::MakeDate(DateTime::EndOfQuarter(DateTime::Split(d))), DateTime::MakeDate(DateTime::StartOfMonth(DateTime::Split(d))), - DateTime::MakeDate(DateTime::EndOfMonth(DateTime::Split(d))), DateTime::MakeDate(DateTime::StartOfWeek(DateTime::Split(d))), - DateTime::MakeDate(DateTime::EndOfWeek(DateTime::Split(d))), DateTime::MakeDate(DateTime::StartOfDay(DateTime::Split(d))), - DateTime::MakeDate(DateTime::EndOfDay(DateTime::Split(d))), DateTime::MakeDate(DateTime::StartOf(DateTime::Split(d), DateTime::IntervalFromDays(val))), - DateTime::MakeDate(DateTime::EndOf(DateTime::Split(d), DateTime::IntervalFromDays(val))) + -- not supported in 24-4: https://st.yandex-team.ru/YQL-19644 + -- DateTime::MakeDate(DateTime::EndOfQuarter(DateTime::Split(d))), + -- DateTime::MakeDate(DateTime::EndOfMonth(DateTime::Split(d))), + -- DateTime::MakeDate(DateTime::EndOfDay(DateTime::Split(d))), + -- DateTime::MakeDate(DateTime::EndOfWeek(DateTime::Split(d))), + -- DateTime::MakeDate(DateTime::EndOfYear(DateTime::Split(d))), + -- DateTime::MakeDate(DateTime::EndOf(DateTime::Split(d), DateTime::IntervalFromDays(val))) FROM {self.table_name}; """ diff --git a/ydb/tests/compatibility/udf/test_digest.py b/ydb/tests/compatibility/udf/test_digest.py new file mode 100644 index 00000000000..81af87c5dfd --- /dev/null +++ b/ydb/tests/compatibility/udf/test_digest.py @@ -0,0 +1,100 @@ +# -*- coding: utf-8 -*- +import pytest +from ydb.tests.library.compatibility.fixtures import MixedClusterFixture +from ydb.tests.oss.ydb_sdk_import import ydb +import random + + +class TestDigest(MixedClusterFixture): + rows = 100 + table_name = 'digest_test' + + @pytest.fixture(autouse=True, scope="function") + def setup(self): + yield from self.setup_cluster() + + def generate_create_table(self): + return f""" + CREATE TABLE {self.table_name} ( + id Uint64, + text String, + number Uint64, + PRIMARY KEY(id) + ) WITH ( + PARTITION_AT_KEYS = ({", ".join(str(i) for i in range(1, self.rows))}), + AUTO_PARTITIONING_MIN_PARTITIONS_COUNT = {self.rows} + ); + """ + + def generate_insert(self): + header = f"UPSERT INTO {self.table_name} (id, text, number) VALUES\n" + rows = [] + + for i in range(1, self.rows + 1): + text = f"Text_{random.randint(1000, 9999)}" + number = random.randint(1_000_000, 9_999_999) + rows.append(f'({i}, "{text}", {number})') + + return header + ",\n".join(rows) + ";" + + def q_digest(self): + return f""" + SELECT + Digest::Crc32c(text), + Digest::Crc64(text), + + Digest::Fnv32(text), + Digest::Fnv64(text), + + Digest::MurMurHash(text), + Digest::MurMurHash32(text), + Digest::MurMurHash2A(text), + Digest::MurMurHash2A32(text), + + Digest::CityHash(text), + Digest::CityHash128(text), + + Digest::NumericHash(number), + + Digest::Md5Hex(text), + Digest::Md5Raw(text), + Digest::Md5HalfMix(text), + + Digest::Argon2(text, "1234567890"), + + Digest::Blake2B(text), + Digest::Blake2B(text, "key"), + + Digest::SipHash(1, 2, text), + Digest::HighwayHash(1, 2, 3, 4, text), + + Digest::FarmHashFingerprint(number), + Digest::FarmHashFingerprint2(number, number), + Digest::FarmHashFingerprint32(text), + Digest::FarmHashFingerprint64(text), + Digest::FarmHashFingerprint128(text), + + Digest::SuperFastHash(text), + + Digest::Sha1(text), + Digest::Sha256(text), + + Digest::IntHash64(number), + + Digest::XXH3(text), + Digest::XXH3_128(text) + FROM {self.table_name}; + """ + + def test_digest_all(self): + with ydb.QuerySessionPool(self.driver) as session_pool: + + query = self.generate_create_table() + session_pool.execute_with_retries(query) + + query = self.generate_insert() + session_pool.execute_with_retries(query) + + query = self.q_digest() + result = session_pool.execute_with_retries(query) + assert len(result[0].rows) > 0 diff --git a/ydb/tests/compatibility/ya.make b/ydb/tests/compatibility/ya.make index e90c4150b28..e42fb342ee8 100644 --- a/ydb/tests/compatibility/ya.make +++ b/ydb/tests/compatibility/ya.make @@ -15,7 +15,8 @@ TEST_SRCS( test_stress.py test_statistics.py test_rolling.py - test_datetime2.py + udf/test_datetime2.py + udf/test_digest.py ) SIZE(LARGE) |