Zum Hauptinhalt springen

3 Posts getaggt mit "extract"

Alle Tags anzeigen

· 8 Minuten Lesezeit
Fritz larco

Cloud Data Warehouses

In den letzten Jahren haben wir ein schnelles Wachstum bei der Nutzung von Cloud Data Warehouses (sowie des „Warehouse-First“-Paradigmas) erlebt. Zwei beliebte Cloud-DWH-Plattformen sind BigQuery und Snowflake. Schauen Sie sich das Diagramm unten an, um ihre Entwicklung im Laufe der Zeit zu sehen.

Bild: Gartner via Adam Ronthal (@aronthal) auf Twitter. Bild: Gartner über Adam Ronthal (@aronthal) auf Twitter.

BigQuery, ab 2021 auf Platz 4, ist ein vollständig verwalteter, serverloser Data-Warehouse-Dienst, der von der Google Cloud Platform (GCP) angeboten wird. Es ermöglicht eine einfache und skalierbare Analyse von Petabytes an Daten und ist seit langem für seine Benutzerfreundlichkeit und Wartungsfreiheit bekannt.

Snowflake ist ein ähnlicher Dienst, der von der Firma Snowflake Inc. angeboten wird. Einer der Hauptunterschiede besteht darin, dass Sie mit Snowflake die Instanz entweder in Amazon Web Services (AWS), Azure (Microsoft) oder GCP (Google) hosten können. Dies ist ein großer Vorteil, wenn Sie bereits in einer Nicht-GCP-Umgebung etabliert sind.

Exportieren und Laden der Daten

Unter Umständen ist es manchmal notwendig oder erwünscht, Daten aus einer BigQuery-Umgebung in eine Snowflake-Umgebung zu kopieren. Lassen Sie uns einen Blick darauf werfen und die verschiedenen logischen Schritte aufschlüsseln, die erforderlich sind, um diese Daten richtig zu verschieben, da keiner der konkurrierenden Dienste eine integrierte Funktion hat, um dies einfach zu tun. Für unser Beispiel gehen wir davon aus, dass unsere Snowflake-Zielumgebung auf AWS gehostet wird.

Schrittweises Vorgehen

Um Daten von BigQuery zu Snowflake (AWS) zu migrieren, sind dies die wesentlichen Schritte:

  1. Identifizieren Sie die Tabelle oder Abfrage und führen Sie EXPORT DATA OPTIONS query zum Exportieren in Google Cloud Storage (GCS) aus.

  2. Führen Sie das Skript in der VM oder auf dem lokalen Computer aus, um GCS-Daten in die interne Stage von Snowflake zu kopieren. Wir könnten auch direkt aus GCS mit einer Speicherintegration lesen, aber dies erfordert eine weitere Ebene der sicheren Zugriffskonfiguration (die für Ihren Anwendungsfall möglicherweise vorzuziehen ist).

  3. Generieren Sie manuell CREATE TABLE DDL mit den richtigen Spaltendatentypen und führen Sie sie in Snowflake aus.

  4. Führen Sie eine COPY-Abfrage in Snowflake aus, um bereitgestellte Dateien zu importieren.

  5. Optional temporäre Daten in GCP und Internal Stage bereinigen (löschen).

    Bild: Schritte zum manuellen Exportieren von BigQuery nach Snowflake.

    Wie oben gezeigt, gibt es mehrere Schritte, um dies zu erreichen, wobei mit unabhängigen Systemen interagiert werden muss. Dies kann umständlich zu automatisieren sein, insbesondere das Generieren der richtigen DDL (Nr. 3) mit den richtigen Spaltentypen im Zielsystem (was ich persönlich am mühsamsten finde, versuchen Sie dies für Tabellen mit mehr als 50 Spalten).

    Glücklicherweise gibt es einen einfacheren Weg, dies zu tun, und zwar durch die Verwendung eines raffinierten Tools namens Sling. Sling ist ein Datenintegrationstool, das eine einfache und effiziente Übertragung von Daten (Extract & Load) von/zu Datenbanken, Speicherplattformen und SaaS-Anwendungen ermöglicht. Es gibt zwei Möglichkeiten, es zu verwenden: Sling CLI und Sling Cloud. Wir werden das gleiche Verfahren wie oben durchführen, aber nur, indem wir Eingaben für Sling bereitstellen, und es wird automatisch die komplizierten Schritte für uns erledigen!

Sling-CLI verwenden

Wenn Sie ein Fanatiker der Befehlszeile sind, ist Sling CLI genau das Richtige für Sie. Es ist in go integriert (was es superschnell macht) und funktioniert mit Dateien, Datenbanken und verschiedenen SaaS-Endpunkten. Es kann auch mit Unix Pipes arbeiten (liest die Standardeingabe und schreibt in die Standardausgabe). Wir können es schnell von unserer Shell aus installieren:

#  Auf dem Mac
brew install slingdata-io/sling/sling

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

# Verwenden von Python Wrapper über Pip
pip install sling

Weitere Installationsoptionen (einschließlich Linux) finden Sie hier. Es gibt auch eine Python-Wrapper-Bibliothek, die nützlich ist, wenn Sie lieber mit Sling innerhalb von Python interagieren.

Nach der Installation sollten wir in der Lage sein, den Befehl sling auszuführen, der uns diese Ausgabe liefern sollte:

sling - An Extract-Load tool | https://slingdata.io/de
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.

Jetzt gibt es viele Möglichkeiten, Aufgaben zu konfigurieren, aber für unseren Anwendungsbereich in diesem Artikel müssen wir zuerst Verbindungsanmeldeinformationen für BigQuery und Snowflake hinzufügen (eine einmalige Aufgabe). Wir können dies tun, indem wir die Datei ~/.sling/env.yaml öffnen und die Anmeldeinformationen hinzufügen, die so aussehen sollten:

~/.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, jetzt testen wir unsere Verbindungen:

$ 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!

Fantastisch, jetzt, da wir unsere Verbindungen eingerichtet haben, können wir unsere Aufgabe ausführen:

$ 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, das war einfach! Sling hat alle Schritte, die wir zuvor beschrieben haben, automatisch durchgeführt. Wir können die Snowflake-Daten sogar zurück in unsere Shell-sdtout (im CSV-Format) exportieren, indem wir nur die Tabellenkennung (public.activity_user) für das --src-stream-Flag angeben und die Zeilen zählen, um unsere Daten zu validieren:

$ 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)

Verwenden von Sling Cloud

Machen wir jetzt dasselbe mit der Sling Cloud-App. Sling Cloud verwendet die gleiche Engine wie Sling CLI, mit der Ausnahme, dass es sich um eine vollständig gehostete Plattform handelt, um alle Ihre Extract-Load-Anforderungen zu einem wettbewerbsfähigen Preis auszuführen (siehe unsere [Preisseite](https://slingdata.io/de/ Preisgestaltung)). Mit Sling Cloud können wir:

  • Arbeiten Sie mit vielen Teammitgliedern zusammen

  • Mehrere Arbeitsbereiche/Projekte verwalten

  • Schedule Extract-Load (EL) Tasks zur Ausführung in Intervallen oder zu festen Zeiten (CRON)

  • Sammeln und analysieren Sie Protokolle zum Debuggen

  • Fehlermeldungen per E-Mail oder Slack – Ausführung aus weltweiten Regionen oder im selbstgehosteten Modus, falls gewünscht (wobei Sling Cloud der Orchestrator ist).

  • Intuitive Benutzeroberfläche (UI) für schnelle Einrichtung und Ausführung

    Als erstes müssen Sie sich hier für ein kostenloses Konto anmelden. Nach dem Einloggen können wir den Cloud Mode-Modus auswählen (mehr zum Self-Hosted-Modus später). Jetzt können wir ähnliche Schritte wie oben ausführen, jedoch mit der Sling Cloud-Benutzeroberfläche:

Hinzufügen der BigQuery-Verbindung

Schritte mit Screenshots

Gehen Sie zu Connections, klicken Sie auf New Connection, wählen Sie Big Query.

bigquery-connection-step-1

Geben Sie den Namen BIGQUERY und Ihre Anmeldeinformationen ein und laden Sie die JSON-Datei Ihres Google-Kontos hoch. Klicken Sie auf Test, um die Verbindung zu testen, und dann auf Save.

bigquery-connection-step-2

Hinzufügen der Snowflake-Verbindung

Schritte mit Screenshots

Klicken Sie auf New Connection, wählen Sie Snowflake.

Schneeflockenverbindung-Schritt-1

Geben Sie den Namen SNOWFLAKE und Ihre Anmeldeinformationen ein. Klicken Sie auf Test, um die Verbindung zu testen, und dann auf Save.

Schneeflockenverbindung-Schritt-2

Replikation erstellen

Schritte mit Screenshots

Gehen Sie zu Replications, klicken Sie auf New Replication, wählen Sie Big Query als Quelle und Snowflake als Ziel. Klicken Next.

replication-connection-step-1

Stellen Sie bei Bedarf Target Object Name Pattern ein und klicken Sie auf Create.

replication-connection-step-2

Aufgabe erstellen und ausführen

Schritte mit Screenshots

Gehen Sie zur Registerkarte Streams, klicken Sie auf New SQL Stream, da wir eine benutzerdefinierte SQL als Quelldaten verwenden. Gib ihm einen Namen (activity_user). Fügen Sie die SQL-Abfrage ein und klicken Sie auf Ok.

Aufgabe erstellen-Schritt-1

Aufgabe erstellen-Schritt-2

Jetzt, da wir eine Stream-Aufgabe bereit haben, können wir auf das Play-Symbol klicken, um sie auszulösen.

run-task-step-1

Sobald die Aufgabenausführung abgeschlossen ist, können wir die Protokolle überprüfen.

run-task-step-2

Das ist es! Wir haben unsere Aufgabe eingerichtet und können sie bei Bedarf erneut ausführen oder nach einem Zeitplan festlegen. Wie Sie vielleicht bemerken, erledigt Sling Cloud ein paar Dinge mehr für uns und bietet UI-orientierten Benutzern eine bessere Erfahrung im Vergleich zu Sling CLI.

Fazit

Wir befinden uns in einer Zeit, in der Daten Gold wert sind, und das Verschieben von Daten von einer Plattform auf eine andere sollte nicht schwierig sein. Wie wir gezeigt haben, bietet Sling eine leistungsstarke Alternative, indem es Reibungsverluste im Zusammenhang mit der Datenintegration reduziert. In einem anderen Beitrag behandeln wir das Exportieren aus Snowflake und das Laden in BigQuery.

· 6 Minuten Lesezeit
Fritz larco

Hintergrund

Einführung in die Sling-Befehlszeilenschnittstelle

Sling CLI ist ein Befehlszeilentool, das ein einfaches und effizientes Verschieben von Daten (Extrahieren und Laden) von/zu Datenbanken, Speicherplattformen und SaaS-Anwendungen ermöglicht. Der Einstieg ist einfach, Sie können einfach pip install sling ausführen, wenn Sie Pip von Python installiert haben. Oder Sie können die Binärdatei für Ihren Computer [hier] herunterladen (https://docs.slingdata.io/sling-cli/getting-started).

Anmeldeinformationen für die Verbindung

Um sling verwenden zu können, müssen wir zuerst Verbindungsdaten konfigurieren, und die Sling-Befehlszeilenschnittstelle sucht an verschiedenen Stellen danach. Dies ermöglicht eine „Plug & Play“-Natur, wenn Sie bereits ein anderes Tool wie dbt verwenden oder Verbindungs-URLs in Umgebungsvariablen festgelegt haben. Es wird jedoch empfohlen, die env.yaml-Datei von Sling zu verwenden, da sie eine konsistentere und flexiblere Erfahrung ermöglicht.

Sling-Env-Datei

Wenn Sie den Befehl sling zum ersten Mal ausführen, wird der Ordner .sling im Basisverzeichnis des aktuellen Benutzers (~/.sling) erstellt, der wiederum eine Datei namens env.yaml enthält. Die Struktur für die Env-Datei von Sling ist einfach, Sie legen die Anmeldeinformationen Ihrer Verbindungen unter dem Schlüssel connections ab, wie unten gezeigt:

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

# oder dbt-Profil gestylt
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]

# globale Variablen, zur Laufzeit für alle Verbindungen verfügbar (optional)
variables:
aws_access_key: '...'
aws_secret_key: '...'

Bitte siehe hier für alle akzeptierten Verbindungstypen und den jeweils benötigten Datenpunkt.

Wenn Sie den sling conns list-Befehl mit Sling Env-Anmeldeinformationen verwenden, wird die SOURCE-Spalte als sling env yaml angezeigt.

Umgebungsvariablen

Wenn Sie lieber Umgebungsvariablen verwenden möchten, reicht es aus, diese wie gewohnt in Ihrer Shell-Umgebung zu setzen:

# 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'

Wenn Sie den Befehl sling conns list mit Umgebungsvariablen verwenden, wird die Spalte SOURCE als env variable angezeigt.

DBT-Profile

dbt ist ein weiteres beliebtes Tool, das viele Datenfachleute täglich verwenden, und die Unterstützung bestehender lokaler Profile ermöglicht eine einfache übergreifende Nutzung. Der typische Speicherort für die dbt-Anmeldeinformationen befindet sich in der Datei ~/dbt/profiles.yml. Weitere Einzelheiten finden Sie hier.

Wenn Sie über dbt-Anmeldeinformationen verfügen und den Befehl sling conns list verwenden, wird die Spalte SOURCE als dbt profiles yaml angezeigt.

Der Unterbefehl conns

Nachdem Sie nun Anmeldedaten festgelegt haben, bietet Sling einen conns-Unterbefehl zur Interaktion mit den Verbindungen. Wir können die folgenden Operationen ausführen: list, test und 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.

Verbindungen auflisten

Es ist praktisch, alle in unserer Umgebung verfügbaren Verbindungen anzuzeigen und aufzulisten. Wir können einfach den Befehl sling conns list ausführen. Hier ist ein Beispiel:

$ 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 |
+----------------------+------------------+-------------------+

Verbindungen testen

Das Sling-CLI-Tool ermöglicht auch das Testen von Verbindungen. Sobald wir den Verbindungsnamen kennen, können wir den Befehl sling conns test verwenden:

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

Hier ist ein aktuelles Beispiel:

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

Erkennung von Connection Streams

Dies ist ein weiterer raffinierter Unterbefehl, mit dem man sehen kann, welche Datenströme für sling verfügbar sind, aus denen für eine bestimmte Verbindung gelesen wird: der sling conns discover-Befehl.

$ 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)

Für Datenbankverbindungen werden die verfügbaren Tabellen und Ansichten aufgelistet. Bei Speicherverbindungen werden die nicht rekursiven Dateiobjekte aufgelistet, die sich im angegebenen Quellordner befinden. Für SaaS/API-Verbindungen werden alle verfügbaren Objekte aufgelistet, die für den Verbrauch vorhanden sind. Nachfolgend finden Sie einige Beispiele.

Datenbankverbindungen

$ 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"
....

Wenn wir nach einem bestimmten Schema filtern wollen, können wir Folgendes tun:

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

SaaS-Verbindungen

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

Speicherverbindungen

$ 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

Wenn wir die Dateien in einem Unterordner sehen wollen, können wir das tun:

$ 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

EL-Aufgaben werden ausgeführt

Jetzt, da Ihre Verbindungen eingerichtet sind, können Sie einige Aufgaben zum Extrahieren und Laden ausführen! Wir behandeln dies ausführlich in einem separaten Beitrag, Sie können darüber [hier] lesen (https://docs.slingdata.io/sling-cli/running-tasks). Von der Befehlszeile aus können Sie auch sling run -e ausführen, was eine Reihe von Beispielen ausgibt.

Fazit

Alles in allem erleichtert Sling CLI die Verwaltung und Interaktion mit verschiedenen Arten von Verbindungen von Ihrer Shell aus. Wenn Sie Fragen oder Anregungen haben, können Sie uns gerne hier kontaktieren. Schauen Sie sich außerdem unbedingt Sling Cloud an, einen Cloud-Dienst, der Ihre verschiedenen Anforderungen zum Extrahieren und Laden zu einem wettbewerbsfähigen Preismodell erfüllt.

· Eine Minute Lesezeit
Fritz larco

Hintergrund

Sling ist ein leistungsstarkes, modernes Datenintegrationstool zum Extrahieren und Laden von Daten aus beliebten Datenquellen zu Zielen mit hoher Leistung und Leichtigkeit.

Warum Schleudern?

  • Blitzschnelle Leistung – Die Core-Engine ist in Go geschrieben und verwendet ein Streaming-Design, wodurch sie supereffizient ist, da nur minimale Daten im Speicher gehalten werden.
  • Daten schnell replizieren – Einfaches Replizieren von Daten aus einer Quelldatenbank, Datei oder SaaS-Verbindung in eine Zieldatenbank oder -datei.
  • Transparent und kostengünstig – Sling arbeitet nach einem effizienten und kostengünstigen Modell. Unser Ziel ist es, die Kosten für die Nutzung unserer Plattform transparent zu machen.

Erfahren Sie mehr über die Funktionsweise von Sling Für Sling anmelden