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