Будет ли репликация журнала bin из базы данных MySQL поддерживать уникальные ограничения при синхронизации с Redshift / BigQuery? - PullRequest
0 голосов
/ 01 октября 2019

Мы хотим переместить наше хранилище данных из базы данных MySQL в Redshift или BigQuery.

Несмотря на то, что они оптимизированы для операций OLAP, одним из недостатков этих баз данных на основе столбцов является то, что они не навязывают уникальные ограничения.

Таким образом, невозможно иметь дублирующиеся заказы / продукты вваши столы. Отрасль, в которой мы работаем, - это розничная торговля, и мы используем стандартную конструкцию базы данных Kimball по фактам и измерениям (звездная схема).

Одним из потенциальных решений, которое было предложено, было создание базы данных в MySQL и использование сторонних производителей. инструмент репликации для синхронизации с данными в Redshift / BigQuery. Таким образом, мы бы применяли ключевые ограничения в исходной базе данных MySQL и использовали бы Redshift / BigQuery только для запросов на чтение.

Тем не менее, применяем ограничения в MySQL и настраиваем репликацию журнала бина в Redshift / BigQuery. будет хранить данные, идентичные данным в MySQL, и, следовательно, обеспечивать соблюдение уникальных ограничений?

1 Ответ

1 голос
/ 01 октября 2019

Прежде всего, вы не можете выполнять репликацию из MySQL в RedShift / BigQuery.

Пожалуйста, поймите, что BigQuery - это аналитическая база данных.

Что рекомендуется настроить репликацию из MySQL внутри Cloud SQL. Затем в BigQuery вы можете запустить EXTERNAL_QUERY, что означает, что вы можете запросить / присоединить свою базу данных BQ к базе данных Cloud SQL MySQL.

  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;
...