# BigQuery

> Seed BigQuery tables and check the rows your services write.

Source: https://axx.nimbusxr.us/references/steps/gcp-bigquery/

Seed BigQuery tables and check the rows your services write.

The steps use the scenario's project (`the {word} gcp project with the following properties:`, from gcp-core). Tables are named `dataset.table` (in the project) or `project.dataset.table`.

A **seed** is a YAML or JSON file that maps tables to the rows to insert (a streaming insert, `tabledata.insertAll`):

```yaml
billing.carrier_rates:
  - carrier: KESTREL
    service: express
    price_per_kg: 1.35
```

**Checks** wait (10 seconds unless `within {duration}` says otherwise) until the table has a row, or a number of rows, meeting every condition: `column | value` rows, with a dotted path into `RECORD` columns (`address.city`), compared as text: numbers as written, `NUMERIC` as its decimal, `TIMESTAMP` in RFC 3339 (`2026-09-24T09:30:00Z`), `DATE` as `2026-09-24`; `null` for NULL. A check reads the columns its conditions name, of up to 5,000 rows of the table: check the tables your scenarios write, not warehouse-size ones.

## `gcp-bigquery.seed`

```gherkin
Given a {filepath} bigquery seed
```

Insert the rows of a seed file (resolved against `resources`): YAML or JSON mapping tables to lists of rows.

**Parameters:** `{filepath}` (A file of the project, without whitespace: a path relative to the `resources` directories or to the directory of axx.yaml, or an absolute path. Editors link it to the file)

**Example:**

```gherkin
Given a seeds/carrier-rates.yaml bigquery seed
```

_Since 0.1.0._

## `gcp-bigquery.row`

```gherkin
Then [[within {duration} ]]the {word} bigquery table has a row where:
  | ... | ... |
```

Wait (10s, or the given time) until the table has a row meeting every `column | value` row.

**Variants** (optional parts in `[[...]]` above):

- `the {word} bigquery table has a row where:`
- `within {duration} the {word} bigquery table has a row where:`

**Parameters:** `{duration}` (A duration in seconds or minutes, e.g. `5s` or `2m`), `{word}` (one word, no spaces)

**Example:**

```gherkin
Then within 30s the billing.invoice_lines bigquery table has a row where:
```

_Since 0.1.0._

## `gcp-bigquery.rows`

```gherkin
Then [[within {duration} ]]the {word} bigquery table has {int} row(s) where:
  | ... | ... |
```

Wait (10s, or the given time) until exactly that many rows of the table meet every `column | value` row.

**Variants** (optional parts in `[[...]]` above):

- `the {word} bigquery table has {int} row(s) where:`
- `within {duration} the {word} bigquery table has {int} row(s) where:`

**Parameters:** `{duration}` (A duration in seconds or minutes, e.g. `5s` or `2m`), `{word}` (one word, no spaces), `{int}` (a 32-bit integer)

**Example:**

```gherkin
Then the billing.invoice_lines bigquery table has 3 rows where:
```

_Since 0.1.0._
