Skip to content

fastflowtransform.executors._bigquery_mixin

BigQueryIdentifierMixin

Mixin that provides common BigQuery helpers (identifier quoting, dataset creation). Expect subclasses to define: self.project, self.dataset, self.client.

Source code in src/fastflowtransform/executors/_bigquery_mixin.py
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class BigQueryIdentifierMixin:
    """
    Mixin that provides common BigQuery helpers (identifier quoting, dataset creation).
    Expect subclasses to define: self.project, self.dataset, self.client.
    """

    project: str
    dataset: str
    client: bigquery.Client

    @staticmethod
    def _bq_quote(value: str) -> str:
        return value.replace("`", "\\`")

    def _qualified_identifier(
        self, relation: str, project: str | None = None, dataset: str | None = None
    ) -> str:
        proj = project or self.project
        dset = dataset or self.dataset
        return f"`{self._bq_quote(proj)}.{self._bq_quote(dset)}.{self._bq_quote(relation)}`"

    def _ensure_dataset(self) -> None:
        ds_id = f"{self.project}.{self.dataset}"
        try:
            self.client.get_dataset(ds_id)
        except NotFound:
            self.client.create_dataset(bigquery.Dataset(ds_id))