Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

Guide de migration d’Amazon Redshift vers ClickHouse

Introduction

Amazon Redshift est une solution populaire d’entrepôt de données dans le cloud qui fait partie des offres Amazon Web Services. Ce guide présente différentes approches pour migrer des données d’une instance Redshift vers ClickHouse. Nous couvrirons trois options :

Options de migration de Redshift vers ClickHouse

Du point de vue de l’instance ClickHouse, vous pouvez :

  1. PUSH envoyer des données vers ClickHouse à l’aide d’un outil ou service ETL/ELT tiers

  2. PULL extraire des données depuis Redshift à l’aide de ClickHouse JDBC Bridge

  3. PIVOT utiliser le stockage objet S3 selon une logique « décharger puis charger »

Push des données de Redshift vers ClickHouse

Dans le scénario Push, l'idée est de s'appuyer sur un outil ou un service tiers (qu'il s'agisse de code personnalisé ou d'un ETL/ELT) pour envoyer vos données vers votre instance ClickHouse. Par exemple, vous pouvez utiliser un logiciel comme Airbyte pour déplacer des données entre votre instance Redshift (en tant que source) et ClickHouse en tant que destination (consultez notre guide d'intégration pour Airbyte)

PUSH Redshift vers ClickHouse

Avantages

  • Il permet de tirer parti du catalogue existant de connecteurs du logiciel ETL/ELT.
  • Fonctionnalités intégrées pour maintenir les données synchronisées (logique d’ajout, de remplacement et incrémentielle).
  • Prend en charge des scénarios de transformation des données (par exemple, consultez notre guide d’intégration de dbt).

Inconvénients

  • Vous devez mettre en place et maintenir une infrastructure ETL/ELT.
  • Cela introduit un composant tiers dans l'architecture, qui peut devenir un goulot d'étranglement en matière de scalabilité.

Pull des données de Redshift vers ClickHouse

Dans le scénario Pull, l’idée est de tirer parti de ClickHouse JDBC Bridge pour se connecter directement à un cluster Redshift depuis une instance ClickHouse et exécuter des requêtes INSERT INTO ... SELECT :

PULL de Redshift vers ClickHouse

Avantages

  • S'applique à tous les outils compatibles JDBC
  • Solution élégante pour interroger plusieurs sources de données externes depuis ClickHouse

Inconvénients

  • Nécessite une instance ClickHouse JDBC Bridge, qui peut devenir un goulot d’étranglement pour la montée en charge

Tutoriel

Pour utiliser cette option, vous devez configurer ClickHouse JDBC Bridge. ClickHouse JDBC Bridge est une application Java autonome qui gère la connectivité JDBC et sert de proxy entre l’instance ClickHouse et les sources de données. Pour ce tutoriel, nous avons utilisé une instance Redshift préremplie avec une base de données d’exemple.

Déployer ClickHouse JDBC Bridge

Déployez ClickHouse JDBC Bridge. Pour plus de détails, consultez notre guide utilisateur sur JDBC pour les sources de données externes

Configurer votre source de données Redshift

Configurez votre source de données Redshift pour ClickHouse JDBC Bridge. Par exemple, /etc/clickhouse-jdbc-bridge/config/datasources/redshift.json

{
 "redshift-server": {
   "aliases": [
     "redshift"
   ],
   "driverUrls": [
   "https://s3.amazonaws.com/redshift-downloads/drivers/jdbc/2.1.0.4/redshift-jdbc42-2.1.0.4.jar"
   ],
   "driverClassName": "com.amazon.redshift.jdbc.Driver",
   "jdbcUrl": "jdbc:redshift://redshift-cluster-1.ckubnplpz1uv.us-east-1.redshift.amazonaws.com:5439/dev",
   "username": "awsuser",
   "password": "<password>",
   "maximumPoolSize": 5
 }
}

Interroger votre instance Redshift depuis ClickHouse

Une fois ClickHouse JDBC Bridge déployé et en cours d’exécution, vous pouvez commencer à interroger votre instance Redshift depuis ClickHouse.

SELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users limit 5')
Query id: 1b7de211-c0f6-4117-86a2-276484f9f4c0

┌─username─┬─firstname─┬─lastname─┐
│ PGL08LJI │ Vladimir  │ Humphrey │
│ XDZ38RDD │ Barry     │ Roy      │
│ AEB55QTM │ Reagan    │ Hodge    │
│ OWY35QYB │ Tamekah   │ Juarez   │
│ MSD36KVR │ Mufutau   │ Watkins  │
└──────────┴───────────┴──────────┘

5 rows in set. Elapsed: 0.438 sec.
SELECT *
FROM jdbc('redshift', 'select count(*) from sales')
Query id: 2d0f957c-8f4e-43b2-a66a-cc48cc96237b

┌──count─┐
│ 172456 │
└────────┘

1 rows in set. Elapsed: 0.304 sec.

Importer des données de Redshift vers ClickHouse

Dans la suite, nous montrons comment importer des données à l’aide d’une instruction INSERT INTO ... SELECT

# CRÉATION DE LA TABLE avec 3 colonnes
CREATE TABLE users_imported
(
   `username` String,
   `firstname` String,
   `lastname` String
)
ENGINE = MergeTree
ORDER BY firstname
Query id: c7c4c44b-cdb2-49cf-b319-4e569976ab05

Ok.

0 rows in set. Elapsed: 0.233 sec.
INSERT INTO users_imported (*) SELECT *
FROM jdbc('redshift', 'select username, firstname, lastname from users')
Query id: 9d3a688d-b45a-40f4-a7c7-97d93d7149f1

Ok.

0 rows in set. Elapsed: 4.498 sec. Processed 49.99 thousand rows, 2.49 MB (11.11 thousand rows/s., 554.27 KB/s.)

Pivot des données de Redshift vers ClickHouse à l’aide de S3

Dans ce scénario, nous exportons les données vers S3 dans un format Pivot intermédiaire, puis, dans un second temps, nous chargeons les données depuis S3 dans ClickHouse.

PIVOT depuis Redshift à l’aide de S3

Avantages

  • Redshift et ClickHouse offrent tous deux de puissantes fonctionnalités d’intégration avec S3.
  • S’appuie sur des fonctionnalités existantes, comme la commande Redshift UNLOAD et la fonction de table / le moteur de table S3 de ClickHouse.
  • Passe facilement à l’échelle grâce aux lectures parallèles et aux capacités de haut débit de ClickHouse vers et depuis S3.
  • Permet d’exploiter des formats sophistiqués et compressés comme Apache Parquet.

Inconvénients

  • Deux étapes du processus (déchargement depuis Redshift, puis chargement dans ClickHouse).

Tutoriel

Exporter les données vers un bucket S3 à l'aide d'UNLOAD

À l'aide de la fonctionnalité UNLOAD de Redshift, exportez les données vers un bucket S3 privé existant :

UNLOAD de Redshift vers S3

Cela générera des fichiers part contenant les données brutes dans S3.

Données dans S3

Créer la table dans ClickHouse

Créez la table dans ClickHouse :

CREATE TABLE users
(
  username String,
  firstname String,
  lastname String
)
ENGINE = MergeTree
ORDER BY username

Sinon, ClickHouse peut tenter d'inférer la structure de la table à l'aide de CREATE TABLE ... EMPTY AS SELECT :

CREATE TABLE users
ENGINE = MergeTree ORDER BY username
EMPTY AS
SELECT * FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')

Cela fonctionne particulièrement bien lorsque les données sont dans un format qui contient des informations sur les types de données, comme Parquet.

Charger les fichiers S3 dans ClickHouse

Chargez les fichiers S3 dans ClickHouse à l'aide d'une instruction INSERT INTO ... SELECT :

INSERT INTO users SELECT *
FROM s3('https://your-bucket.s3.amazonaws.com/unload/users/*', '<aws_access_key>', '<aws_secret_access_key>', 'CSV')
Query id: 2e7e219a-6124-461c-8d75-e4f5002c8557

Ok.

0 rows in set. Elapsed: 0.545 sec. Processed 49.99 thousand rows, 2.34 MB (91.72 thousand rows/s., 4.30 MB/s.)
Navigation