YAML файлы в Google BigQuery.Какой должна быть моя архитектура на Google Cloud Platform? - PullRequest
0 голосов
/ 12 декабря 2018

Этот вопрос касается того, какой должна быть подходящая архитектура на Google Cloud Platform для моего конкретного случая использования.

У меня есть набор файлов .yaml, для которых я хотел бы выполнить запросы SQL при использовании Google Cloud Platformтовары.Общий размер этих файлов не будет превышать 30 МБ, а каждый файл будет в среднем около 50 КБ.Новые файлы также не будут добавляться очень часто - примерно 2-3 раза в год.

Я думал, что смогу спроектировать архитектуру, в которой все эти файлы будут сохранены в облачном хранилище, я запустил конвейер потока данных / облачные функции, чтобы преобразовать эти .yaml файлы в .json, а затем импортировать их в BigQuery длязапускать SQL-запросы.

Какой подход кажется подходящим?Использование Dataflow или облачных функций для предварительной обработки или чего-то еще целиком?

Мне тоже удобно с Python, поэтому я бы искал решение, которое бы включало это.Например, Dataflow имеет Python SDK.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

BigQuery, вероятно, не подходит для этого.Кроме того, использование виртуальной машины - это немного трудоемко и дорого.Вам также нужно будет поддерживать эту виртуальную машину.

Вот подход с использованием облачных функций.Я предполагаю, что у вас нет для использования SQL, и вы можете просто загрузить содержимое файла (ов) в память и просто выполнить базовый поиск строк.Код немного сырой и собран из других ответов по SO, но этого должно быть достаточно, чтобы вы начали.

  • Создайте облачную функцию (пример использует Node, но может быть и Python) дляПрислушайтесь к своему ведру и установите соответствующий размер памяти, например, 256 МБ.Это потому, что мы будем читать содержимое в память.Кроме того, увеличьте максимальное время выполнения по умолчанию, равное 60 с.

enter image description here

  • Разверните его.

enter image description here

  • Загрузите файл YAML в корзину GCS, и он запустит облачную функцию, а затем прочитает содержимое файла в память.

enter image description here

enter image description here

  • Изучите журналы выполненной функции иВы можете видеть, как он читает содержимое файла YAML в память.

enter image description here

Вот код:

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"
  }
}
0 голосов
/ 12 декабря 2018

Ни одна из предложенных вами идей не подходит.

Запуск Cloud Dataflow займет больше времени, чем фактическое время обработки (10 минут до запуска, 1 секунда до обработки).Вы пытаетесь использовать грузовик Mac для доставки зубочистки.

30 МБ файлов YAML - крошечные.Ко времени написания Python-скрипта Dataflow вы уже конвертировали свои YAML-файлы в Json.

YAML, конвертированный в Json, не подходит для BigQuery.BigQuery - это столбец для структурированных данных.Преобразование и выравнивание Json может быть проблематичным.Это задача для простого обработчика запросов NoSQL в памяти.

Это очень маленькая задача, которая легко помещается на наименьшем экземпляре виртуальной машины Compute Engine, на котором выполняется скрипт Python.App Engine был бы другим хорошим выбором.

...