bigquery-firestore-export/extension.yaml (269 lines of code) (raw):
# Copyright 2023 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
name: bigquery-firestore-export
version: 0.1.5
specVersion: v1beta
displayName: Export BigQuery to Firestore
description: Schedules BigQuery queries and exports the results to Firestore.
icon: icon.png
tags: [utilities]
license: Apache-2.0
sourceUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/main/bigquery-firestore-export
releaseNotesUrl: https://github.com/GoogleCloudPlatform/firebase-extensions/main/bigquery-firestore-export/CHANGELOG.md
author:
authorName: Google Cloud
url: https://cloud.google.com
contributors:
- authorName: Jeff Huang
url: https://github.com/huangjeff5
- authorName: Invertase
email: oss@invertase.io
url: https://github.com/invertase
billingRequired: true
apis:
- apiName: bigquery.googleapis.com
reason: Running queries
- apiName: bigquerydatatransfer.googleapis.com
reason: Scheduling data transfers
roles:
- role: datastore.user
reason:
Allows this extension to access Cloud Firestore to write query results
from BQ.
- role: bigquery.admin
reason:
Allows this extension to create transfer configs in BQ, and query BQ
destination tables.
- role: pubsub.admin
reason:
Allows DTS to grant DTS service account permission to send notifications
to Pub/Sub topic
resources:
- name: processMessages
type: firebaseextensions.v1beta.function
properties:
location: ${LOCATION}
runtime: nodejs20
eventTrigger:
eventType: google.pubsub.topic.publish
resource: projects/${PROJECT_ID}/topics/ext-${EXT_INSTANCE_ID}-processMessages
- name: upsertTransferConfig
type: firebaseextensions.v1beta.function
description: >-
Creates transfer config if doesn't exist yet.
properties:
location: ${LOCATION}
runtime: nodejs20
availableMemoryMb: 1024
taskQueueTrigger: {}
params:
- param: LOCATION
label: Cloud Functions location
description: >-
Where do you want to deploy the functions created for this extension? You
usually want a location close to your database. For help selecting a
location, refer to the [location selection
guide](https://firebase.google.com/docs/functions/locations).
type: select
options:
- label: Iowa (us-central1)
value: us-central1
- label: South Carolina (us-east1)
value: us-east1
- label: Northern Virginia (us-east4)
value: us-east4
- label: Los Angeles (us-west2)
value: us-west2
- label: Salt Lake City (us-west3)
value: us-west3
- label: Las Vegas (us-west4)
value: us-west4
- label: Warsaw (europe-central2)
value: europe-central2
- label: Belgium (europe-west1)
value: europe-west1
- label: London (europe-west2)
value: europe-west2
- label: Frankfurt (europe-west3)
value: europe-west3
- label: Zurich (europe-west6)
value: europe-west6
- label: Taiwan (asia-east1)
value: asia-east1
- label: Hong Kong (asia-east2)
value: asia-east2
- label: Tokyo (asia-northeast1)
value: asia-northeast1
- label: Osaka (asia-northeast2)
value: asia-northeast2
- label: Seoul (asia-northeast3)
value: asia-northeast3
- label: Mumbai (asia-south1)
value: asia-south1
- label: Singapore (asia-southeast1)
value: asia-southeast1
- label: Jakarta (asia-southeast2)
value: asia-southeast2
- label: Montreal (northamerica-northeast1)
value: northamerica-northeast1
- label: Sao Paulo (southamerica-east1)
value: southamerica-east1
- label: Sydney (australia-southeast1)
value: australia-southeast1
default: us-central1
required: true
immutable: true
- param: BIGQUERY_DATASET_LOCATION
label: BigQuery Dataset Location
description: >-
What is the location of the BigQuery dataset referenced in the query?
type: select
options:
- label: Columbus, Ohio (us-east5)
value: us-east5
- label: Iowa (us-central1)
value: us-central1
- label: Las Vegas (us-west4)
value: us-west4
- label: Los Angeles (us-west2)
value: us-west2
- label: Montréal (northamerica-northeast1)
value: northamerica-northeast1
- label: Northern Virginia (us-east4)
value: us-east4
- label: Oregon (us-west1)
value: us-west1
- label: Salt Lake City (us-west3)
value: us-west3
- label: São Paulo (southamerica-east1)
value: southamerica-east1
- label: Santiago (southamerica-west1)
value: southamerica-west1
- label: South Carolina (us-east1)
value: us-east1
- label: Toronto (northamerica-northeast2)
value: northamerica-northeast2
- label: Delhi (asia-south2)
value: asia-south2
- label: Hong Kong (asia-east2)
value: asia-east2
- label: Jakarta (asia-southeast2)
value: asia-southeast2
- label: Melbourne (australia-southeast2)
value: australia-southeast2
- label: Mumbai (asia-south1)
value: asia-south1
- label: Osaka (asia-northeast2)
value: asia-northeast2
- label: Seoul (asia-northeast3)
value: asia-northeast3
- label: Singapore (asia-southeast1)
value: asia-southeast1
- label: Sydney (australia-southeast1)
value: australia-southeast1
- label: Taiwan (asia-east1)
value: asia-east1
- label: Tokyo (asia-northeast1)
value: asia-northeast1
- label: Belgium (europe-west1)
value: europe-west1
- label: Finland (europe-north1)
value: europe-north1
- label: Frankfurt (europe-west3)
value: europe-west3
- label: London (europe-west2)
value: europe-west2
- label: Madrid (europe-southwest1)
value: europe-southwest1
- label: Milan (europe-west8)
value: europe-west8
- label: Netherlands (europe-west4)
value: europe-west4
- label: Paris (europe-west9)
value: europe-west9
- label: Warsaw (europe-central2)
value: europe-central2
- label: Zürich (europe-west6)
value: europe-west6
- label: US Multi-Region (US)
value: US
- label: EU Mutli-Region (EU)
value: EU
default: US
required: true
- param: DISPLAY_NAME
label: Display Name
description: >-
What display name would you like to use?
type: string
example: Daily Rollup - Customer Transactions
required: true
immutable: true
- param: DATASET_ID
label: Dataset ID
description: >-
What's the BigQuery destination dataset you'd like to use? Each transfer
run will write to a table in this destination dataset.
type: string
example: customer_data
required: true
- param: TABLE_NAME
label: Destination Table Name
description: >-
What's the destination table name prefix you'd like to use? Each transfer
run will write to the table with this name, postfixed with the runtime.
type: string
example: transactions
required: true
- param: QUERY_STRING
label: Query String
description: >-
What's the BQ query you'd like to execute?
type: string
example: SELECT * from <PROJECT_ID>.customer_data.transactions
required: true
- param: PARTITIONING_FIELD
label: Partitioning Field
description: >-
What's the partitioning field on the destination table ID? Leave empty if
not using a partitioning field.
type: string
example: timestamp
required: false
- param: SCHEDULE
label: Schedule
description: >-
What's the execution schedule you'd like to use for this query?
type: string
example: every 15 minutes
required: true
- param: PUB_SUB_TOPIC
label: Pub Sub Topic
description: >-
What's the Pub Sub topic to write messages to when the scheduled query
finishes executing?
type: string
example: test
required: true
immutable: true
- param: COLLECTION_PATH
label: Firestore Collection
description: >-
What's the top-level Firestore Collection to store transfer configs, run
metadata, and query output?
type: string
validationRegex: '^[^/]+(/[^/]+/[^/]+)*$'
validationErrorMessage: Must be a valid Cloud Firestore Collection
example: transferConfigs
default: transferConfigs
required: true
lifecycleEvents:
onInstall:
function: upsertTransferConfig
processingMessage: Creating a new transfer config and scheduling the query.
onUpdate:
function: upsertTransferConfig
processingMessage:
Creating or updating the transfer config associated with this extension.
onConfigure:
function: upsertTransferConfig
processingMessage:
Creating or updating the transfer config associated with this extension.