Google cloud dataflow 使用Pub/Sub将.csv文件流式传输到云存储中

Google cloud dataflow 使用Pub/Sub将.csv文件流式传输到云存储中,google-cloud-dataflow,google-cloud-pubsub,Google Cloud Dataflow,Google Cloud Pubsub,一般问题如果有人能给我指出正确的方法(如果可能的话),那么使用pub/sub?将传入的streaming.csv文件大规模导入BigQuery(使用数据流应用一些转换)的最佳方法是什么?。。 因为我在考虑使用pub/sub来处理大量传入的.csv文件的原始流 例如,我想到的方法是: 1.raw.csv文件>2。发布/订阅>3。云存储>4。云功能(触发数据流)>5。数据流(要转换)>5。BigQuery 让我知道这种方法在规模上是否有任何问题或更好的替代方案 如果这是一种很好的方法,那么如何让pu

一般问题如果有人能给我指出正确的方法(如果可能的话),那么使用pub/sub?将传入的streaming.csv文件大规模导入BigQuery(使用数据流应用一些转换)的最佳方法是什么?。。 因为我在考虑使用pub/sub来处理大量传入的.csv文件的原始流

例如,我想到的方法是:

1.raw.csv文件>2。发布/订阅>3。云存储>4。云功能(触发数据流)>5。数据流(要转换)>5。BigQuery

让我知道这种方法在规模上是否有任何问题或更好的替代方案

如果这是一种很好的方法,那么如何让pub/sub获取.csv文件/以及如何构造它

谢谢


有几种不同的方法来解决这个问题,但您的许多用例都可以使用谷歌提供的数据流来解决。使用模板时,可以在JavaScript UDF中完成灯光转换。这样,您就不需要维护整个管道,只需编写传入数据所需的转换

如果您接受许多文件作为流输入到Cloud Pub/Sub,请记住Cloud Pub/Sub不保证排序,因此来自不同文件的记录可能会在输出中混合。如果您希望按原样捕获整个文件,那么直接上传到GCS将是更好的方法

使用提供的模板或,您可以使用一个简单的UDF将数据从CSV格式转换为与BigQuery输出表模式匹配的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;
}

有两种不同的方法可以实现这一点,但是您的许多用例都可以使用Google提供的数据流来解决。使用模板时,可以在JavaScript UDF中完成灯光转换。这样,您就不需要维护整个管道,只需编写传入数据所需的转换

如果您接受许多文件作为流输入到Cloud Pub/Sub,请记住Cloud Pub/Sub不保证排序,因此来自不同文件的记录可能会在输出中混合。如果您希望按原样捕获整个文件,那么直接上传到GCS将是更好的方法

使用提供的模板或,您可以使用一个简单的UDF将数据从CSV格式转换为与BigQuery输出表模式匹配的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;
}

我有点困惑,是文件已经通过发布/订阅了,还是您正在获取它们,然后想将它们转储到发布/订阅。如果是后者,您打算从将发布/订阅添加到架构中而不是让数据流直接在GCS上处理文件中得到什么?首先尝试通过发布/订阅获取文件,如何创建一条消息,其中pub-sub可以接收.csv文件,并在进入GCS之前将pub/sub作为入口点,我之所以将pub-sub添加到架构中,是为了将来自internet的许多传入文件作为流进行处理,除非有更好的方法来处理此问题?,我错过了一个步骤,你可以将你的.csv文件存储在谷歌云存储上,并将它们推送到发布/订阅(例如逐行…)数据流可以订阅发布/订阅主题,而不必再将它们存储到GCS。结果可能会存储到另一个发布/订阅中,一旦写入,就会触发一个云函数并将结果发送到BigQuery。我有点困惑,是文件已经通过发布/订阅,还是您正在获取它们,然后希望将它们转储到发布/订阅。如果后者,将Pub/Sub添加到体系结构中,而不是让数据流直接在GCS上处理文件,您打算从中得到什么?首先尝试通过Pub/Sub获取文件,如何创建一条消息,在进入GCS之前,Pub/Sub可以接收.csv文件并将Pub/Sub作为入口点,我之所以将pub-sub添加到架构中,是为了将来自互联网的许多传入文件作为一个流来处理,除非有更好的方法来处理它?。我错过了一个步骤。您可以将您的.csv文件存储在谷歌云存储上,并将其推送到pub/sub(例如逐行…)数据流可以订阅发布/订阅主题,而无需将它们再次存储到GCS。结果可能会存储到另一个发布/订阅中,一旦写入,就会触发一个云函数并将结果发送到BigQuery。您能否详细说明将此UDF放置在何处?我正在使用BigQuery模板的发布/订阅来处理类似的模式,其中消息是CSV格式的,如上图所示。您能详细说明这个UDF的放置位置吗?我正在使用对BigQuery模板的发布/订阅来处理类似的模式,其中消息是CSV格式的,如上所示