gpt4 book ai didi

node.js - 如何使 Firebase 数据库与 BigQuery 保持同步?

转载 作者:搜寻专家 更新时间:2023-11-01 00:38:31 24 4
gpt4 key购买 nike

我们正在进行一个涉及大量数据的项目。现在我们最近阅读了有关 Google BigQuery 的信息。但是我们如何将数据导出到这个平台呢?我们已经看到将日志导入 Google BigQuery 的示例。但这不包含有关更新和删除数据的信息(仅插入)。

因此我们的对象能够更新它们的数据。我们对 BigQuery 表的查询数量有限。我们如何在不超过 BigQuery 配额限制的情况下同步我们的数据。

我们当前的函数代码:

'use strict';

// Default imports.

const functions = require('firebase-functions');
const bigQuery = require('@google-cloud/bigquery')();

// If you want to change the nodes to listen to REMEMBER TO change the constants below.
// The 'id' field is AUTOMATICALLY added to the values, so you CANNOT add it.

const ROOT_NODE = 'categories';
const VALUES = [
'name'
];

// This function listens to the supplied root node.
// When the root node is completed empty all of the Google BigQuery rows will be removed.
// This function should only activate when the root node is deleted.

exports.root = functions.database.ref(ROOT_NODE).onWrite(event => {
if (event.data.exists()) {
return;
}

return bigQuery.query({
query: [
'DELETE FROM `stampwallet.' + ROOT_NODE + '`',
'WHERE true'
].join(' '),
params: []
});
});

// This function listens to the supplied root node, but on child added/removed/changed.
// When an object is inserted/deleted/updated the appropriate action will be taken.

exports.children = functions.database.ref(ROOT_NODE + '/{id}').onWrite(event => {
const id = event.params.id;

if (!event.data.exists()) {
return bigQuery.query({
query: [
'DELETE FROM `stampwallet.' + ROOT_NODE + '`',
'WHERE id = ?'
].join(' '),
params: [
id
]
});
}

const item = event.data.val();

if (event.data.previous.exists()) {
let update = [];
for (let index = 0; index < VALUES.length; index++) {
const value = VALUES[index];

update.push(item[value]);
}
update.push(id);

return bigQuery.query({
query: [
'UPDATE `stampwallet.' + ROOT_NODE + '`',
'SET ' + VALUES.join(' = ?, ') + ' = ?',
'WHERE id = ?'
].join(' '),
params: update
});
}

let template = [];
for (let index = 0; index < VALUES.length; index++) {
template.push('?');
}

let create = [];
create.push(id);
for (let index = 0; index < VALUES.length; index++) {
const value = VALUES[index];

create.push(item[value]);
}

return bigQuery.query({
query: [
'INSERT INTO `stampwallet.' + ROOT_NODE + '` (id, ' + VALUES.join(', ') + ')',
'VALUES (?, ' + template.join(', ') + ')'
].join(' '),
params: create
});
});

将 firebase 同步到 bigquery 的最佳方式是什么?

最佳答案

BigQuery 支持 UPDATE 和 DELETE,但不支持频繁使用 - BigQuery 是一个分析数据库,而不是事务数据库。

要将事务数据库与 BigQuery 同步,您可以使用以下方法:

使用 Firebase,您可以安排每天从他们的每日备份中加载 BigQuery:

关于node.js - 如何使 Firebase 数据库与 BigQuery 保持同步?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43262964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com