BigQuery
BigQuery is a completely serverless and cost-effective enterprise data warehouse that works across clouds and scales with your data, with BI, machine learning and AI built in.
The BigQuery Wrapper allows you to read and write data from BigQuery within your Postgres database.
Supported Data Types#
Postgres Type | BigQuery Type |
---|---|
boolean | BOOL |
bigint | INT64 |
double precision | FLOAT64 |
numeric | NUMERIC |
text | STRING |
varchar | STRING |
date | DATE |
timestamp | DATETIME |
timestamp | TIMESTAMP |
Preparation#
Before you get started, make sure the wrappers
extension is installed on your database:
and then create the foreign data wrapper:
Secure your credentials (optional)#
By default, Postgres stores FDW credentials inide pg_catalog.pg_foreign_server
in plain text. Anyone with access to this table will be able to view these credentials. Wrappers is designed to work with Vault, which provides an additional level of security for storing credentials. We recommend using Vault to store your credentials.
Connecting to BigQuery#
We need to provide Postgres with the credentials to connect to BigQuery, and any additional options. We can do this using the create server
command:
Creating Foreign Tables#
The BigQuery Wrapper supports data reads and writes from BigQuery.
Integration | Select | Insert | Update | Delete | Truncate |
---|---|---|---|---|---|
BigQuery | ✅ | ✅ | ✅ | ✅ | ❌ |
For example:
Foreign table options#
The full list of foreign table options are below:
-
table
- Source table or view name in BigQuery, required.This can also be a subquery enclosed in parentheses, for example,
Note: When using subquery in this option, full qualitified table name must be used.
-
location
- Source table location, optional. Default is 'US'. -
timeout
- Query request timeout in milliseconds, optional. Default is '30000' (30 seconds). -
rowid_column
- Primary key column name, optional for data scan, required for data modify
Inserting Rows & the Streaming Buffer#
This foreign data wrapper uses BigQuery’s insertAll
API method to create a streamingBuffer
with an associated partition time. Within that partition time, the data cannot be updated, deleted, or fully exported. Only after the time has elapsed (up to 90 minutes according to BigQuery’s documentation); can you perform operations.
If you attempt an UPDATE
or DELETE
statement on rows while in the streamingBuffer, you will get an error of UPDATE
or DELETE
statement over table datasetName - note that tableName would affect rows in the streaming buffer, which is not supported.
Examples#
Some examples on how to use BigQuery foreign tables.
Let's prepare the source table in BigQuery first:
Basic example#
This example will create a "foreign table" inside your Postgres database called people
and query its data:
Data modify example#
This example will modify data in a "foreign table" inside your Postgres database called people
, note that rowid_column
option is mandatory: