Загрузка данных в Big Query из локальной базы данных - PullRequest
0 голосов
/ 25 сентября 2019

Я хочу запустить хранилище данных в Google Big Query, но я не уверен, как на самом деле планировать задания для передачи данных в облако.

Чтобы дать некоторую предысторию.У меня есть база данных MySQL, размещенная на премьере, и в настоящее время я беру каждую ночь в качестве резервной копии.Моя идея заключается в том, что я могу отправить этот дамп в Google Cloud и импортировать данные в Big Query.Я подумал, что мог бы отправить дамп и, возможно, использовать функцию облачного планировщика, чтобы затем запустить что-то, что открывает дамп и делает это, но я не уверен, как все эти службы сочетаются друг с другом.

Я немногоновичка в Google Cloud, поэтому, если есть лучший способ добиться этого, я буду рад изменить мой план действий.

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Поскольку новый EXTERNAL_QUERY был запущен, и вы можете запросить у BigQuery экземпляр Cloud SQL, ваш лучший выбор прямо сейчас:

  1. Настройка реплики из вашего текущего экземпляра в экземпляр Cloud SQL, следуйтеэто руководство .
  2. Понимание того, как федеративные запросы Cloud SQL позволяют выполнять запросы из экземпляров BigQuery Cloud SQL.

Таким образом вы получаете прямой доступ к вашей реляционной базе данных в виде:

Пример запроса, который вы выполняете в BigQuery:

SELECT * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM mysqltable AS c ORDER BY c.customer_id'');

Вы даже можете присоединиться к Bigqueryтаблица с таблицей SQL:

Пример:

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;
1 голос
/ 25 сентября 2019

Для этого вам нужно создать корзину Cloud Storage, работающую gsutil mb gs://BUCKET_NAME.

. После создания корзины вам нужно создать облачную функцию, запускаемую корзиной с помощью опции finalize.

Вы можете следовать этой функции примера

'use strict';

const Storage = require('@google-cloud/storage');
const BigQuery = require('@google-cloud/bigquery');

// Instantiates a client
const storage = Storage();
const bigquery = new BigQuery();

/**
 * Creates a BigQuery load job to load a file from Cloud Storage and write the data into BigQuery.
 *
 * @param {object} data The event payload.
 * @param {object} context The event metadata.
 */
exports.loadFile = (data, context) => {
    const datasetId = 'Your_Dataset_name';
    const tableId = 'Your_Table_ID';

    const jobMetadata = {
        skipLeadingRows: 1,
        writeDisposition: 'WRITE_APPEND'
    };

    // Loads data from a Google Cloud Storage file into the table
    bigquery
        .dataset(datasetId)
        .table(tableId)
        .load(storage.bucket(data.bucket).file(data.name), jobMetadata)
        .catch(err => {
            console.error('ERROR:', err);
        });

    console.log(`Loading from gs://${data.bucket}/${data.name} into ${datasetId}.${tableId}`);
};

Затем создать свой набор данных BigQuery, используя желаемую схему

И теперь вы можете загрузить свой CSV-файл в корзину, и вы увидитезагруженные данные в вашем большом запросе.

...