Skip to content

BigQuery Adapter

Import datasets from BigQuery and export generated events back to BigQuery.

Install

bash
npm install @synode/adapter-bigquery @google-cloud/bigquery

Both @synode/core and @google-cloud/bigquery are peer dependencies.

Exporting Events

Write generated events to a BigQuery table using BigQueryAdapter:

typescript
import { BigQueryAdapter } from '@synode/adapter-bigquery';
import { generate, defineJourney, defineAdventure, defineAction } from '@synode/core';

const adapter = new BigQueryAdapter({
  projectId: 'my-gcp-project',
  datasetId: 'analytics',
  tableId: 'events',
  batchSize: 200,
  flushInterval: 3000,
});

await generate(journey, { users: 1000, adapter });

BigQueryAdapterOptions

OptionTypeDefaultDescription
projectIdstringrequiredGCP project ID
datasetIdstringrequiredBigQuery dataset ID
tableIdstringrequiredBigQuery table ID
batchSizenumber100Events to buffer before inserting
flushIntervalnumber5000Max ms before flushing partial batch
autoCreateTablebooleanfalseCreate table if missing
transform(row) => rownoneTransform each row before insert

Row Format

Events are serialized as flat rows:

ColumnTypeSource
idSTRINGevent.id
user_idSTRINGevent.userId
session_idSTRINGevent.sessionId
nameSTRINGevent.name
timestampSTRINGevent.timestamp (ISO 8601)
payloadSTRINGJSON.stringify(event.payload)

Use transform to customize the schema.

Importing Datasets

Load a BigQuery table as a synode dataset for use during generation:

typescript
import { importFromBigQuery } from '@synode/adapter-bigquery';
import { generate } from '@synode/core';

const products = await importFromBigQuery({
  projectId: 'my-gcp-project',
  datasetId: 'ecommerce',
  tableId: 'products',
  id: 'products',
  name: 'Product Catalog',
  where: 'active = true',
  limit: 5000,
});

await generate(journey, {
  users: 1000,
  preloadedDatasets: [products],
  adapter,
});

BigQueryImportOptions

OptionTypeDefaultDescription
projectIdstringrequiredGCP project ID
datasetIdstringrequiredBigQuery dataset ID
tableIdstringrequiredSource table
idstringrequiredSynode dataset ID
namestringrequiredSynode dataset name
wherestringnoneSQL WHERE clause
limitnumberunlimitedMax rows to import