使用 Pub/Sub 将 .csv 文件流式传输到云存储
Streaming .csv files into Cloud Storage using Pub/Sub
一般问题,如果有人能尽可能地指出我正确的方法,使用 [=30 将传入的流式 .csv 文件大规模导入 BigQuery(使用数据流应用一些转换)的最佳方法是什么=] ?..
因为我想使用 pub/sub 来处理传入的 .csv 文件的许多多个大型原始流
例如我想到的做法是:
1.incoming raw.csv file > 2. pub/sub > 3. cloud storage > 4. cloud Function(触发dataflow)> 5. DataFlow(to转换)> 5.BigQuery
让我知道这种方法是否有任何问题或更好的替代方法?
如果这是一个好方法,我如何让 pub/sub 获取 .csv 文件/我该如何构造它?
谢谢
本
有几种不同的方法可以解决这个问题,但是您的大部分用例都可以使用 Google 提供的数据流 templates 来解决。使用模板时,可以在 JavaScript UDF 中完成灯光变换。这使您无需维护整个管道,而只需编写传入数据所需的转换。
如果您接受许多文件作为流输入到云端 Pub/Sub,请记住云端 Pub/Sub 无法保证顺序,因此来自不同文件的记录可能会混在一起输出。如果您希望按原样捕获整个文件,直接上传到 GCS 将是更好的方法。
使用提供的模板 Cloud Pub/Sub to BigQuery or GCS to BigQuery,您可以利用简单的 UDF 将数据从 CSV 格式转换为与 BigQuery 输出 table 架构匹配的 JSON 格式。
例如,如果您有如下 CSV 记录:
transactionDate,product,retailPrice,cost,paymentType
2018-01-08,Product1,99.99,79.99,Visa
您可以编写一个 UDF 来将该数据转换为您的输出架构:
function transform(line) {
var values = line.split(',');
// Construct output and add transformations
var obj = new Object();
obj.transactionDate = values[0];
obj.product = values[1];
obj.retailPrice = values[2];
obj.cost = values[3];
obj.marginPct = (obj.retailPrice - obj.cost) / obj.retailPrice;
obj.paymentType = values[4];
var jsonString = JSON.stringify(obj);
return jsonString;
}
一般问题,如果有人能尽可能地指出我正确的方法,使用 [=30 将传入的流式 .csv 文件大规模导入 BigQuery(使用数据流应用一些转换)的最佳方法是什么=] ?.. 因为我想使用 pub/sub 来处理传入的 .csv 文件的许多多个大型原始流
例如我想到的做法是:
1.incoming raw.csv file > 2. pub/sub > 3. cloud storage > 4. cloud Function(触发dataflow)> 5. DataFlow(to转换)> 5.BigQuery
让我知道这种方法是否有任何问题或更好的替代方法?
如果这是一个好方法,我如何让 pub/sub 获取 .csv 文件/我该如何构造它?
谢谢
本
有几种不同的方法可以解决这个问题,但是您的大部分用例都可以使用 Google 提供的数据流 templates 来解决。使用模板时,可以在 JavaScript UDF 中完成灯光变换。这使您无需维护整个管道,而只需编写传入数据所需的转换。
如果您接受许多文件作为流输入到云端 Pub/Sub,请记住云端 Pub/Sub 无法保证顺序,因此来自不同文件的记录可能会混在一起输出。如果您希望按原样捕获整个文件,直接上传到 GCS 将是更好的方法。
使用提供的模板 Cloud Pub/Sub to BigQuery or GCS to BigQuery,您可以利用简单的 UDF 将数据从 CSV 格式转换为与 BigQuery 输出 table 架构匹配的 JSON 格式。
例如,如果您有如下 CSV 记录:
transactionDate,product,retailPrice,cost,paymentType
2018-01-08,Product1,99.99,79.99,Visa
您可以编写一个 UDF 来将该数据转换为您的输出架构:
function transform(line) {
var values = line.split(',');
// Construct output and add transformations
var obj = new Object();
obj.transactionDate = values[0];
obj.product = values[1];
obj.retailPrice = values[2];
obj.cost = values[3];
obj.marginPct = (obj.retailPrice - obj.cost) / obj.retailPrice;
obj.paymentType = values[4];
var jsonString = JSON.stringify(obj);
return jsonString;
}