Entwickeln von Anwendungen in Snowflake

Bevor Sie mit der Entwicklung von Anwendungen in Snowflake beginnen, sollten Sie sich zunächst mit einigen Snowflake-Grundlagen vertraut machen. Unter diesem Thema werden die grundlegenden Aufgaben vorgestellt, die bei der Entwicklung von Anwendungen in Snowflake erforderlich sind. Unter diesem Thema erfahren Sie Folgendes:

  • Installieren und Konfigurieren des SnowSQL-CLI-Clients

  • Erstellen eines virtuellen Warehouses, einer Datenbank und einer Tabelle

  • Laden von Daten in die Tabelle und Erstellen von Abfragen auf der Tabelle

  • Verwenden von Python für das Herstellen einer Verbindung zu Snowflake, zum Ausführen von Abfragen und zum Bearbeiten der zurückgegebenen Daten

Mit diesem Wissen können Sie dann die fortgeschritteneren Funktionen und Möglichkeiten von Snowflake erkunden.

Unter diesem Thema:

SnowSQL-CLI-Client herunterladen und installieren

Der erste Schritt besteht darin, den SnowSQL-CLI-Client aus dem Snowflake Client Repository herunterzuladen. Die Anweisungen zum Herunterladen und Installieren von SnowSQL sind vom Betriebssystem abhängig:

Linux

Sie können curl verwenden, um die Linux-Version des Clients aus dem Snowflake Client Repository herunterzuladen:

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/linux_x86_64/snowsql-<version>-linux_x86_64.bash

Installieren Sie den Client nach dem Herunterladen über bash im Terminalfenster:

bash snowsql-<version>-linux_x86_64.bash

Alternativ können Sie die RPM-Version des Clients (snowflake-snowsql-<Version>-1.x86_64.rpm) herunterladen und installieren:

rpm -i snowflake-snowsql-<version>-1.x86_64.rpm
macOS

Sie können curl verwenden, um die macOS-Version des Clients aus dem Snowflake Client Repository herunterzuladen:

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/darwin_x86_64/snowsql-<version>-darwin_x86_64.pkg

Installieren Sie den Client nach dem Herunterladen, indem Sie auf die Datei snowsql-<version>-darwin_x86_64.pkg doppelklicken.

Wenn Sie über Homebrew verfügen, können Sie den Client alternativ auch über Homebrew Cask installieren:

brew cask install snowflake-snowsql
Windows

Verwenden Sie curl, um die Windows-Version des Clients aus dem Snowflake Client Repository herunterzuladen:

curl -O https://sfc-repo.snowflakecomputing.com/snowsql/bootstrap/1.2/windows_x86_64/snowsql-<version>-windows_x86_64.msi

Installieren Sie den Client, indem Sie die Datei MSI ausführen.

Überprüfen Sie nach der Installation, ob der Client erfolgreich installiert wurde, indem Sie in Ihrem Terminalfenster den Befehl snowsql ausführen:

snowsql

Die Ausgabe zeigt alle verfügbaren Parameter an, die Sie mit dem Client verwenden können.

Virtuelles Warehouse, Beispieldatenbank und Tabelle mit SnowSQL erstellen

Bei Snowflake anmelden

Sobald SnowSQL installiert ist, können Sie sich bei Snowflake anmelden. Dazu benötigen Sie die folgenden Informationen:

  • <Kontoname>: Der Name, der Ihrem Konto von Snowflake zugewiesen wurde. Es ist die Zeichenfolge, die in der URL, die Sie von Snowflake erhalten haben, dem .snowflakecomputing.com vorangestellt ist.

  • <Benutzername> (und das dazugehörige Kennwort): Dies ist der Snowflake-Benutzer, der für Sie in Ihrem Konto erstellt wurde.

Um sich anzumelden, öffnen Sie ein Terminalfenster und geben Sie folgenden Befehl ein:

snowsql -a <account_name> -u <username>

Sie werden zur Eingabe eines Kennworts aufgefordert. Wenn Ihr Anmeldeversuch erfolgreich ist, wird eine Snowflake-Sitzung für Ihren Benutzer initiiert, und die SnowSQL-Anmeldung und die Eingabeaufforderung werden angezeigt. Wenn Sie z. B. SnowSQL 1.2.9 installiert haben und Ihr Snowflake-Benutzername user1 ist, würde die Anmeldung und Eingabeaufforderung lauten:

* SnowSQL * v1.2.9
Type SQL statements or !help
user1#(no warehouse)@(no database).(no schema)>

Beachten Sie, dass die SnowSQL-Eingabeaufforderung anzeigt, dass in Ihrer Sitzung derzeit weder ein virtuelles Warehouse, noch eine Datenbank oder ein Schema verwendet wird.

Die nächsten Abschnitte beschreiben, wie diese erforderlichen Snowflake-Objekte erstellt und in der Sitzung verwendet werden.

Virtuelles Warehouse erstellen

Virtuelle Warehouses stellen die erforderlichen Computeressourcen zur Verfügung, um Abfragen und DML-Operationen wie das Laden von Daten auf Tabellen in Snowflake auszuführen. Virtuelle Warehouses gibt es in verschiedenen Größen, damit jedes Warehouse an Ihre spezifischen Abfrage- und Datenlade-Workloads angepasst werden kann.

In diesem Beispiel verwenden Sie den Befehl CREATE WAREHOUSE, um ein X-Small-Warehouse mit dem Namen sf_tuts_wh zu erstellen:

CREATE OR REPLACE WAREHOUSE sf_tuts_wh WITH
  WAREHOUSE_SIZE='X-SMALL'
  AUTO_SUSPEND = 180
  AUTO_RESUME = TRUE
  INITIALLY_SUSPENDED=TRUE;

Der einzige erforderliche Parameter ist der Name des Warehouse. Im folgenden Beispiel werden jedoch einige zusätzliche, optionale Parameter festgelegt:

  • AUTO_SUSPEND: Gibt die Anzahl der Sekunden von Inaktivität an, nach der ein Warehouse automatisch angehalten wird.

  • AUTO_RESUME: Wenn auf TRUE gesetzt, wird ein angehaltenes Warehouse automatisch fortgesetzt, wenn eine Abfrage an das Warehouse gesendet wird.

  • INITIALLY_SUSPENDED: Wenn auf TRUE gesetzt, wird das Warehouse mit dem Status „Angehalten“ erstellt.

Diese zusätzlichen Parameter stellen sicher, dass keine unnötigen Credits verbraucht werden, da das Warehouse angehalten wird und Credits nur verbraucht werden, wenn das Warehouse aktiv ist. Die Parameter stellen außerdem sicher, dass das Warehouse bereit ist, fortgesetzt zu werden, sobald Abfragen gesendet werden, sodass Ihr Workflow nicht unterbrochen wird.

Tipp

Sofern nicht ausdrücklich anders angegeben, ist bei Objektnamen (Bezeichner) in Snowflake die Groß-/Kleinschreibung nicht relevant (Anzeige erfolgt in Großbuchstaben). Weitere Details dazu finden Sie unter Objektbezeichner.

Einmal erstellt, wird das virtuelle Warehouse (sf_tuts_wh) automatisch für die Sitzung verwendet, wie in Ihrer aktualisierten SnowSQL-Eingabeaufforderung angezeigt:

user1#SF_TUTS_WH@(no database).(no schema)>

Um das in der Sitzung verwendete Warehouse anzuzeigen, können Sie auch die Funktion CURRENT_WAREHOUSE verwenden:

SELECT CURRENT_WAREHOUSE();

Mit dem Befehl USE WAREHOUSE können Sie explizit das Warehouse angeben, das in der Sitzung verwendet werden soll:

USE WAREHOUSE sf_tuts_wh;

Sie haben nun erfolgreich ein virtuelles Warehouse erstellt. Im Weiteren werden Datenbank und Tabelle angelegt.

Datenbank erstellen

Verwenden Sie den Befehl CREATE DATABASE, um eine Datenbank zu erstellen. Im folgenden Beispiel erstellen Sie eine Datenbank mit dem Namen sf_tuts:

CREATE OR REPLACE DATABASE sf_tuts;

Wenn Sie in Snowflake eine Datenbank erstellen, wird in der Datenbank automatisch ein Standardschema mit dem Namen public erstellt. Sowohl die Datenbank als auch das Schema werden automatisch in der Sitzung verwendet, wie in Ihrer aktualisierten SnowSQL-Eingabeaufforderung angezeigt:

user1#SF_TUTS_WH@SF_TUTS.PUBLIC>

Siehe auch:

Tabelle erstellen

Um die in der Datenbank gespeicherten Daten weiterverarbeiten zu können, müssen Sie zunächst eine Tabelle für die Daten erstellen. Dies kann mit dem Befehl CREATE TABLE erfolgen.

Die Spaltennamen und Datentypen in Ihrer Tabelle sollten mit den zu ladenden Daten übereinstimmen. Für die Zwecke dieses Themas handelt es sich bei den zu ladenden Daten um Mitarbeiterinformationen, die als CSV-Beispieldateien hier zum Herunterladen bereitgestellt werden.

Laden Sie die ZIP-Datei herunter, und extrahieren Sie dann die CSV-Dateien an einen beliebigen Speicherort in Ihrer Umgebung. In den nachfolgenden Beispielen unter diesem Thema wird als Speicherort ein Verzeichnis mit dem Namen tmp angenommen.

Das folgende CREATE TABLE-Beispiel veranschaulicht die Spaltennamen und Datentypen, die den zu ladenden Daten entsprechen. Die Spaltennamen der Tabelle entsprechen den Spalten aus den CSV-Beispieldateien:

CREATE OR REPLACE TABLE emp_basic (
  first_name STRING ,
  last_name STRING ,
  email STRING ,
  streetaddress STRING ,
  city STRING ,
  start_date DATE
  );

Daten mit SnowSQL laden und abfragen

In diesem Abschnitt wird beschrieben, wie SQL-Befehle und SnowSQL zum Massenladen von Daten verwendet werden. Snowflake unterstützt jedoch viele weitere Optionen zum Laden von Daten.

In der Seitenleiste (rechts) finden Sie Links zu anderen Themen, die das Laden von Daten behandeln.

Datendateien hochladen

Laden Sie nun Daten aus einer oder mehreren Dateien in die Tabelle. Verwenden Sie zunächst den Befehl PUT, um die Dateien in einen internen Stagingbereich hochzuladen. Der Stagingbereich dient zum Speichern von Daten, bevor diese geladen werden. Sie können Platzhalter (z. B. *) verwenden, um mehrere Dateien hochzuladen.

Im folgenden Beispiel laden Sie die CSV-Beispieldateien in den internen Stagingbereich für die emp_basic-Tabelle hoch, die Sie zuvor im sf_tuts.public-Schema erstellt haben:

Linux oder macOS
PUT file:///tmp/employees0*.csv @sf_tuts.public.%emp_basic;
Windows
PUT file://C:\temp\employees0*.csv @sf_tuts.public.%emp_basic;

Tipp

Das Zeichen @ vor dem Datenbank- und Schemanamen (@sf_tuts.public) zeigt an, dass die Dateien in einen internen Stagingbereich und nicht in einen externen Stagingbereich hochgeladen werden. Das Zeichen % vor dem Tabellennamen (%emp_basic) zeigt an, dass der verwendete interne Stagingbereich der Stagingbereich für die Tabelle ist. Weitere Informationen zu Stagingbereichen finden Sie unter Staging von Datendateien aus einem lokalen Dateisystem.

Daten aus den Dateien laden

Sobald sich die Dateien im Stagingbereich befinden, können Sie den Befehl COPY INTO <Tabelle> verwenden, um die Daten aus den Dateien in die von Ihnen erstellte Tabelle zu laden:

COPY INTO emp_basic
  FROM @sf_tuts.public.%emp_basic
  FILE_FORMAT = (type = csv field_optionally_enclosed_by='"')
  PATTERN = '.*employees0[1-5].csv.gz'
  ON_ERROR = 'skip_file';

FILE_FORMAT gibt den Dateityp an (z. B. csv) und wie die Felder eingeschlossen werden. In diesem Beispiel sind die Felder durch doppelte Anführungszeichen eingeschlossen.

Tipp

Wenn Sie mehrere Dateien laden, können die folgenden optionalen Parameter nützlich sein:

  • PATTERN: Wendet zur Angabe der Dateien ein Muster an, das mit einem regulären Ausdruck übereinstimmt.

  • ON_ERROR: Gibt an, was passiert, wenn beim Laden einer Datei ein Fehler auftritt.

Tabelle abfragen

Nachdem die Daten in die Tabelle geladen wurden, können Sie mit SQL-SELECT-Anweisungen Abfragen auf diesen Daten ausführen.

Zuerst werden alle Spalten und Zeilen der Tabelle zurückgeben:

SELECT * FROM emp_basic;

Eine SELECT-Anweisung kann Funktionen enthalten, wie z. B. LIKE, um Daten abzurufen, die bestimmten Anforderungen entsprechen. Im folgenden Beispiel gibt der Befehl die E-Mail-Adressen mit einem britischen Domänennamen (.uk) zurück:

SELECT email FROM emp_basic WHERE email LIKE '%.uk';

Tabelle aktualisieren

Sie können auch DML-Befehle verwenden, um die Tabelle direkt zu bearbeiten. Im folgenden Beispiel wird der Befehl INSERT verwendet, um eine einzelne Zeile in die Tabelle einzufügen:

INSERT INTO emp_basic VALUES
  ('Clementine','Adamou','cadamou@sf_tuts.com','10510 Sachs Road','Klenak','2017-9-22');

Snowflake unterstützt viele weitere Befehle, die Sie zur Interaktion mit Ihren Daten verwenden können. Dies wird an anderer Stelle vertieft, hier soll es im Weiteren darum gehen, wie eine Python-Anwendung mit Snowflake verbunden werden kann, um die Leistungsfähigkeit der von Snowflake unterstützten Programmiersprachen zu nutzen.

Python mit Snowflake verwenden

Im folgenden Abschnitt werden einige grundlegende Beispiele für den Einstieg in die Verwendung von Python bereitgestellt. Snowflake bietet jedoch Schnittstellen für viele weitere populäre Programmiersprachen.

In der Seitenleiste (rechts) finden Sie Links zu anderen Themen, in denen die von Snowflake unterstützten befehlsorientierten Benutzerschnittstellen behandelt werden.

Snowflake-Konnektor für Python installieren

Zur Verbindung mit Snowflake unter Verwendung von Python, müssen Python 3.6 (oder höher) und der Snowflake-Konnektor für Python installiert sein.

Prüfen Sie zunächst, welche Version von Python in Ihrer Umgebung installiert ist, indem Sie folgenden Befehl in einem Terminalfenster ausführen:

python --version

Wenn Ihre Version Python 3.6 oder höher ist, können Sie fortfahren. Wenn Ihre Version niedriger ist oder Python nicht installiert ist, müssen Sie Python aktualisieren oder installieren:

Linux oder macOS

Die Distribution in Ihrer Umgebung verfügt höchstwahrscheinlich über Python 3.5 oder höher, das über seinen Paketmanager installiert werden kann. Möglicherweise müssen Sie auch pip installieren, das Paketverwaltungssystem, das zur Installation von Python-Paketen verwendet wird. Es kann auch über die Paketmanager der meisten Distributionen heruntergeladen werden.

Windows

Sie können Python über die Website der Python Software Foundation herunterladen.

Wenn Python und pip installiert sind, verwenden Sie pip, um das Paket für den Python-Konnektor über die Befehlszeile zu installieren:

pip install snowflake-connector-python

Sie können sich nun mit Snowflake verbinden und Python verwenden, um Daten abzufragen und andere Operationen durchzuführen.

Tipp

Bevor Sie beginnen, sollten Sie in Betracht ziehen, Ihre SnowSQL-Anmeldeinformationen als Umgebungsvariablen hinzuzufügen, damit diese in Ihren Skripten nicht offengelegt werden. Weitere Details dazu finden Sie unter Verbinden über SnowSQL.

Konnektor importieren

Importieren Sie in Ihrer Python-Anwendung zunächst das Konnektor-Paket (snowflake.connector). Wenn Sie Umgebungsvariablen verwenden, müssen Sie auch das os-Paket importieren:

import snowflake.connector
import os

Mit Snowflake verbinden

Als Nächstes verbinden Sie sich unter Verwendung Ihren Anmeldeinformationen mit Snowflake. Wenn Sie Ihre Anmeldeinformationen als Umgebungsvariablen eingerichtet haben, referenzieren Sie diese hier. Hier legen Sie auch das virtuelle Warehouse, die Datenbank und das Schema fest, das in Ihrer Snowflake-Sitzung verwendet werden soll:

USER = os.getenv('SNOWSQL_USER')
PASSWORD = os.getenv('SNOWSQL_PWD')
ACCOUNT = os.getenv('SNOWSQL_ACCOUNT')

ctx = snowflake.connector.connect(
  user=USER,
  password=PASSWORD,
  account=ACCOUNT,
  warehouse='SF_TUTS_WH',
  database='SF_TUTS',
  schema='PUBLIC'
  )

Abfrage definieren

Sie können Befehle verwenden, um die Daten anzugeben, die Sie für Ihre Anwendung benötigen. Im folgenden Beispiel verknüpfen Sie mehrere Zeichenfolgen zu einer einzigen Abfrage:

command = "SELECT start_date FROM emp_basic "
command += "WHERE start_date >= '2016-12-31' "
command += "ORDER by start_date;"

Abfrage ausführen und Ergebnisse zurückgeben

Die SQL-Befehle werden mithilfe der Cursorobjektiterator-Methode ausgeführt. Die Daten werden dann an eine leere Python-Liste angehängt:

dates = []
cs = ctx.cursor()
try:
    cs.execute(command)
    for start_date in cs:
        dates.append(start_date)
finally:
    cs.close()

Wenn Sie die Daten direkt mit einem Python-Programm einlesen, können Sie zum Verarbeiten der Daten Python-Pakete verwenden. Beispielsweise können Sie die Visualisierungspakete seaborn und matplotlib.pyplot zur Visualisierung der Daten verwenden:

import matplotlib.pyplot
import seaborn as sns

months = []

for i in dates:
    months.append(i.strftime('%m'))

sns.distplot(
    months,
    hist = True,
    axlabel = "Month",
    label = "Employee Growth in 2017",
    bins = 12,
    kde=False)

matplotlib.pyplot.show()

Das resultierende Diagramm würde in etwa wie folgt aussehen:

Example of visualization package showing employee growth

Weitere Informationen zu den Verwendungsmöglichkeiten von Python und Snowflake finden Sie in der Python-Dokumentation.

Nächste Schritte

Nachdem Sie die Aufgaben unter diesem Thema abgeschlossen haben, sollten Sie mit den Grundlagen der Verwendung von SnowSQL und dem Snowflake-Konnektor für Python vertraut sein.

Beispieldatenbank und virtuelles Warehouse löschen (optional)

Falls Sie nicht vorhaben, die unter diesem Thema erstellte Beispieldatenbank und das Beispielwarehouse weiterzuverwenden, sollten Sie diese löschen:

DROP DATABASE IF EXISTS sf_tuts;

DROP WAREHOUSE IF EXISTS sf_tuts_wh;

Erweiterte Anwendungsfunktionen

Wenn Sie die Möglichkeiten von Snowflake weiter erkunden, beachten Sie die folgenden Funktionen, die für die Entwicklung fortgeschrittener Anwendungen zur Verfügung stehen:

Funktionsbereich

Funktion

Semistrukturierte Daten (JSON, Avro, Parquet, usw.)

Semistrukturierte Daten

Data Lakes

Arbeiten mit externen Tabellen

Time Travel

Verstehen und Verwenden von Time Travel

Kontinuierliche Datenpipelines

Änderungsnachverfolgung mit Tabellenstreams . Ausführen von SQL-Anweisungen für einen Zeitplan mithilfe von Aufgaben

Variablen

SQL-Variablen

Transaktionen mit mehreren Anweisungen

Transaktionen

Funktionen und Prozeduren

UDFs (Benutzerdefinierte Funktionen) . Externe Funktionen . Gespeicherte Prozeduren