是的,我们可以使用Cloud Functions来创建一个触发器,一旦BigQuery完成从Cloud Storage上传文件或通过流式传递插入数据,它将自动调用端点。
以下是完成此操作的步骤:
以下是一个Cloud Functions的示例代码,该函数在上传至Storage后,上传的文件将被导入到BigQuery表中:
import base64
import json
from google.cloud import bigquery
def hello_gcs(event, context):
# 解码云存储事件数据
message = json.loads(base64.b64decode(event['data']).decode('utf-8'))
# 指定BigQuery表名
dataset_id = 'my_dataset'
table_id = 'my_table'
# 创建BigQuery客户端
client = bigquery.Client()
# 向BigQuery表加载数据
job_config = bigquery.LoadJobConfig(schema=[
bigquery.SchemaField('name', 'STRING'),
bigquery.SchemaField('post_abbr', 'STRING'),
],
write_disposition='WRITE_APPEND')
# 设置Cloud Storage路径
uri = 'gs://' + message['bucket'] + '/' + message['name']
load_job = client.load_table_from_uri(uri, dataset_id + '.' + table_id, job_config=job_config)
load_job.result()
print('File import complete')
在此代码示例中,我们使用了Google Cloud SDK中的BigQuery和Cloud Storage Python客户端库来完成此操作。实际使用时,您可以为函数添加自己的逻辑,以适应你的业务需求。
我们在Cloud Storage中为这个函数创建了一个触发器,该触发器将在文件被添加到特定文件夹中时自动触发。
{
"name": "projects/my_project_id/triggers/my_trigger_id",
"eventTrigger": {
"resource": "