googleapis / googleapis/google-cloud-python

Support calling SAFE_CAST via sqlalchemy

Ouverte
#15,779 1 commentaire 0 réactions 1 personne assignée Réclamée par @suzmue Voir sur GitHub
api: bigquery
Langage dominant
Python
Étoiles
5.4k
Forks
1.8k
Merge moyen
3 j 4 h
PR mergées (30 j)
122

Description

**Is your feature request related to a problem? Please describe.**
I could not find a way to use [SAFE_CAST](https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#safe_casting) which returns NULL if the cast fails rather than failing the query.

**Describe the solution you'd like**
A custom `safe_cast` function provided by the library that compiles to `SAFE_CAST`.

**Describe alternatives you've considered**
I can implement a custom `safe_cast` function within my codebase. But, I would have to subclass `sqlalchemy.sql.Cast` (say `SafeCast`) and override the `visit_cast` function in the bigquery dialect to compile `SafeCast` into `SAFE_CAST(...)` instead of `CAST(...).

```python
class SafeCast(Cast):
pass

def safe_cast(col: ColumnElement, type_: TypeEngine)) -> SafeCast:
return SafeCast(col, type_)

# Define custom Bigquery dialect and compiler with
def visit_cast(self, cast, **kwargs):
if isinstance(cast, SafeCast):
return "SAFE_CAST(%s AS %s)" % (
cast.clause._compiler_dispatch(self, **kwargs),
cast.typeclause._compiler_dispatch(self, **kwargs),
)
else:
return super().visit_cast(cast, **kwargs)

```

**Additional context**
Add any other context or screenshots about the feature request here.

Guide de contribution

Ouvrir le guide de contribution

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.