ODBC-Erweiterungsfunktionen
odbc_begin_transactionodbc_bind_paramsodbc_closeodbc_commitodbc_connectodbc_copyodbc_create_paramsodbc_list_data_sourcesodbc_list_driversodbc_queryodbc_rollback
odbc_begin_transaction
odbc_begin_transaction(conn_handle BIGINT) -> VARCHARSetzt das Attribut SQL_ATTR_AUTOCOMMIT auf SQL_AUTOCOMMIT_OFF auf der angegebenen Verbindung und startet damit effektiv eine implizite Transaktion. odbc_commit oder odbc_rollback müssen auf einer solchen Verbindung aufgerufen werden, um die Transaktion abzuschließen. Der Abschluss startet eine weitere implizite Transaktion auf dieser Verbindung. Siehe Transaktionsverwaltung für Details.
Parameter:
conn_handle(BIGINT): ODBC-Verbindungshandle, erzeugt mitodbc_connect
Rückgabewert:
Gibt immer NULL (VARCHAR) zurück.
Beispiel:
SELECT odbc_begin_transaction(getvariable('conn'))odbc_bind_params
odbc_bind_params(conn_handle BIGINT, params_handle BIGINT, params STRUCT) -> BIGINTBindet die angegebenen Parameterwerte an das angegebene Parameter-Handle. Nur bei zweistufiger Parameterbindung erforderlich, siehe Abfrageparameter für Details.
Parameter:
conn_handle(BIGINT): ODBC-Verbindungshandle, erzeugt mitodbc_connectparams_handle(BIGINT): Parameter-Handle, erzeugt mitodbc_create_paramsparams(STRUCT): Parameterwerte
Rückgabewert:
Parameter-Handle (BIGINT), dasselbe, das als zweites Argument übergeben wurde.
Beispiel:
SELECT odbc_bind_params(getvariable('conn'), getvariable('params1'), row(42, 'foo'))odbc_close
odbc_close(conn_handle BIGINT) -> VARCHARSchließt die angegebene ODBC-Verbindung zu einer Remote-DB. Wirft keine Fehler, wenn die Verbindung bereits geschlossen ist.
Parameter:
conn_handle(BIGINT): ODBC-Verbindungshandle, erzeugt mitodbc_connect
Rückgabewert:
Gibt immer NULL (VARCHAR) zurück.
Beispiel:
SELECT odbc_close(getvariable('conn'))odbc_commit
odbc_commit(conn_handle BIGINT) -> VARCHARRuft SQLEndTran mit dem Argument SQL_COMMIT auf der angegebenen Verbindung auf und schließt die aktuelle Transaktion ab. odbc_begin_transaction muss vor diesem Aufruf auf dieser Verbindung aufgerufen worden sein, damit der Abschluss wirksam wird. Siehe Transaktionsverwaltung für Details.
Parameter:
conn_handle(BIGINT): ODBC-Verbindungshandle, erzeugt mitodbc_connect
Rückgabewert:
Gibt immer NULL (VARCHAR) zurück.
Beispiel:
SELECT odbc_commit(getvariable('conn'))odbc_connect
odbc_connect(conn_string VARCHAR) -> BIGINTodbc_connect(conn_string VARCHAR, username VARCHAR, password VARCHAR) -> BIGINTÖffnet eine ODBC-Verbindung zu einer Remote-DB.
Wenn die (positionalen) Parameter username und password angegeben sind, werden sie als UID und PWD an die Verbindungszeichenkette angehängt.
Parameter:
conn_string(VARCHAR): ODBC-Verbindungszeichenkette, die an den Treiber-Manager übergeben wird.
Rückgabewert:
Verbindungshandle, das in einer VARIABLE abgelegt werden kann. Die Verbindung wird nicht automatisch geschlossen und muss mit odbc_close geschlossen werden.
Beispiel:
SET VARIABLE conn = odbc_connect('Driver={Oracle Driver};DBQ=//127.0.0.1:1521/XE;UID=scott;PWD=tiger')SET VARIABLE conn = odbc_connect('Driver={Oracle Driver};DBQ=//127.0.0.1:1521/XE', 'scott', 'tiger')odbc_copy
odbc_copy(conn_handle BIGINT, [, <optional named parameters>]) -> TABLEodbc_copy(conn_string VARCHAR, [, <optional named parameters>]) -> TABLEKopiert Zeilen aus einer für DuckDB zugänglichen Datei oder Tabelle in die Remote-DB.
Warning Verwendung von
odbc_copyüber die Python Relational API.
odbc_copyist eine Tabellenfunktion, die eine Zeile für jeweils 2048 kopierte Zeilen zurückgibt. Bei Verwendung aus Python mitduckdb.sql()greift die Lazy Evaluation. Es werden also keine Zeilen kopiert, bis eine Methode, die die Ausführung auslöst auf der resultierenden Relation aufgerufen und alle Ergebniszeilen verarbeitet wurden.
Parameter:
conn_handle_or_string(BIGINToderVARCHAR), eines von:- ODBC-Verbindungshandle, erzeugt mit
odbc_connect - ODBC-Verbindungszeichenkette, vorgesehen für einmalige Abfragen; in diesem Fall wird eine neue ODBC-Verbindung geöffnet und nach Abschluss der Abfrage automatisch geschlossen
- ODBC-Verbindungshandle, erzeugt mit
Optionale benannte Parameter (Quelle):
Die Quellabfrage wird über eine separate DB-Instanz ausgeführt, nicht über die Instanz, auf der
odbc_copyaufgerufen wird. Daher kann sichsource_querynicht auf bereits vorhandene In-Memory-Tabellen beziehen und kann derzeit geöffnete DuckDB-Dateien nicht öffnen. Als Workaround wird für komplexe Quellabfragen empfohlen, das Abfrageergebnis zuerst in eine lokale Parquet-Datei zu exportieren und anschließendodbc_copyauf dieser Datei auszuführen.
source_conn_string(VARCHAR, Standard::memory:): DuckDB-Verbindungszeichenkette zur Quell-DB, Beispiel:ducklake:postgres:postgresql://username:[email protected]:5432/lake1source_file(VARCHAR): Pfad zu einer Parquet-, CSV- oder JSON-Datei (remote oder lokal), die mit DuckDB gelesen werden soll, Beispiel:https://blobs.duckdb.org/nl_stations.csv, entsprichtsource_query='SELECT * FROM '<source_file>'source_query(VARCHAR): DuckDB-SQL-Abfrage zum Lesen der Daten, Beispiel:FROM nl_train_stationssource_queries(LIST(VARCHAR)): mehrere DuckDB-SQL-Abfragen, die nacheinander ausgeführt werden; die letzte Abfrage muss die zu kopierende Ergebnismenge liefern, Ergebnisse vorheriger Abfragen werden verworfen, Ergebnisse aller Abfragen werden im Speicher materialisiert, Beispiel:
source_queries=[ 'CREATE SECRET s (TYPE s3 [...])', 'FROM nl_train_stations'],source_limit(UBIGINT, Standard:0): die Anzahl der Datensätze, die auf einmal aus der Quellabfrage/-datei gelesen werden sollen; wenn diese Option angegeben ist, wird die Quellabfrage mehrfach ausgeführt und dabeiLIMIT <limit> OFFSET <offset>angehängt; muss größer oder gleich2048sein,2048muss ohne Rest durch diesen Wert teilbar sein
Optionale benannte Parameter (Ziel):
dest_table(VARCHAR): Zieltabellenname in der Remote-DB, wird inINSERT- undCREATE TABLE-Abfragen verwendet, darf nicht angegeben werden, wenndest_queryangegeben ist; verschiedene DBs haben unterschiedliche Regeln zur Groß-/Kleinschreibung und zur Standardschreibweise, daher muss der Name der Zieltabelle möglicherweise in Großbuchstaben angegeben werden:TAB1oder in zitierter Form:"tab1"(oder mit Schema-Namen:"schema1"."tab1")dest_query(VARCHAR): Abfrage, die in der Remote-DB für jeden Quellbatch ausgeführt werden soll; muss die Anzahl der ODBC-Parameterplatzhalter?gleichsource_columns_count * batch_sizehaben, darf nicht angegeben werden, wenndest_tableangegeben ist, Beispiel:CALL import_city(?,?,?,?)dest_query_single(VARCHAR): wird nur verwendet, wennbatch_size>0und die Anzahl der im letzten Quellbatch gelesenen Zeilen kleiner alsbatch_sizeist; in diesem Fall stattdest_queryverwendet, muss die Anzahl der ODBC-Parameterplatzhalter?gleichsource_columns_counthaben
Optionale benannte Parameter (Tabelle erstellen):
create_table(BOOLEAN, Standard:FALSE): ob in der Remote-Zieldatenbank eine Tabelle anhand der Spaltennamen und Spaltentypen der Quellabfrage erstellt werden soll; implementiert effektiv CTAS (create table as select)column_types(MAP(VARCHAR, VARCHAR)): wenncreate_table=TRUEangegeben ist, ermöglicht das Bereitstellen/Überschreiben der Typzuordnung zwischen Quell-DuckDB-Typen und Ziel-RDBMS-Typen, Beispiel:
create_table=TRUE,column_types=MAP { 'DUCKDB_TYPE_VARCHAR': 'VARCHAR2(10)', 'DUCKDB_TYPE_DECIMAL': 'NUMBER({typmod1},{typmod2})'}column_quotes(VARCHAR, Standard:"): Anführungszeichen (oder Zeichenkette), mit dem Spaltennamen in den erzeugtenCREATE TABLE- undINSERT-Abfragen zitiert werdencommit_after_create_table(BOOLEAN, Standard:FALSE): ob nach dem Ausführen vonCREATE TABLEeinCOMMITausgegeben werden soll; für Firebird automatisch aktiviert
Optionale benannte Parameter (Behandlung von Abfrageparametern):
decimal_params_as_chars(BOOLEAN, Standard:false):DECIMAL-Parameter alsVARCHARs übergebenintegral_params_as_decimals(BOOLEAN, Standard:false): (vorzeichenlose)TINYINT-,SMALLINT-,INTEGER- undBIGINT-Parameter alsSQL_C_NUMERICübergeben.
Optionale benannte Parameter (weitere):
batch_size(UINTEGER, Standard:16): Anzahl der Datensätze, die in einem einzelnenSQLExecute-ODBC-Aufruf in die Remote-DB eingefügt (oder im Fall vondest_queryausgeführt) werden; erlaubte Werte:1,2,4,8,16,32,64,128,256,512,1024,2048use_insert_all(BOOLEAN, Standard:FALSE): Batch-Insert-AbfrageINSERT ALLstatt Batch-Insert mitINSERT ... VALUES (...), (...), ... (...)erzeugen; für Oracle automatisch aktiviertuse_insert_union(BOOLEAN, Standard:FALSE): Batch-Insert-AbfrageINSERT ... SELECT FROM ... UNION ALL ...statt Batch-Insert mitINSERT ... VALUES (...), (...), ... (...)erzeugen; für Firebird automatisch aktiviertdummy_table_name(VARCHAR): Name der Dummy-Tabelle fürINSERT ALL- undINSERT UNION-Abfragen,dualfür Oraclecopy_in_transaction(BOOLEAN, Standard:TRUE): eine Transaktion in der Remote-DB für diesen Copy-Aufruf beginnen, die Transaktion committen, wenn alle Zeilen verarbeitet sind, bei Fehler zurückrollenmax_records_in_transaction(UBIGINT, Standard:0): wenn angegeben, wird die Remote-Transaktion jedes Mal committet, nachdem die angegebene Anzahl von Zeilen verarbeitet wurdeclose_connection(BOOLEAN, Standard:false): schließt die übergebene Verbindung nach Abschluss des Funktionsaufrufs; vorgesehen für einmalige Aufrufe vonodbc_copy
Rückgabewert:
Eine Tabelle mit den folgenden Spalten:
completed(BOOLEAN): Flag, ob diese Ausgabezeile die letzte Zeile in der Ergebnismenge istrows_processed(UBIGINT): Anzahl der aus der Quelle gelesenen Zeilenelapsed_seconds(FLOAT): Anzahl der Sekunden seit Beginn des Kopiervorgangsrows_per_second(FLOAT): Anzahl der in einer Sekunde verarbeiteten Zeilentable_ddl(VARCHAR): erzeugteCREATE TABLE-Abfrage, die in der Remote-DB vor Beginn des Kopiervorgangs ausgeführt wurde
Eine Ergebniszeile wird für jeweils 2048 aus der Quelle gelesene Zeilen ausgegeben. Nur die letzte Zeile hat completed=TRUE und einen nicht-null table_ddl-Wert (nur wenn create_table=TRUE angegeben ist).
Beispiele:
FROM odbc_copy(getvariable('conn'), source_file='https://blobs.duckdb.org/nl_stations.csv', dest_table='NL_TRAIN_STATIONS', create_table=TRUE)FROM odbc_copy(getvariable('conn'), source_queries=[ 'CREATE SECRET s (TYPE s3 [...])', 'FROM nl_train_stations' ], dest_table='NL_TRAIN_STATIONS', create_table=TRUE, batch_size=32, max_records_in_transaction=42);odbc_create_params
odbc_create_params() -> BIGINTErzeugt ein Parameter-Handle. Nur bei zweistufiger Parameterbindung erforderlich, siehe Abfrageparameter für Details.
Parameter:
Keine.
Rückgabewert:
Parameter-Handle (BIGINT). Wenn das Handle an odbc_query übergeben wird, wird es an das zugrunde liegende Prepared Statement gebunden und automatisch geschlossen, wenn das Statement geschlossen wird.
Beispiel:
SET VARIABLE params1 = odbc_create_params()odbc_list_data_sources
odbc_list_data_sources() -> TABLE(name VARCHAR, description VARCHAR, type VARCHAR)Gibt die Liste der im Betriebssystem registrierten ODBC-Datenquellen zurück. Verwendet den Treiber-Manager-Aufruf SQLDataSources.
Parameter:
Keine.
Rückgabewert:
Eine Tabelle mit den folgenden Spalten:
name(VARCHAR): Datenquellennamedescription(VARCHAR): Datenquellenbeschreibungtype(VARCHAR): Datenquellentyp,USERoderSYSTEM
Beispiel:
FROM odbc_list_data_sources()odbc_list_drivers
odbc_list_drivers() -> TABLE(description VARCHAR, attributes MAP(VARCHAR, VARCHAR))Gibt die Liste der im Betriebssystem registrierten ODBC-Treiber zurück. Verwendet den Treiber-Manager-Aufruf SQLDrivers.
Parameter:
Keine.
Rückgabewert:
Eine Tabelle mit den folgenden Spalten:
description(VARCHAR): Treiberbeschreibungattributes(MAP(VARCHAR, VARCHAR)): Treiberattribute alsname->value-Map
Beispiel:
FROM odbc_list_drivers()odbc_query
odbc_query(conn_handle BIGINT, query VARCHAR[, <optional named parameters>]) -> TABLEodbc_query(conn_string VARCHAR, query VARCHAR[, <optional named parameters>]) -> TABLEFührt die angegebene Abfrage in einer Remote-DB aus und gibt die Ergebnistabelle der Abfrage zurück.
Parameter:
conn_handle_or_string(BIGINToderVARCHAR), eines von:- ODBC-Verbindungshandle, erzeugt mit
odbc_connect - ODBC-Verbindungszeichenkette, vorgesehen für einmalige Abfragen; in diesem Fall wird eine neue ODBC-Verbindung geöffnet und nach Abschluss der Abfrage automatisch geschlossen
- ODBC-Verbindungshandle, erzeugt mit
query(VARCHAR): SQL-Abfrage, die an das Remote-DBMS übergeben wird
Optionale benannte Parameter zur Übergabe von Abfrageparametern:
params(STRUCT): Abfrageparameter, die an das Remote-DBMS übergeben werdenparams_handle(BIGINT): Parameter-Handle, erzeugt mitodbc_create_params. Nur bei zweistufiger Parameterbindung verwendet, siehe Abfrageparameter für Details.
Optionale benannte Parameter, die die Typzuordnung ändern können:
Die Erweiterung unterstützt eine Reihe von Optionen, mit denen gesteuert werden kann, wie Abfrageparameter übergeben und wie die Ergebnisdaten behandelt werden. Für bekannte DBs werden diese Optionen automatisch gesetzt. Sie können auch als benannte Parameter an die Funktion odbc_query übergeben werden, um die Autokonfiguration zu überschreiben:
decimal_columns_as_chars(BOOLEAN, Standard:false):DECIMAL-Werte alsVARCHARs lesen, die vor der Rückgabe an den Client wieder inDECIMALs geparst werdendecimal_columns_precision_through_ard(BOOLEAN, Standard:false): beim Lesen einesDECIMALdessenprecisionundscaleüber den „Application Row Descriptor“ angebendecimal_columns_as_ard_type(BOOLEAN, Standard:false): beim Lesen einesDECIMALSQL_ARD_TYPEstattSQL_C_NUMERICverwendendecimal_params_as_chars(BOOLEAN, Standard:false):DECIMAL-Parameter alsVARCHARs übergebenintegral_params_as_decimals(BOOLEAN, Standard:false): (vorzeichenlose)TINYINT-,SMALLINT-,INTEGER- undBIGINT-Parameter alsSQL_C_NUMERICübergeben.reset_stmt_before_execute(BOOLEAN, Standard:false): das Prepared Statement vor der Ausführung zurücksetzen (mitSQLFreeStmt(h, SQL_CLOSE))time_params_as_ss_time2(BOOLEAN, Standard:false):TIME-Parameter alsTIME2-Werte von SQL Server übergebentimestamp_columns_as_timestamp_ns(BOOLEAN, Standard:false):TIMESTAMP-ähnliche Spalten (TIMESTAMP WITH LOCAL TIME ZONE,DATETIME2,TIMESTAMP_NTZusw.) mit Nanosekunden-Präzision lesen (mit neun Nachkommastellen)timestamp_columns_with_typename_date_as_date(BOOLEAN, Standard:false):TIMESTAMP-Spalten mit dem TypnamenDATEals DuckDB-DATEs lesentimestamp_max_fraction_precision(UTINYINT, Standard:9): maximale Anzahl der Nachkommastellen beim Lesen einerTIMESTAMP-Spalte mit Nanosekunden-Präzisiontimestamp_params_as_sf_timestamp_ntz(BOOLEAN, Standard:false):TIMESTAMP-Parameter alsTIMESTAMP_NTZvon Snowflake übergebentimestamptz_params_as_ss_timestampoffset(BOOLEAN, Standard:false):TIMESTAMP_TZ-Parameter alsDATETIMEOFFSETvon SQL Server übergebenvar_len_data_single_part(BOOLEAN, Standard:false): langeVARCHAR- oderVARBINARY-Werte in einem einzigen Lesevorgang lesen (wird verwendet, wenn ein Treiber Retrieving Variable-Length Data in Parts nicht unterstützt)var_len_params_long_threshold_bytes(UINTEGER, Standard:4000): Längenschwelle, ab derSQL_WVARCHAR-Parameter alsSQL_WLONGVARCHARübergeben werdenenable_columns_binding(BOOLEAN, Standard:false): obSQLBindColstattSQLGetDatafür festgrößenbasierte Spalten verwendet werden darf
Weitere optionale benannte Parameter:
ignore_exec_failure(BOOLEAN, Standard:false): wenn eine Abfrage, die in der Remote-DB ausgeführt wird, erfolgreich vorbereitet werden kann, aber zur Ausführungszeit fehlschlagen kann oder nicht (zum Beispiel wegen des Schema-Zustands wie der Existenz einer Tabelle), kann dieses Flag verwendet werden, um bei fehlgeschlagener Ausführung keinen Fehler zu werfen. Bei fehlgeschlagener Ausführung wird eine leere Ergebnismenge zurückgegeben.close_connection(BOOLEAN, Standard:false): schließt die übergebene Verbindung nach Abschluss des Funktionsaufrufs; vorgesehen für einmalige Aufrufe vonodbc_query, Beispiel:
FROM odbc_query( odbc_connect('Driver={Oracle Driver};DBQ=//127.0.0.1:1521/XE', 'scott', 'tiger'), 'SELECT 42 FROM dual', close_connection=TRUE);Rückgabewert:
Eine Tabelle mit dem Abfrageergebnis.
Beispiel:
FROM odbc_query(getvariable('conn'), 'SELECT CAST(? AS NVARCHAR2(2)) || CAST(? AS VARCHAR2(5)) FROM dual', params=row('🦆', 'quack'))odbc_rollback
odbc_rollback(conn_handle BIGINT) -> VARCHARRuft SQLEndTran mit dem Argument SQL_ROLLBACK auf der angegebenen Verbindung auf und schließt die aktuelle Transaktion ab. odbc_begin_transaction muss vor diesem Aufruf auf dieser Verbindung aufgerufen worden sein, damit der Abschluss wirksam wird. Siehe Transaktionsverwaltung für Details.
Parameter:
conn_handle(BIGINT): ODBC-Verbindungshandle, erzeugt mitodbc_connect
Rückgabewert:
Gibt immer NULL (VARCHAR) zurück.
Beispiel:
SELECT odbc_rollback(getvariable('conn'))