Каков наилучший способ потоковой передачи данных в режиме реального времени в Big Query (с использованием Node)? - PullRequest
0 голосов
/ 14 июня 2019

Я хочу направлять HTTP-запросы в BigQuery в режиме реального времени (или почти в реальном времени).

В идеале я хотел бы использовать инструмент, который предоставляет конечную точку для потоковой передачи HTTP-запросов и позволяет мне написать простой узел, такой: 1. Я могу добавить соответствующий insertId, чтобы BigQuery мог дедуплицировать запросы при необходимости и 2. Я могу пакетировать данные, чтобы не отправлять по одной строке за раз (что привело бы к ненужным затратам GCP)

Я пытался использовать AWS Lambdas или Google Cloud Functions, но необходимые настройки для этой проблемы на этих платформах намного превышают потребности варианта использования. Я предполагаю, что у многих разработчиков есть та же самая проблема, и должно быть лучшее решение.

Ответы [ 2 ]

1 голос
/ 14 июня 2019

Поскольку вы ищете способ передавать HTTP-запросы в BigQuery , а также отправлять их в пакетном режиме, чтобы минимизировать затраты на Google Cloud Platform, вы можете ознакомиться с общедоступной документацией по этой проблеме.объяснил.Вы также можете найти Node.js шаблон о том, как выполнить вставку потока в BigQuery:

// Imports the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');

/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// const projectId = "your-project-id";
// const datasetId = "my_dataset";
// const tableId = "my_table";
// const rows = [{name: "Tom", age: 30}, {name: "Jane", age: 32}];

// Creates a client
const bigquery = new BigQuery({
    projectId: projectId,
});

// Inserts data into a table
await bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows);
console.log(`Inserted ${rows.length} rows`);

Что касается пакетной части, рекомендуемое соотношение - использовать 500 строк на запросхотя это может быть до 10000.Более подробную информацию о том, что квоты и ограничения для потоковых вставок можно найти в общедоступной документации .

0 голосов
/ 14 июня 2019

Вы можете использовать функции Облака. С помощью облачных функций вы можете создать свой собственный API в Node JS, а затем использовать его для потоковой передачи данных в BQ.

Целевая архитектура для STREAM будет выглядеть так: Подписчик Pubsub (PUSH TYPE) -> Облачная функция Google -> Большой запрос Google

Вы можете использовать этот API в пакетном режиме, а также с помощью Cloud Composer (например, Apache Airflow) или Cloud Scheduler, чтобы планировать свой API в соответствии с вашими требованиями.

Целевая архитектура для BATCH будет выглядеть следующим образом: Cloud Scheduler / Cloud Composer -> Облачная функция Google -> Большой запрос Google

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...