Потоковая передача файлов .csv в облачное хранилище с использованием Pub / Sub - PullRequest
0 голосов
/ 07 мая 2018

Общий вопрос, если кто-нибудь может указать мне правильный путь, если это возможно, каков наилучший способ получения входящих потоковых файлов .csv в BigQuery (с некоторыми преобразованиями, применяемыми с использованием потока данных) в большом масштабе, используя pub / sub?. , так как я собираюсь использовать pub / sub для обработки множества больших необработанных потоков входящих CSV-файлов

например, подход, о котором я думаю:

1.входящий файл raw.csv> 2. pub / sub> 3. облачное хранилище> 4. функция облака (для запуска потока данных)> 5. DataFlow (для преобразования)> 5. BigQuery

дайте мне знать, если есть какие-либо проблемы с этим подходом в масштабе или лучшей альтернативой?

Если это хороший подход, как мне получить pub / sub для получения файлов .csv / и как мне это построить?

Спасибо

Ben

enter image description here

1 Ответ

0 голосов
/ 09 мая 2018

Существует несколько различных подходов к этому, но большая часть вашего варианта использования может быть решена с помощью предоставленного Google потока данных шаблонов . При использовании шаблонов световые преобразования можно выполнить в JavaScript UDF. Это избавляет вас от необходимости поддерживать весь конвейер и записывать только преобразования, необходимые для ваших входящих данных.

Если вы принимаете много файлов, введенных в виде потока в Cloud Pub / Sub, помните, что Cloud Pub / Sub не имеет никаких гарантий при упорядочении, поэтому записи из разных файлов, вероятно, будут смешаны в выводе. Если вы хотите захватить весь файл как есть, лучшим вариантом будет загрузка непосредственно в GCS.

Используя предоставленные шаблоны: Cloud Pub / Sub для BigQuery или GCS для BigQuery , вы можете использовать простой UDF для преобразования данных из формата CSV в формат JSON, соответствующий Схема таблицы вывода BigQuery.

Например, если у вас были записи 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;
}
...