这个问题涉及到在Google Cloud Platform上应该为我的特定用例建立一个合适的架构。
我有一堆.yaml文件,我想使用Google Cloud Platform的产品在这些文件上运行SQL查询。这些文件的总大小不会超过30MB,每个文件的平均大小约为50KB。新文件也不会频繁添加-大约一年2-3次。
我在想,我可以设计一个架构,将所有这些文件保存在云存储上,我运行一个数据流管道/云函数来将这些.yaml文件转换为.json,然后将它们导入到BigQuery中运行SQL查询。
什么似乎是一个合适的方法?使用Dataflow或Cloud Functions进行预处理还是完全使用其他功能?
我对Python也很满意,所以我正在寻找一种结合了这一点的解决方案。例如,Dataflow有一个Python SDK。
发布于 2018-12-13 09:20:07
BigQuery可能不是解决这个问题的合适工具。此外,使用VM是一项工作,而且成本也会很高。您还需要维护该VM。
这里有一种使用云函数的方法。我将假设您没有使用SQL的,可以简单地将文件内容加载到内存中,并简单地执行基本的字符串搜索。代码有点粗糙,是从SO上的其他答案拼凑而成的,但它应该足以让你继续下去。





代码如下:
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);
})
);
});
};package.js
{
"main": "index.js",
"dependencies": {
"@google-cloud/storage": "^1.2.1"
}
}发布于 2018-12-13 02:18:58
你提出的想法没有一个是合适的。
启动Cloud Dataflow需要比实际处理时间更长的时间(启动10分钟,处理1秒)。你正试图用一辆Mac卡车运送一根牙签。
30 MB的YAML文件非常小。在您编写Dataflow python脚本时,您已经将YAML文件转换为Json。
YAML转换为Json并不是BigQuery的一个很好的用途。BigQuery是基于列的结构化数据。转换和扁平化Json可能会有问题。这是一个简单的内存中NoSQL查询引擎的任务。
这是一个非常小的任务,很容易适合运行Python脚本的最小的Compute Engine VM实例。App Engine将是另一个很好的选择。
https://stackoverflow.com/questions/53748867
复制相似问题