### Description

#27647 has introduced filtering for invalid schemas in Hive hook based on the characters `;` and `!`. I'm wondering if a more generic filtering could be introduced, e.g. one that adheres to the regex `[^a-z0-9_]`, since Hive schemas (and table names) can only contain alphanumeric characters and the character `_`.

Note: since the Hive metastore [stores schemas and tables in lowercase](https://stackoverflow.com/questions/57181316/how-to-keep-column-names-in-camel-case-in-hive/57183048#57183048), checking against `[^a-z0-9_]` is probably better than `[^a-zA-Z0-9_]`.

### Use case/motivation

Ensure that Hive schemas used in `apache-airflow-providers-apache-hive` hooks contain no invalid characters.

### Related issues

_No response_

### Are you willing to submit a PR?

- [X] Yes I am willing to submit a PR!

### Code of Conduct

- [X] I agree to follow this project's [Code of Conduct](https://github.com/apache/airflow/blob/main/CODE_OF_CONDUCT.md)

env_context.update(hive_conf)
                for k, v in env_context.items():
                    cur.execute(f"set {k}={v}")
            for statement in sql:
                cur.execute(statement)
                
                lowered_statement = statement.lower().strip()
                if (
                    lowered_statement.startswith("select")
                    or lowered_statement.startswith("with")
                    or lowered_statement.startswith("show")
                    or (lowered_statement.startswith("set") and "=" not in lowered_statement)
                ):
                    description = cur.description
                    if previous_description and previous_description != description:
                        message = f"""The statements are producing different descriptions:
                                     Current: {repr(description)}
                                     Previous: {repr(previous_description)}"""
                        raise ValueError(message)
                    elif not previous_description:
                        previous_description = description
                        yield description
                    try:
                        
                        
                        
                        yield from cur
                    except ProgrammingError:
                        self.log.debug("get_results returned no records")
    def get_results(