GoogleCloudPlatform / professional-services-data-validator

Utility to compare data between homogeneous or heterogeneous environments to ensure source and target tables match
Apache License 2.0
385 stars 108 forks source link

RDS PostgreSQL to AlloyDB: Unable to create first/last aggregates: syntax error at or near "AGGREGATE" #1154

Closed itsabhisharma23 closed 1 month ago

itsabhisharma23 commented 1 month ago

Customer is trying to run DVT validations on source PostgreSQL(AWS RDS) and destination AlloyDB. All the validations fails with the same error. They are able to use psql client to login to both source and destination and run queries independently.

ERROR LOGS: VT (google-pso-data-validator) is installed. Version: 4.3.0 adding postgresql source connection.... 05/31/2024 05:02:49 PM-INFO: Success! Config output written to /home/ankur_jain_narvar_com/.config/google-pso-data-validator/postgre_source_narvarapps.connection.json adding postgresql distination connection.... 05/31/2024 05:02:51 PM-INFO: Success! Config output written to /home/ankur_jain_narvar_com/.config/google-pso-data-validator/alloydb_destination_narvarapps.connection.json /home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/ibis/backends/postgres/init.py:162: UserWarning: Unable to create first/last aggregates: syntax error at or near "AGGREGATE" LINE 6: CREATE OR REPLACE AGGREGATE public._ibis_first (anyelement) ... ^

warnings.warn(f"Unable to create first/last aggregates: {e}") Traceback (most recent call last): File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block

The above exception was the direct cause of the following exception:

Traceback (most recent call last): File "/home/ankur_jain_narvar_com/env/bin/data-validation", line 8, in sys.exit(main()) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/main.py", line 633, in main validate(args) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/main.py", line 611, in validate run(args) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/main.py", line 578, in run run_validations(args, config_managers) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/main.py", line 534, in run_validations run_validation(config_manager, dry_run=args.dry_run, verbose=args.verbose) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/main.py", line 507, in run_validation validator.execute() File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/data_validation.py", line 96, in execute result_df = self._execute_validation( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/data_validation.py", line 270, in _execute_validation source_query = validation_builder.get_source_query() File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/validation_builder.py", line 361, in get_source_query table = self.config_manager.get_source_ibis_table() File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/config_manager.py", line 342, in get_source_ibis_table self._source_ibis_table = clients.get_ibis_table( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/data_validation/clients.py", line 134, in get_ibis_table return client.table(table_name, database=database_name, schema=schema_name) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/ibis/backends/base/sql/alchemy/init.py", line 519, in table sqla_table = self._get_sqla_table(name, database=database, schema=schema) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/ibis/backends/base/sql/alchemy/init.py", line 422, in _get_sqla_table table = sa.Table( File "", line 2, in new File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/util/deprecations.py", line 375, in warned return fn(*args, kwargs) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 619, in new metadata._remove_table(name, schema) File "/home/ankur_jain_narvarcom/env/lib/python3.9/site-packages/sqlalchemy/util/langhelpers.py", line 70, in exit compat.raise( File "/home/ankur_jain_narvarcom/env/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise raise exception File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 614, in new table._init(name, metadata, *args, *kw) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 689, in _init self._autoload( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/sql/schema.py", line 724, in _autoload conn_insp.reflect_table( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/reflection.py", line 774, in reflect_table for col_d in self.get_columns( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/reflection.py", line 497, in get_columns col_defs = self.dialect.get_columns( File "", line 2, in get_columns File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/reflection.py", line 55, in cache ret = fn(self, con, args, kw) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.py", line 3856, in get_columns table_oid = self.get_table_oid( File "", line 2, in get_table_oid File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/reflection.py", line 55, in cache ret = fn(self, con, *args, **kw) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/dialects/postgresql/base.py", line 3733, in get_table_oid c = connection.execute(s, dict(table_name=table_name, schema=schema)) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1385, in execute return meth(self, multiparams, params, _EMPTY_EXECUTION_OPTS) File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/sql/elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1577, in _execute_clauseelement ret = self._execute_context( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1953, in _execute_context self._handle_dbapi_exception( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 2134, in _handle_dbapiexception util.raise( File "/home/ankur_jain_narvarcom/env/lib/python3.9/site-packages/sqlalchemy/util/compat.py", line 211, in raise raise exception File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/base.py", line 1910, in _execute_context self.dialect.do_execute( File "/home/ankur_jain_narvar_com/env/lib/python3.9/site-packages/sqlalchemy/engine/default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.InternalError: (psycopg2.errors.InFailedSqlTransaction) current transaction is aborted, commands ignored until end of transaction block

[SQL: SELECT c.oid FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace WHERE (n.nspname = %(schema)s) AND c.relname = %(table_name)s AND c.relkind in ('r', 'v', 'm', 'f', 'p') ] [parameters: {'schema': 'information_schema', 'table_name': 'tables'}] (Background on this error at: https://sqlalche.me/e/

SCRIPT TO RUN DVT: data-validation validate column \ -sc $CONN_NAME \ -tc $DEST_CONN_NAME \ --tables-list information_schema.tables \ --filters "table_schema = '$schema'" \ -bqrh $PROJECT_ID.$BQ_DVT_DATASET.results

piyushsarraf commented 1 month ago

@itsabhisharma23 which version of postgres are we using here?

rajpantangi commented 1 month ago

it's 11.22 on the source RDS

nehanene15 commented 1 month ago

Closing since this was resolved by upgrading to the latest DVT version.