Я участвую в проекте, который нам нужно использовать BigQuery, PubSub, Logs explorer и Cloud Functions. Проект: каждый раз, когда происходит определенное событие (например, пользователь принимает файлы cookie), система вставляет новый запрос ...

0
Caio César P. Ricciuti 5 Янв 2021 в 19:01

1 ответ

Лучший ответ

У вас есть 2 решения для вызова ваших облачных функций из сообщения PubSub

  • Функции HTTP: вы можете настроить HTTP-вызов. Создайте свою облачную функцию в trigger-http и создайте push-подписку в своей теме PubSub для вызова облачных функций. Не забудьте добавить безопасность (сделайте вашу функцию частной и включите безопасность в PubSub), потому что ваша функция общедоступна
  • Фоновые функции: вы можете напрямую привязать свои облачные функции к теме PubSub. Подписка создается автоматически и связывается с Cloud Functions. Безопасность встроенная.

И поскольку у вас есть 2 типа функций, у вас есть 2 разных сигнатуры функций. Я представляю вам оба, обработка (совершенно) такая же.

function extractQuery(pubSubMessage){
    // Decide base64 the PubSub message
    let logData = Buffer.from(pubSubMessage, 'base64').toString();
    // Convert it in JSON
    let logMessage= JSON.parse(logData)
    // Extract the query from the log entry
    let query = logMessage.protoPayload.serviceData.jobInsertRequest.resource.jobConfiguration.query.query

    console.log(query)
    return query
}

// For HTTP functions
exports.bigqueryQueryInLog = (req, res) => {

    console.log(req.body)
    const query = extractQuery(req.body.message.data)

    res.status(200).send(query);
}

// For Background functions
exports.bigqueryQueryInLogTopic = (message, context) => {
    extractQuery(message.data)
};

Записанный query - это insert into..., который есть у вас в записи журнала. Затем вам нужно проанализировать свой SQL-запрос, чтобы извлечь нужную часть.

2
guillaume blaquiere 6 Янв 2021 в 21:49