Google cloud platform YAML文件到Google BigQuery。我在谷歌云平台上的架构应该是什么?
这个问题涉及到在谷歌云平台上,对于我的特定用例,什么样的架构才是合适的 我有一堆Google cloud platform YAML文件到Google BigQuery。我在谷歌云平台上的架构应该是什么?,google-cloud-platform,google-bigquery,google-cloud-functions,google-cloud-dataflow,Google Cloud Platform,Google Bigquery,Google Cloud Functions,Google Cloud Dataflow,这个问题涉及到在谷歌云平台上,对于我的特定用例,什么样的架构才是合适的 我有一堆.yaml文件,我想使用谷歌云平台的产品运行SQL查询。这些文件的总大小不会超过30MB,每个文件的平均大小约为50KB。新文件也不会经常添加,大约每年添加2-3次 我想我可以设计一个架构,所有这些文件都保存在云存储上,我运行一个数据流管道/云函数,将这些.yaml文件转换为.json,然后将它们导入BigQuery以运行SQL查询 什么是合适的方法?使用数据流或云函数进行预处理还是完全使用其他功能 我对Python
.yaml
文件,我想使用谷歌云平台的产品运行SQL查询。这些文件的总大小不会超过30MB,每个文件的平均大小约为50KB。新文件也不会经常添加,大约每年添加2-3次
我想我可以设计一个架构,所有这些文件都保存在云存储上,我运行一个数据流管道/云函数,将这些.yaml
文件转换为.json
,然后将它们导入BigQuery以运行SQL查询
什么是合适的方法?使用数据流或云函数进行预处理还是完全使用其他功能
我对Python也很熟悉,所以我会寻找一个结合了Python的解决方案。例如,Dataflow有一个Python SDK。您提出的任何想法都不适合 启动云数据流的时间将比实际处理时间长(启动10分钟,处理1秒)。您正试图使用Mac卡车运送牙签 30 MB的YAML文件很小。编写Dataflow python脚本时,您已经将YAML文件转换为Json YAML转换为Json并不是BigQuery的好用途。BigQuery是基于列的结构化数据。转换和展平Json可能会有问题。这是一个简单的内存中NoSQL查询引擎的任务
这是一个非常小的任务,可以轻松地安装在运行Python脚本的最小计算引擎VM实例上。appengine将是另一个不错的选择。您提出的想法都不适合 启动云数据流的时间将比实际处理时间长(启动10分钟,处理1秒)。您正试图使用Mac卡车运送牙签 30 MB的YAML文件很小。编写Dataflow python脚本时,您已经将YAML文件转换为Json YAML转换为Json并不是BigQuery的好用途。BigQuery是基于列的结构化数据。转换和展平Json可能会有问题。这是一个简单的内存中NoSQL查询引擎的任务
这是一个非常小的任务,可以轻松地安装在运行Python脚本的最小计算引擎VM实例上。应用程序引擎将是另一个不错的选择。BigQuery可能不是用于此目的的合适工具。另外,使用虚拟机是一件很费事的事情,而且成本也很高。您还需要维护该VM 这里有一种使用云函数的方法。我将假设您没有使用SQL,可以简单地将文件内容加载到内存中,并简单地执行基本的字符串搜索。代码有点粗糙,是从其他答案拼凑而成的,但它应该足以让你继续
- 创建一个云函数(示例使用Node,但也可以是Python)来监听您的bucket,并将内存设置为适当的大小,例如256MB。那是因为我们将把内容读入内存。此外,将最大执行时间从默认值60秒上调
- 部署它
- 将YAML文件上传到GCS bucket,它将触发云函数执行,然后将文件内容读取到内存中
- 检查执行的函数的日志,您可以看到它将YAML文件的内容读入内存
index.js
:
const storage = require('@google-cloud/storage')();
exports.searchYAML = function searchYAML(event) {
return new Promise(function(resolve, reject) {
const file = event.data;
(storage
.bucket(file.bucket)
.file(file.name)
.download()
.then(function(data) {
if (data)
return data.toString('utf-8');
})
.then(function(data) {
if (data) {
console.log("New file " + file.name);
console.log(data);
//Do some searching/logic with the file contents here
resolve(data);
}
})
.catch(function(e) {
reject(e);
})
);
});
};
{
"main": "index.js",
"dependencies": {
"@google-cloud/storage": "^1.2.1"
}
}
package.js
:
const storage = require('@google-cloud/storage')();
exports.searchYAML = function searchYAML(event) {
return new Promise(function(resolve, reject) {
const file = event.data;
(storage
.bucket(file.bucket)
.file(file.name)
.download()
.then(function(data) {
if (data)
return data.toString('utf-8');
})
.then(function(data) {
if (data) {
console.log("New file " + file.name);
console.log(data);
//Do some searching/logic with the file contents here
resolve(data);
}
})
.catch(function(e) {
reject(e);
})
);
});
};
{
"main": "index.js",
"dependencies": {
"@google-cloud/storage": "^1.2.1"
}
}
BigQuery可能不是用于此目的的合适工具。另外,使用虚拟机是一件很费事的事情,而且成本也很高。您还需要维护该VM 这里有一种使用云函数的方法。我将假设您没有使用SQL,可以简单地将文件内容加载到内存中,并简单地执行基本的字符串搜索。代码有点粗糙,是从其他答案拼凑而成的,但它应该足以让你继续
- 创建一个云函数(示例使用Node,但也可以是Python)来监听您的bucket,并将内存设置为适当的大小,例如256MB。那是因为我们将把内容读入内存。此外,将最大执行时间从默认值60秒上调
- 部署它
- 将YAML文件上传到GCS bucket,它将触发云函数执行,然后将文件内容读取到内存中
- 检查执行的函数的日志,您可以看到它将YAML文件的内容读入内存
index.js
:
const storage = require('@google-cloud/storage')();
exports.searchYAML = function searchYAML(event) {
return new Promise(function(resolve, reject) {
const file = event.data;
(storage
.bucket(file.bucket)
.file(file.name)
.download()
.then(function(data) {
if (data)
return data.toString('utf-8');
})
.then(function(data) {
if (data) {
console.log("New file " + file.name);
console.log(data);
//Do some searching/logic with the file contents here
resolve(data);
}
})
.catch(function(e) {
reject(e);
})
);
});
};
{
"main": "index.js",
"dependencies": {
"@google-cloud/storage": "^1.2.1"
}
}
package.js
:
const storage = require('@google-cloud/storage')();
exports.searchYAML = function searchYAML(event) {
return new Promise(function(resolve, reject) {
const file = event.data;
(storage
.bucket(file.bucket)
.file(file.name)
.download()
.then(function(data) {
if (data)
return data.toString('utf-8');
})
.then(function(data) {
if (data) {
console.log("New file " + file.name);
console.log(data);
//Do some searching/logic with the file contents here
resolve(data);
}
})
.catch(function(e) {
reject(e);
})
);
});
};
{
"main": "index.js",
"dependencies": {
"@google-cloud/storage": "^1.2.1"
}
}
为什么会投反对票?它必须是SQL,或者你能在say Node或Python中进行简单的文本搜索吗?为什么会投反对票?它必须是SQL,或者你能在say Node或Python中进行简单的文本搜索吗?正如你所说,BigQuery肯定不会有30MB的数据。另一方面,BigQuery是永久存储结构化数据的好地方,因此,如果OP需要的是一个永久、安全地存储文件的地方,并且能够随意查询文件,那么它将比任何易失性VM方法都要好。@FelipeHoffa-云存储是一个更好的地方。YAML不太平坦。YAML不是BigQuery的好数据类型(糟糕的数据)。最后得到的是一个巨大的Json列,然后下载并在内存中搜索。只需使用云存储,将文件加载到内存(总共只有30MB)并进行查询,数据流就出来了。云功能呢?是的,@FelipeHoffa是正确的。BigQuery为我提供了一个存储和查询数据的好地方。什么是托管数据库ca