API-Unterstützung für ODBC-Treiber¶
Der Snowflake ODBC-Treiber unterstützt die Version 3.52 der ODBC-API. Unter diesem Thema werden die für Snowflake relevanten ODBC-Routinen aufgelistet und angezeigt, ob sie unterstützt werden. Die Routinen sind in Kategorien eingeteilt, die auf der Grundlage der von ihnen ausgeführten Funktion erstellt wurden.
Die vollständige API-Referenz finden Sie in der Microsoft ODBC-Programmierreferenz.
Verbinden mit einer Datenquelle¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
Abrufen von Informationen zu einem Treiber und einer Datenquelle¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Einstellen und Abrufen von Treiberattributen¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
Das Festlegen von SQL_ATTR_METADATA_ID wirkt sich nur auf die Funktionen SQLTables und SQLColumns aus (und nicht auf die anderen unterstützten Katalogfunktionen). |
|
✔ |
Der Nur-Lese-Modus wird nicht unterstützt. SQL_MODE_READ_ONLY wird an den Treiber übergeben, aber Snowflake schreibt immer noch in die Datenbank. . . Außerdem wurden einige Attribute nach API-Version 3.52 eingeführt: SQL_ATTR_ASYNC_DBC_EVENT, SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE, SQL_ATTR_ASYNC_DBC_PCALLBACK, SQL_ATTR_ASYNC_DBC_PCONTEXT, SQL_ATTR_DBC_INFO_TOKEN. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
|
|
✔ |
Das SQL_ATTR_CONNECTION_POOLING-Attribut wurde nach ODBC-API in Version 3.52 eingeführt und wird nicht unterstützt. |
|
✔ |
SQL_ATTR_CURSOR_SCROLLABLE unterstützt nur einen SQL_NONSCROLLABLE-Wert. . SQL_ATTR_USE_BOOKMARKS unterstützt nur einen SQL_UB_OFF-Wert. . . Aus Gründen der Kompatibilität mit Tools von Drittanbietern hat SQL_ATTR_ENABLE_AUTO_IPD standardmäßig den Wert „true“, obwohl der ODBC-Standard vorschreibt, dass standardmäßig den Wert „false“ verwendet werden soll. Um den Standardwert auf „false“ zu ändern, setzen Sie den Parameter EnableAutoIpdByDefault auf |
|
✔ |
Zusätzlich zu den Standardattributen unterstützt die Snowflake-Implementierung das Attribut SQL_SF_STMT_ATTR_LAST_QUERY_ID, mit dem der Benutzer die letzte Abfrage-ID abrufen kann, die dem angegebenen Anweisungshandle zugeordnet ist. Ein unvollständiges Beispiel finden Sie unten im Abschnitt Beispiele. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. Ersetzt durch |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. Ersetzt durch |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. Ersetzt durch |
Jede der vorhergehenden Funktionen hat eine entsprechende Funktion, die breite Zeichen (Unicode) akzeptiert. Jede solche Unicode-Funktion hat den oben gezeigten Namen, gefolgt von „W“. Beispielsweise hat die Funktion SQLGetStmtAttr, die ein char-Array als dritten Parameter akzeptiert, eine entsprechende Funktion mit dem Namen SQLGetStmtAttrW, die ein wchar-Array als dritten Parameter akzeptiert.
Snowflake-spezifisches Verhalten¶
SQLSetConnectAttrDiese Methode unterstützt zwei Snowflake-spezifische Attribute:
Attributname
Beschreibung
SQL_SF_CONN_ATTR_APPLICATION
Dies überschreibt den Wert, der durch die Einstellung APPLICATION in der Registrierungs- oder INI-Datei angegeben wird.
SQL_SF_CONN_ATTR_PRIV_KEY
Dies ist ein EVP_PKEY*-Zeiger, der auf eine speicherinterne Kopie des privaten Schlüssels verweist. Dadurch werden die Einstellungen PRIV_KEY_FILE und PRIV_KEY_PWD in der Registrierung oder der INI-Datei überschrieben. Snowflake empfiehlt, dieses Attribut zum Festlegen des privaten Schlüssels zu verwenden.
Ab der Snowflake-ODBC-Treiber-Version 3.4.0 können Sie die folgenden beiden zusätzlichen Attribute in
SQLSetConnectAttrverwenden:Attributname
Beschreibung
SQL_SF_CONN_ATTR_PRIV_KEY_CONTENTErmöglicht es Ihnen, den Inhalt eines privaten Schlüssels direkt an die Verbindung zu übergeben. Übergeben Sie den vollständigen Inhalt des Schlüssels, einschließlich Kopf- und Fußzeile.
SQL_SF_CONN_ATTR_PRIV_KEY_PASSWORDWenn Sie einen verschlüsselten privaten Schlüssel in
SQL_SF_CONN_ATTR_PRIV_KEY_CONTENTübergeben, können Sie mit diesem Attribut das Kennwort angeben.SQL_SF_CONN_ATTR_PRIV_KEY_CONTENTkönnte erforderlich sein, wenn Ihre Anwendung und der ODBC-Treiber mit inkompatiblen Versionen von OpenSSL verknüpft sind und es zu Abstürzen kommt, die vom ODBC-Treiber bei der Schlüsselpaar-Authentifizierung verursacht werden.Der folgende C++-Code veranschaulicht die Implementierung:
Einstellen und Abrufen von Deskriptorfeldern¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Vorbereitung von SQL-Anforderungen¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Wird vom Snowflake-Treiber unterstützt, aber veraltete ODBC-API. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber ab ODBC-API-Version 2.x veraltet. Ersetzt durch |
Bemerkung
Es gibt eine Obergrenze für die Datengröße, die Sie binden können. Weitere Details dazu finden Sie unter Begrenzung der Abfragetextgröße.
Für die Vorbereitung unterstützte SQL-Anweisungen listet die Typen von SQL-Anweisungen auf, die für die Vorbereitung unterstützt werden.
Übermitteln von Anforderungen¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Unabhängig vom Datentyp, der an den Parameter gebunden ist, führt Snowflake eine serverseitige Konvertierung durch und gibt einen VARCHAR-Wert mit einer maximalen Länge von 134217728 zurück. |
|
✔ |
|
|
✔ |
Die Unterstützung für diese Funktion wurde in Version 2.23.3 des ODBC-Treibers hinzugefügt. |
|
✔ |
Die Unterstützung für diese Funktion wurde in Version 2.23.3 des ODBC-Treibers hinzugefügt. |
Abrufen von Ergebnissen und Informationen zu Ergebnissen¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
Der ODBC-Treiber unterstützt derzeit keine semistrukturierten Daten. Dies betrifft auch die Datentypen |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. Ersetzt durch |
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Bei GEOGRAPHY-Spalten gibt |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber ab ODBC-API-Version 2.x veraltet. Ersetzt durch |
|
✔ |
|
|
✔ |
Das |
|
Ersetzt durch |
|
|
Snowflake unterstützt die Funktionalität nicht. |
|
|
Snowflake unterstützt die Funktionalität nicht. |
Abrufen von Informationen zu den Systemtabellen der Datenquelle (Katalogfunktionen)¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
Gibt ein leeres Resultset zurück. |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Im Resultset enthält die Spalte |
|
Gibt ein leeres Resultset zurück. |
|
|
Gibt ein leeres Resultset zurück. |
|
|
Gibt ein leeres Resultset zurück. |
|
|
✔ |
Wenn der an die Funktion übergebene Parameter „TABLE“ ist, gibt die Funktion alle Tabellentypen zurück, einschließlich transienter Tabellen und temporärer Tabellen. . . Wenn der an die Funktion übergebene Parameter „VIEW“ ist, gibt die Funktion alle Arten von Ansichten zurück, einschließlich materialisierter Ansichten. . . Wenn der an die Funktion übergebene Parameter „TABLE, VIEW“ oder „%“ ist, gibt die Funktion Informationen zu allen Tabellentypen und Ansichtstypen zurück. |
Wenn der an die Katalogfunktion übergebene Name ein ungültiges Zeichen enthält oder wenn der Name keinem Datenbankobjekt entspricht, gibt die Funktion ein leeres Resultset zurück.
Das Einstellen von SQL_ATTR_METADATA_ID wirkt sich nur auf die Funktionen SQLTables, SQLColumns und SQLProcedures aus.
Beenden einer Anweisung¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. Ersetzt durch |
Beenden einer Verbindung¶
Funktionsname |
Unterstützt |
Anmerkungen |
|---|---|---|
|
Eingeführt in die API nach Version 3.52. |
|
|
✔ |
|
|
✔ |
|
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
|
✔ |
Wird vom Snowflake-Treiber unterstützt, ist aber in ODBC-API-Version 3.x veraltet. |
Kundenspezifische SQL-Datentypen¶
Einige SQL-Datentypen, die von Snowflake unterstützt werden, haben keine direkte Zuordnung in ODBC (z. B. TIMESTAMP_*tz, VARIANT). Damit der ODBC-Treiber die nicht unterstützten Datentypen verarbeiten kann, enthält die mit dem Treiber gelieferte Headerdatei Definitionen für die folgenden kundenspezifische Datentypen:
Der folgende Code veranschaulicht die Beispielnutzung der kundenspezifischen Datentypen:
Beispiele¶
Dieser Abschnitt enthält Beispiele für die Verwendung der API.
Abrufen der letzten Abfrage-ID¶
Das Abrufen der letzten Abfrage-ID ist eine Snowflake-Erweiterung des ODBC-Standards.
Rufen Sie zum Abrufen der letzten Abfrage-ID die Funktion SQLGetStmtAttr (oder SQLGetStmtAttrW) auf, und übergeben Sie das Attribut SQL_SF_STMT_ATTR_LAST_QUERY_ID und ein Zeichenarray, das groß genug ist, um die Abfrage-ID aufzunehmen.
Das folgende Beispiel zeigt, wie die Abfrage-ID für eine Abfrage abgerufen wird:
Wenn die Ausführung unter Linux oder macOS erfolgt, rufen Sie SQLGetStmtAttrW auf und übergeben Sie Parameter des entsprechenden Datentyps (z. B. „wchar“ anstelle von „char“).
Bewährte Methoden zur Verbesserung der Leistung beim Abrufen von Daten¶
Wenn Sie Daten mit SQLFetch abrufen, können Sie die Funktionen SQLGetData oder SQLBindCol verwenden, um auf den Inhalt der Zellen zuzugreifen. In den meisten Fällen bietet die Verwendung von SQLBindCol eine bessere Leistung, da die Anzahl der ODBC-Aufrufe zum Abrufen von Daten reduziert wird und die Vorteile des Kopierens von Daten in den Arbeitsspeicher genutzt werden können.
Verwenden von SQLGetData zum Abrufen von Zelldaten¶
Im folgenden Beispiel wird die Funktion SQLGetData verwendet, um Zellenwerte aus dem von SQLFetch zurückgegebenen Datenpuffer abzurufen. Beachten Sie, dass Sie SQLGetData für jede Zelle in der Zeile einmal aufrufen müssen.
Verwenden von SQLBindCol zum Binden der Spalten für eine einzelne Datenzeile¶
Im folgenden Beispiel wird die Funktion SQLBindCol verwendet, um Zellenwerte aus dem von SQLFetch zurückgegebenen Datenpuffer abzurufen. Dabei wird im Arbeitsspeicher ein Puffer für die Anzahl der Spalten einer Zeile erstellt und dann ein einziger SQLBindCol-Aufruf ausgeführt, um die Anwendungspuffer an das Resultset zu binden. Schließlich wird SQLFetch einmal pro Zeile aufgerufen, und die Zellwerte werden in den Puffer geladen. Mit diesem Ansatz kann die Geschwindigkeit und Effizienz des Datenabrufs erheblich gesteigert werden.
Verwenden von SQLBindCol zum Binden der Spalten für mehrere Datenzeilen¶
Sie können die Leistung noch weiter verbessern, indem Sie mehrere Zeilen mit einem einzigen SQLFetch-Aufruf abrufen, wodurch sich die Anzahl der ODBC SQLFetch-Aufrufe verringert, die zur Verarbeitung aller Zeilen einer Abfragetabelle erforderlich sind.
Beispiel:
Ermittelt die Anzahl der Spalten im Resultset.
Erstellt ein Array im Arbeitsspeicher zum Speichern der Daten mehrerer Spalten.
Ruft
SQLBindColfür jede Spalte auf, um die Anwendungspuffer an das Resultset zu binden.Ruft
SQLFetchauf, um die angegebene Anzahl von Zeilen (100) abzurufen, und verarbeitet die Daten ohne ODBC-Aufrufe über den Puffer im Arbeitsspeicher, bis das Ende der Abfragetabelle erreicht ist.
Mit diesem Ansatz kann die Geschwindigkeit und Effizienz des Datenabrufs erheblich gesteigert werden. Bei einer Abfragetabelle mit 20 Spalten und 1.000 Zeilen würde in diesem Beispiel nur 20 SQLBindCol und 10 SQLFetch Aufrufe anstelle von 20.000 SQLGetData Aufrufen benötigt, um alle Daten der Tabelle zu laden.