|
8 | 8 | from ydb.tests.fq.generic.utils.settings import Settings
|
9 | 9 |
|
10 | 10 |
|
11 |
| -class TestJoin: |
| 11 | +class TestJoinAnalytics: |
12 | 12 | @yq_all
|
13 | 13 | @pytest.mark.parametrize("mvp_external_ydb_endpoint", [{"endpoint": "tests-fq-generic-ydb:2136"}], indirect=True)
|
14 | 14 | @pytest.mark.parametrize("fq_client", [{"folder_id": "my_folder"}], indirect=True)
|
15 | 15 | @pytest.mark.parametrize("query_type", [fq.QueryContent.QueryType.ANALYTICS, fq.QueryContent.QueryType.STREAMING])
|
16 | 16 | def test_simple(self, fq_client: FederatedQueryClient, settings: Settings, query_type):
|
17 |
| - table_name = 'join_table' |
18 |
| - ch_conn_name = f'ch_conn_{table_name}' |
19 |
| - pg_conn_name = f'pg_conn_{table_name}' |
20 |
| - ydb_conn_name = f'ydb_conn_{table_name}' |
21 |
| - query_name = f'query_{table_name}' |
22 |
| - |
23 |
| - fq_client.create_postgresql_connection( |
24 |
| - name=pg_conn_name, |
25 |
| - database_name=settings.postgresql.dbname, |
26 |
| - database_id='postgresql_cluster_id', |
27 |
| - login=settings.postgresql.username, |
28 |
| - password=settings.postgresql.password, |
29 |
| - ) |
| 17 | + table_name = "join_table" |
| 18 | + ch_conn_name = f"ch_conn_{table_name}" |
| 19 | + gp_conn_name = f"gp_conn_{table_name}" |
| 20 | + pg_conn_name = f"pg_conn_{table_name}" |
| 21 | + ydb_conn_name = f"ydb_conn_{table_name}" |
| 22 | + query_name = f"query_{table_name}" |
30 | 23 |
|
31 | 24 | fq_client.create_clickhouse_connection(
|
32 | 25 | name=ch_conn_name,
|
33 | 26 | database_name=settings.clickhouse.dbname,
|
34 |
| - database_id='clickhouse_cluster_id', |
| 27 | + database_id="clickhouse_cluster_id", |
35 | 28 | login=settings.clickhouse.username,
|
36 | 29 | password=settings.clickhouse.password,
|
37 | 30 | )
|
38 | 31 |
|
| 32 | + fq_client.create_greenplum_connection( |
| 33 | + name=gp_conn_name, |
| 34 | + database_name=settings.greenplum.dbname, |
| 35 | + database_id="greenplum_cluster_id", |
| 36 | + login=settings.greenplum.username, |
| 37 | + password=settings.greenplum.password, |
| 38 | + ) |
| 39 | + |
| 40 | + fq_client.create_postgresql_connection( |
| 41 | + name=pg_conn_name, |
| 42 | + database_name=settings.postgresql.dbname, |
| 43 | + database_id="postgresql_cluster_id", |
| 44 | + login=settings.postgresql.username, |
| 45 | + password=settings.postgresql.password, |
| 46 | + ) |
| 47 | + |
39 | 48 | fq_client.create_ydb_connection(
|
40 | 49 | name=ydb_conn_name,
|
41 | 50 | database_id=settings.ydb.dbname,
|
42 | 51 | )
|
43 | 52 |
|
44 |
| - # FIXME: research why test starts failing if we add Greenplum |
45 |
| - sql = fR''' |
46 |
| - SELECT pg.data AS data_pg, ch.data AS data_ch, ydb.data AS data_ydb |
| 53 | + sql = Rf""" |
| 54 | + SELECT pg.data AS data_pg, ch.data AS data_ch, ydb.data AS data_ydb, gp.data AS data_gp |
47 | 55 | FROM {pg_conn_name}.{table_name} AS pg
|
48 | 56 | JOIN {ch_conn_name}.{table_name} AS ch
|
49 | 57 | ON pg.id = ch.id
|
50 | 58 | JOIN {ydb_conn_name}.{table_name} AS ydb
|
51 |
| - ON pg.id = ydb.id; |
52 |
| - ''' |
| 59 | + ON pg.id = ydb.id |
| 60 | + JOIN {gp_conn_name}.{table_name} AS gp |
| 61 | + ON pg.id = gp.id; |
| 62 | + """ |
53 | 63 |
|
54 | 64 | query_id = fq_client.create_query(query_name, sql, type=query_type).result.query_id
|
55 | 65 | fq_client.wait_query_status(query_id, fq.QueryMeta.COMPLETED)
|
56 | 66 |
|
57 | 67 | data = fq_client.get_result_data(query_id)
|
58 | 68 | result_set = data.result.result_set
|
59 | 69 | logging.debug(str(result_set))
|
60 |
| - assert len(result_set.columns) == 3 |
| 70 | + assert len(result_set.columns) == 4 |
61 | 71 | assert result_set.columns[0].name == "data_pg"
|
62 | 72 | assert result_set.columns[1].name == "data_ch"
|
63 | 73 | assert result_set.columns[2].name == "data_ydb"
|
| 74 | + assert result_set.columns[3].name == "data_gp" |
64 | 75 | assert len(result_set.rows) == 3
|
65 |
| - assert result_set.rows[0].items[0].bytes_value == b'pg10' |
66 |
| - assert result_set.rows[0].items[1].bytes_value == b'ch10' |
67 |
| - assert result_set.rows[0].items[2].bytes_value == b'ydb10', result_set |
68 |
| - assert result_set.rows[1].items[0].bytes_value == b'pg20' |
69 |
| - assert result_set.rows[1].items[1].bytes_value == b'ch20' |
70 |
| - assert result_set.rows[1].items[2].bytes_value == b'ydb20' |
71 |
| - assert result_set.rows[2].items[0].bytes_value == b'pg30' |
72 |
| - assert result_set.rows[2].items[1].bytes_value == b'ch30' |
73 |
| - assert result_set.rows[2].items[2].bytes_value == b'ydb30' |
| 76 | + assert result_set.rows[0].items[0].bytes_value == b"pg10" |
| 77 | + assert result_set.rows[0].items[1].bytes_value == b"ch10" |
| 78 | + assert result_set.rows[0].items[2].bytes_value == b"ydb10" |
| 79 | + assert result_set.rows[0].items[3].bytes_value == b"gp10" |
| 80 | + assert result_set.rows[1].items[0].bytes_value == b"pg20" |
| 81 | + assert result_set.rows[1].items[1].bytes_value == b"ch20" |
| 82 | + assert result_set.rows[1].items[2].bytes_value == b"ydb20" |
| 83 | + assert result_set.rows[1].items[3].bytes_value == b"gp20" |
| 84 | + assert result_set.rows[2].items[0].bytes_value == b"pg30" |
| 85 | + assert result_set.rows[2].items[1].bytes_value == b"ch30" |
| 86 | + assert result_set.rows[2].items[2].bytes_value == b"ydb30" |
| 87 | + assert result_set.rows[2].items[3].bytes_value == b"gp30" |
0 commit comments