Aller au contenu principal

3 articles tagués avec « extract »

Voir tous les tags

· 9 minutes de lecture
Fritz larco

Entrepôts de données cloud

Au cours des dernières années, nous avons constaté une croissance rapide de l'utilisation des entrepôts de données dans le cloud (ainsi que du paradigme "warehouse-first"). Deux plates-formes DWH cloud populaires sont BigQuery et Snowflake. Consultez le tableau ci-dessous pour voir leur évolution dans le temps.

Image : Gartner via Adam Ronthal (@aronthal) sur Twitter. Image : Gartner via Adam Ronthal (@aronthal) sur Twitter.

BigQuery, au 4e rang en 2021, est un service d'entrepôt de données sans serveur entièrement géré proposé par Google Cloud Platform (GCP). Il permet une analyse facile et évolutive sur des pétaoctets de données et est connu depuis longtemps pour sa facilité d'utilisation et sa nature sans maintenance.

Snowflake, est un service similaire proposé par la société Snowflake Inc. L'une des principales différences est que Snowflake vous permet d'héberger l'instance dans Amazon Web Services (AWS), Azure (Microsoft) ou GCP (Google). C'est un grand avantage si vous êtes déjà établi dans un environnement non-GCP.

Exportation et chargement des données

Selon les circonstances, il est parfois nécessaire ou souhaité de copier des données d'un environnement BigQuery vers un environnement Snowflake. Jetons un coup d'œil et décomposons les différentes étapes logiques nécessaires pour déplacer correctement ces données, car aucun des services concurrents n'a de fonction intégrée pour le faire facilement. Pour les besoins de notre exemple, nous supposerons que notre environnement Snowflake de destination est hébergé sur AWS.

Procédure étape par étape

Afin de migrer des données de BigQuery vers Snowflake (AWS), voici les étapes essentielles :

  1. Identifiez la table ou la requête et exécutez la requête EXPORT DATA OPTIONS pour exporter vers Google Cloud Storage (GCS).

  2. Exécutez le script sur une machine virtuelle ou une machine locale pour copier les données GCS sur la scène interne de Snowflake. Nous pourrions également lire directement à partir de GCS avec une intégration de stockage, mais cela implique une autre couche de configuration d'accès sécurisé (ce qui peut être préférable pour votre cas d'utilisation).

  3. Générez manuellement le DDL CREATE TABLE avec les types de données de colonne corrects et exécutez-le dans Snowflake.

  4. Exécutez une requête COPY dans Snowflake pour importer des fichiers préparés.

  5. Éventuellement, nettoyez (supprimez) les données temporaires dans GCP et l'étape interne.

    Image : Étapes pour exporter manuellement de BigQuery vers Snowflake.

    Comme démontré ci-dessus, il y a plusieurs étapes pour y parvenir, où des systèmes indépendants doivent interagir avec. Cela peut être fastidieux à automatiser, en particulier générer le DDL correct (#3) avec les types de colonnes appropriés dans le système de destination (ce que je trouve personnellement le plus lourd, essayez de le faire pour les tables avec plus de 50 colonnes).

    Heureusement, il existe un moyen plus simple de le faire, et c'est en utilisant un outil astucieux appelé Sling. Sling est un outil d'intégration de données qui permet un déplacement simple et efficace des données (extraction et chargement) depuis/vers les bases de données, les plates-formes de stockage et les applications SaaS. Il existe deux façons de l'utiliser : Sling CLI et Sling Cloud. Nous ferons la même procédure que ci-dessus, mais uniquement en fournissant des entrées à sling et il effectuera automatiquement les étapes complexes pour nous !

Utilisation de Sling CLI

Si vous êtes un fanatique de la ligne de commande, Sling CLI est fait pour vous. Il est intégré à go (ce qui le rend ultra-rapide) et fonctionne avec des fichiers, des bases de données et divers points de terminaison saas. Il peut également fonctionner avec Unix Pipes (lit l'entrée standard et écrit sur la sortie standard). On peut l'installer rapidement depuis notre shell :

#  Sur Mac
brew install slingdata-io/sling/sling

# Sous Windows Powershell
scoop bucket add org https://github.com/slingdata-io/scoop-sling.git
scoop install sling

# Utilisation de Python Wrapper via pip
pip install sling

Veuillez consulter ici pour d'autres options d'installation (y compris Linux). Il existe également une bibliothèque Python wrapper, qui est utile si vous préférez interagir avec Sling dans Python.

Une fois installé, nous devrions être en mesure d'exécuter la commande sling, qui devrait nous donner cette sortie :

sling - An Extract-Load tool | https://slingdata.io/fr
Slings data from a data source to a data target.
Version 0.86.52

Usage:
sling [conns|run|update]

Subcommands:
conns Manage local connections
run Execute an ad-hoc task
update Update Sling to the latest version

Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Maintenant, il existe de nombreuses façons de [configurer des tâches] (https://docs.slingdata.io/sling-cli/configuration), mais pour notre portée dans cet article, nous devons d'abord ajouter des informations d'identification de connexion pour BigQuery et Snowflake (une corvée unique). Nous pouvons le faire en ouvrant le fichier ~/.sling/env.yaml et en ajoutant les informations d'identification, qui devraient ressembler à ceci :

~/.sling/env.yaml
connections:

BIGQUERY:
type: bigquery
project: sling-project-123
location: US
dataset: public
gc_key_file: ~/.sling/sling-project-123-ce219ceaef9512.json
gc_bucket: sling_us_bucket # this is optional but recommended for bulk export.

SNOWFLAKE:
type: snowflake
username: fritz
password: my_pass23
account: abc123456.us-east-1
database: sling
schema: public

Super, testons maintenant nos connexions :

$ sling conns list
+------------+------------------+-----------------+
| CONN NAME | CONN TYPE | SOURCE |
+------------+------------------+-----------------+
| BIGQUERY | DB - Snowflake | sling env yaml |
| SNOWFLAKE | DB - PostgreSQL | sling env yaml |
+------------+------------------+-----------------+

$ sling conns test BIGQUERY
6:42PM INF success!

$ sling conns test SNOWFLAKE
6:42PM INF success!

Fantastique, maintenant que nous avons configuré nos connexions, nous pouvons exécuter notre tâche :

$ sling run --src-conn BIGQUERY --src-stream "select user.name, activity.* from public.activity join public.user on user.id = activity.user_id where user.type != 'external'" --tgt-conn SNOWFLAKE --tgt-object 'public.activity_user' --mode full-refresh
11:37AM INF connecting to source database (bigquery)
11:37AM INF connecting to target database (snowflake)
11:37AM INF reading from source database
11:37AM INF writing to target database [mode: full-refresh]
11:37AM INF streaming data
11:37AM INF dropped table public.activity_user
11:38AM INF created table public.activity_user
11:38AM INF inserted 77668 rows
11:38AM INF execution succeeded

Wow, c'était facile ! Sling a effectué automatiquement toutes les étapes que nous avons décrites précédemment. Nous pouvons même exporter les données Snowflake vers notre shell sdtout (au format CSV) en fournissant uniquement l'identifiant de table (public.activity_user) pour le drapeau --src-stream et compter les lignes pour valider nos données :

$ sling run --src-conn SNOWFLAKE --src-stream public.activity_user --stdout | wc -l
11:39AM INF connecting to source database (snowflake)
11:39AM INF reading from source database
11:39AM INF writing to target stream (stdout)
11:39AM INF wrote 77668 rows
11:39AM INF execution succeeded
77669 # CSV output includes a header row (77668 + 1)

Utiliser Sling Cloud

Faisons maintenant la même chose avec l'application Sling Cloud. Sling Cloud utilise le même moteur que Sling CLI, sauf qu'il s'agit d'une plate-forme entièrement hébergée pour exécuter tous vos besoins Extract-Load à un prix compétitif (consultez notre [page de tarification](https://slingdata.io/fr/ prix)). Avec Sling Cloud, nous pouvons :

  • Collaborer avec de nombreux membres de l'équipe

  • Gérer plusieurs espaces de travail/projets

  • Planifier des tâches d'extraction-chargement (EL) à exécuter à un intervalle ou à des heures fixes (CRON)

  • Collecter et analyser les journaux pour le débogage

  • Notifications d'erreur par e-mail ou Slack

  • Exécuter à partir de régions du monde entier ou en mode auto-hébergé si vous le souhaitez (où Sling Cloud est l'orchestrateur).

  • Interface utilisateur (UI) intuitive pour une configuration et une exécution rapides

    La première chose à faire est de créer un compte gratuit ici. Une fois connecté, nous pouvons sélectionner le Cloud Mode (plus sur le mode Self-Hosted plus tard). Nous pouvons maintenant effectuer des étapes similaires à celles ci-dessus, mais en utilisant l'interface utilisateur Sling Cloud :

Ajout de la connexion BigQuery

Étapes avec captures d'écran

Allez sur Connections, cliquez sur New Connection, sélectionnez Big Query.

étape-1-de-connexion-bigquery

Entrez le nom BIGQUERY, vos informations d'identification et téléchargez le fichier JSON de votre compte Google. Cliquez sur Test pour tester la connectivité, puis sur Save.

étape-2-de-connexion-bigquery

Ajout de la connexion flocon de neige

Étapes avec captures d'écran

Cliquez sur New Connection, sélectionnez Snowflake.

étape-1-de-connexion-flocon

Entrez le nom SNOWFLAKE et vos informations d'identification. Cliquez sur Test pour tester la connectivité, puis sur Save.

étape-2-de-connexion-flocon

Créer une réplication

Étapes avec captures d'écran

Allez sur Replications, cliquez sur New Replication, sélectionnez Big Query comme source et Snowflake comme destination. Cliquez sur Next.

replication-connection-step-1

Réglez sur Target Object Name Pattern si vous le souhaitez et cliquez sur Create.

replication-connection-step-2

Créer et exécuter une tâche

Étapes avec captures d'écran

Allez dans l'onglet Streams, cliquez sur New SQL Stream puisque nous utilisons un SQL personnalisé comme source de données. Donne lui un nom (activity_user). Collez la requête SQL, cliquez sur Ok.

create-task-step-1

create-task-step-2

Maintenant que nous avons une tâche de flux prête, nous pouvons appuyer sur l'icône de lecture pour la déclencher.

run-task-step-1

Une fois l'exécution de la tâche terminée, nous pouvons inspecter les journaux.

run-task-step-2

C'est tout ! Nous avons configuré notre tâche et nous pouvons la réexécuter à la demande ou la définir selon un calendrier. Comme vous le remarquerez peut-être, Sling Cloud gère un peu plus de choses pour nous et offre aux utilisateurs orientés UI une meilleure expérience par rapport à Sling CLI.

Conclusion

Nous sommes à une époque où les données sont d'or, et déplacer des données d'une plate-forme à une autre ne devrait pas être difficile. Comme nous l'avons démontré, Sling offre une alternative puissante en réduisant les frictions associées à l'intégration des données. Nous verrons comment exporter depuis Snowflake et charger dans BigQuery dans un autre article.

· 7 minutes de lecture
Fritz larco

arrière-plan

Introduction à Sling CLI

Sling CLI est un outil de ligne de commande qui permet le movement simple et efficace des données (extraction et chargement) de/vers les bases de données, les plates-formes de stockage et les applications SaaS. C'est trivial pour commencer, vous pouvez simplement exécuter pip install sling si vous avez installé le pip de Python. Ou vous pouvez télécharger le binaire pour votre machine ici.

Identifiants de connexion

Pour utiliser sling, nous devons d'abord configurer les informations d'identification de connexion, et Sling CLI les recherche à divers endroits. Cela permet une nature "plug & play" si vous utilisez déjà un autre outil tel que dbt, ou si vous avez des URL de connexion définies dans des variables d'environnement. Il est cependant recommandé d'utiliser le fichier env.yaml de Sling car il permet une expérience plus cohérente et flexible.

Fichier Env de Sling

La première fois que vous exécutez la commande sling, le dossier .sling est créé dans le répertoire personnel de l'utilisateur actuel (~/.sling), qui contient la dedant un fichier appelé env.yaml. La structure du fichier Env de Sling est simple, vous placez les informations d'identification de vos connexions sous la clé connections comme indiqué ci-dessous :

connections:
marketing_pg:
url: 'postgres://...'
ssh_tunnel: 'ssh://...' # optional

# ou style de profil dbt
marketing_pg:
type: postgres
host: [hostname]
user: [username]
password: [password]
port: [port]
dbname: [database name]
schema: [dbt schema]
ssh_tunnel: 'ssh://...'

finance_bq:
type: bigquery
method: service-account
project: [GCP project id]
dataset: [the name of your dbt dataset]
keyfile: [/path/to/bigquery/keyfile.json]

# variables globales, disponibles pour toutes les connexions lors de l'exécution (facultatif)
variables:
aws_access_key: '...'
aws_secret_key: '...'

Veuillez consulter ici pour tous les types de connexion acceptés et leurs points de données respectifs nécessaires.

Lors de l'utilisation de la commande sling conns list avec les informations d'identification Sling Env, la colonne SOURCE s'affichera sous la forme sling env yaml.

Variables d'environnement

Si vous préférez utiliser des variables d'environnement, il suffit de les définir dans votre environnement shell de la manière habituelle :

# Mac/Linux
export MY_PG='postgresql://user:mypassw@pg.host:5432/db1'
export MY_SNOWFLAKE='snowflake://user:mypassw@sf.host/db1'
export ORACLE_DB='oracle://user:mypassw@orcl.host:1521/db1'

# Windows Powershell
set MY_PG 'postgresql://user:mypassw@pg.host:5432/db1'
set MY_SNOWFLAKE 'snowflake://user:mypassw@sf.host/db1'
set ORACLE_DB 'oracle://user:mypassw@orcl.host:1521/db1'

Lors de l'utilisation de la commande sling conns list avec des variables d'environnement, la colonne SOURCE s'affichera sous la forme env variable.

Profils DBT

dbt est un autre outil populaire que de nombreux professionnels des données utilisent quotidiennement, et la prise en charge des profils locaux existants permet une utilisation croisée facile. L'emplacement typique des informations d'identification dbt se trouve dans le fichier ~/dbt/profiles.yml. Voir ici pour plus de détails.

Si vous avez des informations d'identification dbt en place et utilisez la commande sling conns list, la colonne SOURCE s'affichera comme dbt profiles yaml.

La sous-commande conns

Maintenant que vous avez défini les informations d'identification, sling propose une sous-commande conns pour interagir avec les connexions. Nous pouvons effectuer les opérations suivantes : list, test et discover.

$ sling conns -h
conns - Manage local connections

Usage:
conns [discover|list|test]

Subcommands:
discover list available streams in connection
list list local connections detected
test test a local connection

Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Liste des connexions

Il est pratique de voir et de répertorier toutes les connexions disponibles dans notre environnement. Nous pouvons simplement exécuter la commande sling conns list. Voici un exemple:

$ sling conns list
+----------------------+------------------+-------------------+
| CONN NAME | CONN TYPE | SOURCE |
+----------------------+------------------+-------------------+
| AWS_S3 | FileSys - S3 | sling env yaml |
| AZURE_STORAGE | FileSys - Azure | sling env yaml |
| BIGQUERY | DB - BigQuery | sling env yaml |
| BIONIC_DB1 | DB - PostgreSQL | dbt profiles yaml |
| BTD_S3 | FileSys - S3 | sling env yaml |
| CLICKHOUSE | DB - Clickhouse | sling env yaml |
| DEMO_POSTGRES | DB - PostgreSQL | sling env yaml |
| GITHUB_DBIO | API - GitHub | sling env yaml |
| NOTION | API - Notion | sling env yaml |
| SNOWFLAKE | DB - Snowflake | env variable |
| STEAMPIPE | DB - PostgreSQL | sling env yaml |
+----------------------+------------------+-------------------+

Test des connexions

L'outil Sling CLI permet également de tester les connexions. Une fois que nous connaissons le nom de la connexion, nous pouvons utiliser la commande sling conns test :

$ sling conns test -h
test - test a local connection

Usage:
test [name]

Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.

Voici un exemple concret :

$ sling conns test MSSQL
6:42PM INF success!

Découverte des flux de connexion

Il s'agit d'une autre sous-commande astucieuse qui permet de voir quels flux de données sont disponibles pour sling est lu à partir d'une connexion particulière : la commande sling conns discover.

$ sling conns discover -h
discover - list available streams in connection

Usage:
discover [name]

Positional Variables:
name The name of the connection to test (Required)
Flags:
--version Displays the program version string.
-h --help Displays help with available flag, subcommand, and positional value parameters.
-f --filter filter stream name by pattern (e.g. account_*)
--folder discover streams in a specific folder (for file connections)
--schema discover streams in a specific schema (for database connections)

Pour les connexions à la base de données, il listera les tables et les vues disponibles. Pour les connexions de stockage, il répertorie les objets de fichiers non récursifs situés dans le dossier source spécifié. Pour les connexions SaaS/API, il listera tous les objets disponibles qui existent pour la consommation. Voici quelques exemples.

Connexions à la base de données

$ sling conns discover CLICKHOUSE
6:57PM INF Found 68 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"
- "system"."aggregate_function_combinators"
- "system"."asynchronous_metric_log"
- "system"."asynchronous_metrics"
- "system"."build_options"
- "system"."clusters"
....

Si nous voulons filtrer un shema spécifique, nous pouvons faire :

$ sling conns discover CLICKHOUSE --schema default
8:29PM INF Found 2 streams:
- "default"."docker_logs"
- "default"."sling_docker_logs"

Connexions SaaS

$ sling conns discover NOTION
6:58PM INF Found 4 streams:
- blocks
- databases
- pages
- users

connexions de stockage

$ sling conns discover AWS_S3
6:52PM INF Found 7 streams:
- s3://my-sling-bucket/logging/
- s3://my-sling-bucket/part.01.0001.csv
- s3://my-sling-bucket/sling/
- s3://my-sling-bucket/temp/
- s3://my-sling-bucket/test.fs.write/
- s3://my-sling-bucket/test/
- s3://my-sling-bucket/test_1000.csv

Si nous voulons voir les fichiers dans un sous-dossier, nous pouvons faire ceci :

$ sling conns discover AWS_S3 --folder s3://my-sling-bucket/logging/
6:55PM INF Found 1 streams:
- s3://my-sling-bucket/logging/1/1.log.gz

Exécution de tâches EL

Maintenant que vos connexions sont définies, vous êtes prêt à exécuter certaines tâches d'extraction et de chargement ! Nous couvrons cela en détail dans un article séparé, vous pouvez en savoir plus ici. Depuis la ligne de commande, vous pouvez également exécuter sling run -e qui imprimera un tas d'exemples.

Conclusion

Tout bien considéré, Sling CLI facilite la gestion et l'interaction avec différents types de connexions à partir de votre shell. Si vous avez des questions ou des suggestions, n'hésitez pas à nous contacter ici. De plus, assurez-vous de consulter Sling Cloud, qui est un service cloud qui gère vos divers besoins d'extraction et de chargement à un modèle de tarification compétitif.

· Une minute de lecture
Fritz larco

arrière-plan

Sling est un outil d'intégration de données moderne et performant qui extrait et charge des données à partir de sources de données populaires vers des destinations avec des performances et une facilité élevées.

Pourquoi Sling?

  • Performance ultra-rapide - Le moteur principal est écrit en Go et adopte une conception de streaming, ce qui le rend super efficace en conservant un minimum de données en mémoire.
  • Répliquer les données rapidement - Répliquer facilement les données d'une base de données source, d'un fichier ou d'une connexion SaaS vers une base de données ou un fichier de destination.
  • Transparent et à faible coût - Sling fonctionne sur un modèle efficace et à faible coût. Notre objectif est d'être transparent avec le coût d'utilisation de notre plateforme.

En savoir plus sur le fonctionnement de Sling Inscrivez-vous à Sling