@outsmartly/bigquery-collector
v0.0.4
Published
Collector that writes to BigQuery from within Outsmartly Intercept
Downloads
18
Keywords
Readme
BigQuery Collector for use with Outsmartly intercepts
This allows you to post events directly into BigQuery using Outsmartly's edge as a collector.
Getting Started
Before using you will need to create a BigQuery project, dataset, and table(s). You will also need to create a Service Account and download the JSON with permissions to write to your BigQuery project.
Install
npm install --save @outsmartly/bigquery-collector
Adding to your outsmartly.config.js
import { bigQueryCollector } from "@outsmartly/bigquery-collector";
import { serviceAccount } from "./service-account";
const collectorConfig = {
client_email: serviceAccount.client_email,
private_key_id: serviceAccount.private_key_id,
private_key: serviceAccount.private_key,
project_id: serviceAccount.project_id,
dataset: "Testing_001",
collectorPathname: "/__analytics__",
debug: true, // if debug is true then you will see the response returned from BigQuery
};
const [bigQueryEndpoint] = bigQueryCollector(collectorConfig);
export default {
// ...
routes: [
bigQueryEndpoint,
// ...
],
};
Sending events from client-side:
fetch(collectorPathname, {
method: "POST",
body: JSON.stringify({
// this is your table name
table: "myTableName",
// this is the row you would like to write
row: {
hello: "hi",
another: "what up",
},
}),
headers: {
"Content-Type": "application/json",
},
});
Optional server (edge) side tracking
You can optionally destructure an additional async function that will allow you to write directly to BigQuery.
import { bigQueryCollector } from "@outsmartly/bigquery-collector";
import { serviceAccount } from "./service-account";
const collectorConfig = {
client_email: serviceAccount.client_email,
private_key_id: serviceAccount.private_key_id,
private_key: serviceAccount.private_key,
project_id: serviceAccount.project_id,
dataset: "Testing_001",
collectorPathname: "/__analytics__",
debug: true, // if debug is true then you will see the response returned from BigQuery
};
const [bigQueryEndpoint, writeToBigQuery] = bigQueryCollector(collectorConfig);
export default {
// ...
routes: [
{
path: "*",
async intercept(event) {
const request = event.request;
const url = new URL(request.url);
const { pathname } = url;
const table = "edgeLogs";
const rows = [
{
json: {
pathname,
},
},
];
event.waitUntil(writeToBigQuery(table, rows));
// continue to other intercepts / overrides
return;
},
},
bigQueryEndpoint,
// ...
],
};