Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Amazon Athena Snowflake Konnektor
Der Amazon-Athena-Konnektor für Snowflake
Dieser Konnektor kann bei Glue Data Catalog als Verbundkatalog registriert werden. Es unterstützt in Lake Formation definierte Datenzugriffskontrollen auf Katalog-, Datenbank-, Tabellen-, Spalten-, Zeilen- und Tagebene. Dieser Konnektor verwendet Glue Connections, um die Konfigurationseigenschaften in Glue zu zentralisieren.
Voraussetzungen
Stellen Sie den Konnektor für Ihr AWS-Konto mithilfe der Athena-Konsole oder AWS Serverless Application Repository bereit. Weitere Informationen finden Sie unter Erstellen Sie eine Datenquellenverbindung oder Verwenden Sie den AWS Serverless Application Repository , um einen Datenquellen-Connector bereitzustellen.
Einschränkungen
-
Schreiboperationen wie DDL werden nicht unterstützt.
-
In einem Multiplexer-Setup werden der Überlauf-Bucket und das Präfix von allen Datenbank-Instances gemeinsam genutzt.
-
Alle relevanten Lambda-Grenzwerte. Weitere Informationen finden Sie unter Lambda quotas (Lambda-Kontingente) im AWS Lambda -Entwicklerhandbuch.
-
Derzeit werden Snowflake-Ansichten mit Einzelaufteilung unterstützt.
-
Da bei Objektnamen in Snowflake zwischen Groß- und Kleinschreibung unterschieden wird, können zwei Tabellen denselben Namen in Klein- und Großbuchstaben haben (z. B.
EMPLOYEE
undemployee
). In Athena Federated Query werden Schematabellennamen für die Lambda-Funktion in Kleinbuchstaben bereitgestellt. Um dieses Problem zu umgehen, können Sie@schemaCase
-Abfragehinweise zum Abrufen der Daten aus Tabellen bereitstellen, bei deren Namen zwischen Groß- und Kleinschreibung unterscheiden wird. Im Folgenden finden Sie zwei Beispielabfragen mit Abfragehinweisen.SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=upper"
SELECT * FROM "lambda:snowflakeconnector".SYSTEM."MY_TABLE@schemaCase=upper&tableCase=lower"
-
Wenn Sie Ihre Snowflake-Verbindungen zu Glue Catalog und Lake Formation migrieren, verwendet Athena nicht standardmäßig alle Anfragen in Großbuchstaben oder unterstützt Anmerkungen. Das Standardverhalten für Glue Connection passt das Gehäuse nicht an.
Snowflake unterstützt die folgenden Gehäusemodi:
-
KEINE (Standard für Stecker mit Klebeverbindung)
-
CASE_INSENSITIVE_SEARCH
-
ANMERKUNG (Standard für Stecker ohne Klebeverbindung)
-
Bedingungen
Die folgenden Begriffe und Konzepte beziehen sich auf den Snowflake-Konnektor.
-
Datenbank-Instance — Jede Instance einer Datenbank, die vor Ort, auf Amazon EC2 oder auf Amazon RDS bereitgestellt wird.
-
Handler – Ein Lambda-Handler, der auf Ihre Datenbank-Instance zugreift. Ein Handler kann für Metadaten oder für Datensätze verwendet werden.
-
Metadaten-Handler – Ein Lambda-Handler, der Metadaten von Ihrer Datenbank-Instance abruft.
-
Record Handler – Ein Lambda-Handler, der Datensätze aus Ihrer Datenbank-Instance abruft.
-
Composite Handler – Ein Lambda-Handler, der sowohl Metadaten als auch Datensätze aus Ihrer Datenbank-Instance abruft.
-
Eigenschaft oder Parameter – Eine Datenbankeigenschaft, die von Handlern zum Extrahieren von Datenbankinformationen verwendet wird. Sie konfigurieren diese Eigenschaften als Lambda-Umgebungsvariablen.
-
Verbindungszeichenfolge – Eine Textzeichenfolge, die verwendet wird, um eine Verbindung zu einer Datenbank-Instance herzustellen.
-
Katalog — Ein nicht bei Athena registrierter AWS Glue Katalog, der ein erforderliches Präfix für die
connection_string
Immobilie ist. -
Multiplex-Handler – Ein Lambda-Handler, der mehrere Datenbankverbindungen akzeptieren und verwenden kann.
Parameter
Verwenden Sie die Parameter in diesem Abschnitt, um den Snowflake-Connector zu konfigurieren.
Es wird empfohlen, einen Snowflake-Connector mithilfe eines Glue-Verbindungsobjekts zu konfigurieren. Setzen Sie dazu die glue_connection
Umgebungsvariable des Snowflake-Konnektors Lambda auf den Namen der zu verwendenden Glue-Verbindung.
Eigenschaften von Klebeverbindungen
Verwenden Sie den folgenden Befehl, um das Schema für ein Glue-Verbindungsobjekt abzurufen. Dieses Schema enthält alle Parameter, mit denen Sie Ihre Verbindung steuern können.
aws glue describe-connection-type --connection-type SNOWFLAKE
Eigenschaften der Lambda-Umgebung
-
glue_connection — Gibt den Namen der Glue-Verbindung an, die dem Verbundstecker zugeordnet ist.
-
casing_mode — (Optional) Gibt an, wie bei Schema- und Tabellennamen die Groß- und Kleinschreibung behandelt werden soll. Der
casing_mode
Parameter verwendet die folgenden Werte, um das Verhalten der Groß- und Kleinschreibung zu spezifizieren:-
none — Die Groß-/Kleinschreibung der angegebenen Schema- und Tabellennamen wird nicht geändert. Dies ist die Standardeinstellung für Stecker, denen eine Klebeverbindung zugeordnet ist.
-
Anmerkung — Passt den Tabellennamen an, falls eine Anmerkung vorhanden ist. Dies ist die Standardeinstellung für Stecker, denen keine Klebeverbindung zugeordnet ist.
-
case_insensitive_search — Führt Suchen in Schema- und Tabellennamen in Snowflake ohne Berücksichtigung der Groß- und Kleinschreibung durch. Verwenden Sie diesen Wert, wenn Ihre Abfrage Schema- oder Tabellennamen enthält, die nicht mit der Standard-Groß- und Kleinschreibung für Ihren Connector übereinstimmen.
-
groß — Alle angegebenen Schema- und Tabellennamen werden in Großbuchstaben geschrieben.
-
lower — Kleinschreibung aller angegebenen Schema- und Tabellennamen.
-
Anmerkung
-
Alle Konnektoren, die Glue-Verbindungen verwenden, müssen diese AWS Secrets Manager zum Speichern von Anmeldeinformationen verwenden.
-
Der mit Glue-Verbindungen erstellte Snowflake-Konnektor unterstützt die Verwendung eines Multiplexing-Handlers nicht.
-
Der mit Glue-Verbindungen erstellte Snowflake-Connector unterstützt nur 2.
ConnectionSchemaVersion
Anmerkung
Athena-Datenquellenconnectors, die am 3. Dezember 2024 und später erstellt wurden, verwenden AWS Glue Verbindungen.
Die unten aufgeführten Parameternamen und Definitionen beziehen sich auf Athena-Datenquellenkonnektoren, die ohne eine zugehörige Glue-Verbindung erstellt wurden. Verwenden Sie die folgenden Parameter nur, wenn Sie eine frühere Version eines Athena-Datenquellenconnectors manuell bereitstellen oder wenn die glue_connection
Umgebungseigenschaft nicht angegeben ist.
Eigenschaften der Lambda-Umgebung
-
default — Die JDBC-Verbindungszeichenfolge, die für die Verbindung mit der Snowflake-Datenbankinstanz verwendet werden soll. Beispiel:
snowflake://${jdbc_connection_string}
-
catalog_connection_string — Wird vom Multiplexing-Handler verwendet (wird bei Verwendung einer Glue-Verbindung nicht unterstützt). Eine Verbindungszeichenfolge einer Datenbank-Instance. Stellen Sie der Umgebungsvariablen den Namen des in Athena verwendeten Katalogs voran. Wenn der bei Athena registrierte Katalog beispielsweise mysnowflakecatalog lautet, dann lautet der Name der Umgebungsvariablen mysnowflakecatalog_connection_string.
-
spill_bucket – Gibt den Amazon S3-Bucket für Daten an, die die Lambda-Funktionsgrenzen überschreiten.
-
spill_prefix – (Optional) Ist standardmäßig ein Unterordner im angegebenen
spill_bucket
genanntathena-federation-spill
. Wir empfehlen Ihnen, einen Amazon-S3-Speicher-Lebenszyklus an dieser Stelle zu konfigurieren, um die Überlaufe zu löschen, die älter als eine festgelegte Anzahl von Tagen oder Stunden sind. -
spill_put_request_headers – (Optional) Eine JSON-codierte Zuordnung von Anforderungsheadern und Werten für die Amazon-S3-
putObject
-Anforderung, die für den Überlauf verwendet wird (z. B.{"x-amz-server-side-encryption" : "AES256"}
). Weitere mögliche Header finden Sie PutObjectin der Amazon Simple Storage Service API-Referenz. -
kms_key_id – (Optional) Standardmäßig werden alle Daten, die an Amazon S3 gesendet werden, mit dem AES-GCM-authentifizierten Verschlüsselungsmodus und einem zufällig generierten Schlüssel verschlüsselt. Damit Ihre Lambda-Funktion stärkere Verschlüsselungsschlüssel verwendet, die von KMS generiert werden, wie
a7e63k4b-8loc-40db-a2a1-4d0en2cd8331
, können Sie eine ID einer Verschlüsselung angeben. -
disable_spill_encryption – (Optional) Bei Einstellung auf
True
, wird die Spill-Verschlüsselung deaktiviert. Die Standardeinstellung istFalse
, sodass Daten, die an S3 übertrragen werden, mit AES-GCM verschlüsselt werden - entweder mit einem zufällig generierten Schlüssel oder mit KMS zum Generieren von Schlüsseln. Das Deaktivieren der Überlauf-Verschlüsselung kann die Leistung verbessern, insbesondere wenn Ihr Überlauf-Standort eine serverseitige Verschlüsselung verwendet.
Verbindungszeichenfolge
Verwenden Sie eine JDBC-Verbindungszeichenfolge im folgenden Format, um eine Verbindung zu einer Datenbank-Instance herzustellen.
snowflake://${
jdbc_connection_string
}
Verwenden eines Multiplexing-Handlers
Sie können einen Multiplexer verwenden, um mit einer einzigen Lambda-Funktion eine Verbindung zu mehreren Datenbank-Instances herzustellen. Anfragen werden anhand des Katalognamens weitergeleitet. Verwenden Sie die folgenden Klassen in Lambda.
Handler | Klasse |
---|---|
Composite Handler | SnowflakeMuxCompositeHandler |
Metadaten-Handler | SnowflakeMuxMetadataHandler |
Record Handler | SnowflakeMuxRecordHandler |
Multiplex-Handler-Parameter
Parameter | Beschreibung |
---|---|
$ |
Erforderlich Eine Verbindungszeichenfolge einer Datenbank-Instance. Stellen Sie der Umgebungsvariablen den Namen des in Athena verwendeten Katalogs voran. Wenn zum Beispiel der bei Athena registrierte Katalog mysnowflakecatalog ist, dann lautet der Name der Umgebungsvariablen mysnowflakecatalog_connection_string . |
default |
Erforderlich Die standardmäßige Verbindungszeichenfolge. Diese Zeichenfolge wird verwendet, wenn der Katalog verwendet wird lambda:${ AWS_LAMBDA_FUNCTION_NAME } . |
Die folgenden Beispieleigenschaften beziehen sich auf eine Snowflake MUX Lambda-Funktion, die zwei Datenbank-Instances unterstützt: snowflake1
(Standard) und snowflake2
.
Eigenschaft | Wert |
---|---|
default |
snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1&${Test/RDS/Snowflake1} |
snowflake_catalog1_connection_string |
snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1${Test/RDS/Snowflake1} |
snowflake_catalog2_connection_string |
snowflake://jdbc:snowflake://snowflake2.host:port/?warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2 |
Bereitstellen von Anmeldeinformationen
Um einen Benutzernamen und ein Kennwort für Ihre Datenbank in Ihrer JDBC-Verbindungszeichenfolge anzugeben, können Sie Eigenschaften von Verbindungszeichenfolgen oder AWS Secrets Manager verwenden.
-
Verbindungszeichenfolge – Ein Benutzername und ein Kennwort können als Eigenschaften in der JDBC-Verbindungszeichenfolge angegeben werden.
Wichtig
Verwenden Sie aus Sicherheitsgründen keine hartcodierten Anmeldeinformationen in Ihren Umgebungsvariablen oder Verbindungszeichenfolgen. Informationen zum Verschieben von hartcodierten Geheimnissen nach finden Sie im AWS Secrets Manager Benutzerhandbuch unter Verschieben von hartcodierten AWS Secrets Manager Geheimnissen nach.AWS Secrets Manager
-
AWS Secrets Manager— Um die Athena Federated Query-Funktion verwenden zu können AWS Secrets Manager, muss die mit Ihrer Lambda-Funktion verbundene VPC über Internetzugang
oder einen VPC-Endpunkt verfügen, um eine Verbindung zu Secrets Manager herzustellen. Sie können den Namen eines Geheimnisses in AWS Secrets Manager Ihre JDBC-Verbindungszeichenfolge eingeben. Der Konnektor ersetzt den geheimen Namen durch
username
- undpassword
-Werte von Secrets Manager.Für Amazon RDS-Datenbank-Instances ist diese Unterstützung eng integriert. Wenn Sie Amazon RDS verwenden, empfehlen wir dringend, eine Rotation der Anmeldeinformationen zu verwenden AWS Secrets Manager . Wenn Ihre Datenbank Amazon RDS nicht verwendet, speichern Sie die Anmeldeinformationen als JSON im folgenden Format:
{"username": "${username}", "password": "${password}"}
Beispiel einer Verbindungszeichenfolge mit einem geheimen Namen
Die folgende Zeichenfolge hat den geheimen Namen ${Test/RDS/Snowflake1}
.
snowflake://jdbc:snowflake://snowflake1.host:port/?warehouse=warehousename&db=db1&schema=schema1${Test/RDS/Snowflake1}&...
Der Konnektor verwendet den geheimen Namen, um Secrets abzurufen und den Benutzernamen und das Kennwort bereitzustellen, wie im folgenden Beispiel gezeigt.
snowflake://jdbc:snowflake://snowflake1.host:port/warehouse=warehousename&db=db1&schema=schema1&user=sample2&password=sample2&...
Derzeit erkennt Snowflake die user
- und password
-JDBC-Eigenschaften. Es akzeptiert auch den Benutzernamen und das Passwort in dem Format username
/
password
ohne die Schlüssel user
oderpassword
.
Verwenden eines einzelnen Verbindungs-Handlers
Sie können die folgenden Metadaten und Record Handler für eine einzelne Verbindung verwenden, um eine Verbindung zu einer einzelnen Snowflake-Instance herzustellen.
Handler-Typ | Klasse |
---|---|
Composite Handler | SnowflakeCompositeHandler |
Metadaten-Handler | SnowflakeMetadataHandler |
Record Handler | SnowflakeRecordHandler |
Parameter für Einzelverbindungs-Handler
Parameter | Beschreibung |
---|---|
default |
Erforderlich Die standardmäßige Verbindungszeichenfolge. |
Die Einzelverbindungs-Handler unterstützen eine Datenbank-Instance und müssen einen default
-Verbindungszeichenfolgenparameter bereitstellen. Alle anderen Verbindungszeichenfolgen werden ignoriert.
Die folgende Beispieleigenschaft gilt für eine einzelne Snowflake-Instance, die von einer Lambda-Funktion unterstützt wird.
Eigenschaft | Wert |
---|---|
default |
snowflake://jdbc:snowflake://snowflake1.host:port/?secret=Test/RDS/Snowflake1 |
Überlauf-Parameter
Das Lambda-SDK kann Daten an Amazon S3 übertragen. Alle Datenbank-Instances, auf die mit derselben Lambda-Funktion zugegriffen wird, werden an denselben Speicherort verschoben.
Parameter | Beschreibung |
---|---|
spill_bucket |
Erforderlich Überlauf-Bucket-Name. |
spill_prefix |
Erforderlich Schlüssel-Prefix für den Überlauf-Bucket. |
spill_put_request_headers |
(Optional) Eine JSON-codierte Zuordnung von Anforderungsheadern und Werten für die Amazon-S3-putObject -Anforderung, die für den Überlauf verwendet wird (z. B. {"x-amz-server-side-encryption" :
"AES256"} ). Weitere mögliche Header finden Sie PutObjectin der Amazon Simple Storage Service API-Referenz. |
Datentypunterstützung
Die folgende Tabelle zeigt die entsprechenden Datentypen für JDBC und Apache Arrow.
JDBC | Arrow |
---|---|
Boolesch | Bit |
Ganzzahl | Tiny |
Short | Smallint |
Ganzzahl | Int |
Long | Bigint |
float | Float4 |
Double | Float8 |
Datum | DateDay |
Zeitstempel | DateMilli |
String | Varchar |
Bytes | Varbinary |
BigDecimal | Dezimal |
ARRAY | Auflisten |
Datentypkonvertierungen
Zusätzlich zu den Konvertierungen von JDBC in Arrow führt der Konnektor bestimmte andere Konvertierungen durch, um die Snowflake-Quelle und die Athena-Datentypen kompatibel zu machen. Diese Konvertierungen tragen dazu bei, dass Abfragen erfolgreich ausgeführt werden. Die folgende Tabelle zeigt diese Konvertierungen.
Quelldatentyp (Snowflake) | Konvertierter Datentyp (Athena) |
---|---|
TIMESTAMP (ZEITSTEMPEL) | TIMESTAMPMILLI |
DATUM | TIMESTAMPMILLI |
INTEGER | INT |
DECIMAL | BIGINT |
TIMESTAMP_NTZ | TIMESTAMPMILLI |
Alle anderen nicht unterstützten Datentypen werden in VARCHAR
konvertiert.
Partitionen und Splits
Partitionen werden verwendet, um zu bestimmen, wie Splits für den Konnektor generiert werden. Athena konstruiert eine synthetische Säule vom Typ varchar
, die das Partitionierungsschema für die Tabelle darstellt, das dem Konnektor beim Generieren von Splits hilft. Der Konnektor ändert nicht die eigentliche Tabellendefinition.
Um diese synthetische Spalte und die Partitionen zu erstellen, benötigt Athena die Definition eines Primärschlüssels. Da Snowflake jedoch keine Einschränkungen für Primärschlüssel erzwingt, müssen Sie die Eindeutigkeit selbst durchsetzen. Geschieht dies nicht, verwendet Athena standardmäßig einen einzelnen Split.
Leistung
Verwenden Sie nach Möglichkeit Filter in Abfragen, um eine optimale Leistung zu erzielen. Darüber hinaus empfehlen wir dringend die native Partitionierung, um riesige Datensätze mit einheitlicher Partitionsverteilung abzurufen. Die Auswahl einer Teilmenge von Spalten beschleunigt die Abfragelaufzeit erheblich und reduziert die gescannten Daten. Der Snowflake-Konnektor ist aufgrund der Gleichzeitigkeit widerstandsfähig gegenüber Drosselung.
Der Athena-Snowflake-Konnektor führt einen Prädikat-Pushdown durch, um die Anzahl der von der Abfrage gescannten Daten zu reduzieren. LIMIT
-Klauseln, einfache Prädikate und komplexe Ausdrücke werden an den Konnektor übertragen, um die Menge der gescannten Daten zu reduzieren und die Laufzeit der Abfrage zu verkürzen.
LIMIT-Klauseln
Eine LIMIT N
-Anweisung reduziert die von der Abfrage durchsuchten Daten. Mit LIMIT N
-Pushdown gibt der Konnektor nur N
Zeilen an Athena zurück.
Prädikate
Ein Prädikat ist ein Ausdruck in der WHERE
-Klausel einer SQL-Abfrage, der einen booleschen Wert ergibt und Zeilen auf der Grundlage mehrerer Bedingungen filtert. Der Athena-Snowflake-Konnektor kann diese Ausdrücke kombinieren und sie direkt an Snowflake weiterleiten, um die Funktionalität zu verbessern und die Menge der gescannten Daten zu reduzieren.
Die folgenden Athena-Snowflake-Konnektor-Operatoren unterstützen Prädikat-Pushdown:
-
Boolean: UND, ODER, NICHT
-
Gleichheit: GLEICH, NICHT-GLEICH, WENIGER_ALS, WENIGER_ODER-GLEICH, GRÖSSER_ALS, GRÖSSER_ODER-GLEICH, IST_UNTERSCHIEDEN VON, NULL_WENN, IST_NULL
-
Arithmetik: ADDIEREN, SUBTRAHIEREN, MULTIPLIZIEREN, DIVIDIEREN, MODULIEREN, NEGIEREN
-
Andere: WIE_MUSTER, IN
Beispiel für einen kombinierten Pushdown
Kombinieren Sie für erweiterte Abfragefunktionen die Pushdown-Typen wie im folgenden Beispiel:
SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') LIMIT 10;
Passthrough-Abfragen
Der Snowflake-Connector unterstützt Passthrough-Abfragen. Passthrough-Abfragen verwenden eine Tabellenfunktion, um Ihre vollständige Abfrage zur Ausführung an die Datenquelle weiterzuleiten.
Um Passthrough-Abfragen mit Snowflake zu verwenden, können Sie die folgende Syntax verwenden:
SELECT * FROM TABLE( system.query( query => '
query string
' ))
Mit der folgenden Beispielabfrage wird eine Abfrage an eine Datenquelle in Snowflake weitergeleitet. Die Abfrage wählt alle Spalten in der customer
Tabelle aus und begrenzt die Ergebnisse auf 10.
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
Lizenzinformationen
Durch die Verwendung dieses Connectors erkennen Sie die Einbindung von Komponenten von Drittanbietern an. Eine Liste dieser Komponenten finden Sie in der Datei pom.xml
Weitere Ressourcen
Die neuesten Informationen zur JDBC-Treiberversion finden Sie in der Datei pom.xml
Weitere Informationen zu diesem Connector finden Sie auf der entsprechenden Website unter .com