Driver ODBC di Databricks (OSS)
Importante
Questo driver è disponibile in anteprima pubblica e non è ancora disponibile come open source.
Databricks fornisce un driver JDBC (OSS) software open source che consente di connettere strumenti come DataGrip, DBeaver e SQL Workbench/J ad Azure Databricks tramite JDBC (Java Database Connectivity), una specifica standard del settore per l'accesso ai sistemi di gestione dei database.
Questo driver ha implementato le API JDBC e offre funzionalità di base, tra cui OAuth, Cloud Fetch e funzionalità come l'inserimento di volumi del catalogo Unity. Esegue la modalità query nativa e supporta query con parametri nativi e può essere eseguita usando le API di esecuzione delle istruzioni, che fornisce la funzionalità di conservazione dei risultati delle query vantaggiosa o Thrift.
Questo articolo fornisce informazioni sull'installazione e l'uso di Databricks JDBC Driver (OSS). Per informazioni sul driver JDBC di Databricks non OSS, vedere Driver JDBC di Databricks.
Requisiti
Per usare databricks JDBC Driver (OSS), è necessario soddisfare i seguenti requisiti:
- Java Runtime Environment (JRE) 11.0 o versione successiva. I test CI sono supportati in JRE 11, 17 e 21.
Nota
A seguito di una modifica in JDK 16 che ha causato un problema di compatibilità con la libreria Apache Arrow usata dal driver JDBC, possono verificarsi errori di runtime quando si usa il driver JDBC con JDK 16 o versione successiva. Per evitare questi errori, riavviare l'applicazione o il driver usando l'opzione di comando JVM seguente:
--add-opens=java.base/java.nio=org.apache.arrow.memory.core ALL-UNNAMED
Installare il driver
Il driver JDBC di Databricks (OSS) viene pubblicato nel repository Maven. La versione più recente è 0.9.6-oss.
Per installare il driver, è possibile eseguire una delle seguenti operazioni:
Per i progetti Maven, aggiungere la dipendenza seguente al file
pom.xml
del progetto per indicare a Maven di scaricare automaticamente il driver JDBC con la versione specificata:<dependency> <groupId>com.databricks</groupId> <artifactId>databricks-jdbc</artifactId> <version>0.9.6-oss</version> <scope>runtime</scope> </dependency>
Per i progetti Gradle , aggiungere la dipendenza seguente al file di compilazione del progetto per indicare a Gradle di scaricare automaticamente il driver JDBC con la versione specificata:
implementation 'com.databricks:databricks-jdbc:0.9.6-oss'
Per visualizzare la sintassi delle dipendenze per altri tipi di progetto e ottenere il numero di versione più recente di Databricks JDBC Driver (OSS), vedere il repository Maven.
Configurare le connessioni URL
Per connettersi all'area di lavoro di Azure Databricks utilizzando il driver JDBC, è necessario specificare un URL di connessione JDBC che includa varie impostazioni di connessione, come il nome host del server dell'area di lavoro di Azure Databricks, le impostazioni della risorsa di calcolo e le credenziali di autenticazione per la connessione all'area di lavoro.
È possibile impostare il valore di queste proprietà nell'URL della connessione JDBC, impostarle e passarle al metodo DriverManager.getConnection o una combinazione dei due metodi. Vedere la documentazione del provider per informazioni su come connettersi usando l'app, il client, l'SDK, l'API o lo strumento SQL specifico.
L'URL di connessione JDBC deve avere il seguente formato. Le proprietà fanno distinzione tra maiuscole e minuscole.
jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];...
In alternativa, specificare le impostazioni usando la classe java.util.Properties
o una combinazione:
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>";
Properties properties = new java.util.Properties();
properties.put("<property1>", "<value1");
properties.put("<property2>", "<value2");
// ...
Connection conn = DriverManager.getConnection(url, properties);
String url = "jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];";
Connection conn = DriverManager.getConnection(url, "token", "12345678901234667890abcdabcd");
Gli elementi DELL'URL di connessione sono descritti nella tabella seguente. Per informazioni sulle proprietà aggiuntive, incluse le proprietà di autenticazione, vedere le sezioni seguenti. Gli elementi e le proprietà URL non fanno distinzione tra maiuscole e minuscole.
Elemento o proprietà URL | Descrizione |
---|---|
<server-hostname> |
Valore hostname server della risorsa di calcolo di Azure Databricks. |
<port> |
Il valore della porta della risorsa di calcolo di Azure Databricks. Il valore predefinito è 443 . |
<schema> |
Nome dello schema. In alternativa, è possibile impostare la proprietà ConnSchema . Si veda Proprietà di connessione. |
httpPath |
Il valore del percorso HTTP della risorsa di calcolo di Azure Databricks. Il connettore costituisce l'indirizzo HTTP a cui connettersi aggiungendo valore httpPath all'host e alla porta specificata nell'URL di connessione. Ad esempio, per connettersi all'indirizzo HTTP http://localhost:10002/cliservice , usare l'URL di connessione seguente: jdbc:databricks://localhost:10002;httpPath=cliservice |
Per ottenere l'URL di connessione JDBC per un cluster Azure Databricks:
- Accedere all'area di lavoro di Azure Databricks.
- Nella barra laterale fare clic su Ambiente di calcolo, quindi sul nome del cluster di destinazione.
- Nella scheda Configurazione espandere Opzioni avanzate.
- Fare clic sulla scheda JDBC/ODBC.
- Copiare l'URL JDBC da usare come URL di connessione JDBC oppure costruire l'URL dai valori nei ampi Nome host server, Porta e Percorso HTTP.
Per ottenere l'URL di connessione JDBC per un databricks SQL Warehouse:
- Accedere all'area di lavoro di Azure Databricks.
- Nella barra laterale fare clic su SQL Warehouse, poi sul nome del warehouse di destinazione.
- Fare clic sulla scheda Dettagli sulle connessioni.
- Copiare l'URL JDBC da usare come URL di connessione JDBC oppure costruire l'URL dai valori nei ampi Nome host server, Porta e Percorso HTTP.
Autenticare il driver
È possibile autenticare la connessione al driver JDBC usando uno dei meccanismi di autenticazione seguenti:
- Autenticazione da utente a computer (U2M) OAuth (consigliata)
- Autenticazione OAuth da computer a computer (M2M)
- Token di accesso personale di Azure Databricks
Autenticazione da utente a computer (U2M) OAuth
Il driver JDBC supporta l'autenticazione da utente a computer (U2M) OAuth per l'accesso umano in tempo reale e il consenso per autenticare l'account utente di Databricks di destinazione. Questa operazione è nota anche come autenticazione OAuth basata su browser.
Azure Databricks ha creato l'ID client OAuth databricks-sql-jdbc
per i clienti. Si tratta anche dell'ID client OAuth predefinito usato nel driver JDBC. Per configurare l'autenticazione U2M OAuth, è sufficiente aggiungere le proprietà seguenti all'URL o all'oggetto java.util.Properties
di connessione JDBC esistente:
Proprietà | valore |
---|---|
AuthMech |
11 |
Auth_Flow |
2 |
Autenticazione OAuth da computer a computer (M2M)
Il driver JDBC supporta l'autenticazione da computer a computer (M2M) OAuth usando un'entità servizio di Azure Databricks. Questa operazione è nota anche come autenticazione delle credenziali client OAuth 2.0. Consultare Autenticare l'accesso ad Azure Databricks con un'entità servizio usando OAuth (OAuth M2M).
Per configurare l'autenticazione delle credenziali client OAuth M2M o OAuth 2.0:
Creare un'entità servizio gestita da Microsoft Entra ID e assegnarla agli account e alle aree di lavoro di Azure Databricks. Per ulteriori dettagli, vedere Gestire l'entità servizio.
Importante
Databricks JDBC Driver (OSS) supporta i segreti OAuth di Azure Databricks per l'autenticazione delle credenziali client OAuth M2M o OAuth 2.0. I segreti dell'ID Microsoft Entra non sono supportati.
Creare un segreto OAuth di Azure Databricks per l'entità servizio. A tale scopo, si veda Generare e usare manualmente i token di accesso per l'autenticazione OAuth M2M.
Concedere all'entità servizio l'accesso al cluster o al warehouse. Vedere Autorizzazioni di calcolo o Gestire un'istanza di SQL Warehouse.
Aggiungere le proprietà seguenti all'URL o all'oggetto java.util.Properties
di connessione JDBC esistente:
Proprietà | valore |
---|---|
AuthMech |
11 |
Auth_Flow |
1 |
OAuth2ClientID |
Valore entità servizio ID (cliente) dell'applicazione. |
OAuth2Secret |
Il segreto OAuth dell'entità servizio di Azure Databricks. (I segreti microsoft Entra ID non sono supportati per l'autenticazione client OAuth M2M o OAuth 2.0.) |
Token di accesso personale di Azure Databricks
Per autenticare la connessione al driver JDBC usando un token di accesso personale di Azure Databricks, aggiungere le proprietà seguenti all'URL o all'oggetto java.util.Properties
di connessione JDBC:
Proprietà | valore |
---|---|
AuthMech |
3 |
user |
Valore token , come stringa. |
PWD oppure password |
Il valore del token di accesso personale di Azure Databricks, come stringa. |
Proprietà di connessione
Le proprietà di connessione aggiuntive seguenti sono supportate dal driver JDBC. Le proprietà fanno distinzione tra maiuscole e minuscole.
Proprietà | Default value | Descrizione |
---|---|---|
AuthMech |
Richiesto | Il meccanismo di autenticazione, in cui 3 specifica il meccanismo è un token di accesso personale di Azure Databricks e 11 specifica che il meccanismo è token OAuth 2.0. Per ogni meccanismo sono necessarie proprietà aggiuntive. Si veda Autenticare il driver. |
Auth_Flow |
0 |
Flusso di autenticazione OAuth2 per la connessione driver. Questa proprietà è obbligatoria seAuthMech è 11 . |
SSL |
1 |
Indica se il connettore comunica con il server Spark tramite un socket abilitato per SSL. |
ConnCatalog oppure catalog |
SPARK |
Il nome del catalogo predefinito da usare. |
ConnSchema oppure schema |
default |
Il nome dello schema predefinito da usare. Questa opzione può essere specificata sostituendo <schema> nell'URL con il nome dello schema da usare o impostando la proprietà ConnSchema sul nome dello schema da usare. |
ProxyAuth |
0 |
Se impostato su 1 , il driver usa l'utente e la password di autenticazione proxy, rappresentati da ProxyUID e ProxyPwd . |
ProxyHost |
null |
Stringa che rappresenta il nome dell'host proxy da usare quando UseProxy è impostato anche su 1 . |
ProxyPort |
null |
Numero intero che rappresenta il numero di porte proxy da usare quando UseProxy è impostato anche su 1 . |
ProxyUID |
null |
Stringa che rappresenta il nome utente da usare per l'autenticazione proxy quando ProxyAuth e UseProxy sono impostati anche su 1 . |
ProxyPwd |
null |
Stringa che rappresenta la password da usare per l'autenticazione proxy quando ProxyAuth e UseProxy sono impostati anche su 1 . |
UseProxy |
0 |
Se è impostato su 1 , il driver usa le impostazioni proxy fornite (ad esempio ProxyAuth , ProxyHost , ProxyPort , ProxyPwd e ProxyUID ). |
UseSystemProxy |
0 |
Se impostato su 1 , il driver usa le impostazioni proxy impostate a livello di sistema. Se nell'URL di connessione sono impostate proprietà proxy aggiuntive, queste proprietà proxy aggiuntive sostituiscono quelle impostate a livello di sistema. |
UseCFProxy |
0 |
Se impostato su 1 , il driver usa le impostazioni proxy di recupero cloud, se disponibili, in caso contrario usare il proxy normale. |
CFProxyAuth |
0 |
Se impostato su 1 , il driver usa l'utente e la password di autenticazione proxy, rappresentati da CFProxyUID e CFProxyPwd . |
CFProxyHost |
null |
Stringa che rappresenta il nome dell'host proxy da usare quando UseCFProxy è impostato anche su 1 . |
CFProxyPort |
null |
Numero intero che rappresenta il numero di porte proxy da usare quando UseCFProxy è impostato anche su 1 . |
CFProxyUID |
null |
Stringa che rappresenta il nome utente da usare per l'autenticazione proxy quando CFProxyAuth e UseCFProxy sono impostati anche su 1 . |
CFProxyPwd |
null |
Stringa che rappresenta la password da usare per l'autenticazione proxy quando CFProxyAuth e UseCFProxy sono impostati anche su 1 . |
AsyncExecPollInterval |
200 |
Tempo in millisecondi tra ogni polling per lo stato di esecuzione della query asincrona. Asincrona si riferisce al fatto che la chiamata RPC usata per eseguire una query su Spark è asincrona. Non significa che le operazioni asincrone JDBC siano supportate. |
UserAgentEntry |
browser |
Voce User-Agent da includere nella richiesta HTTP. Questo valore è nel formato seguente: [ProductName]/[ProductVersion] [Comment] |
UseThriftClient |
0 |
Indica se il driver JDBC deve usare il client Thrift per connettersi a un cluster all-purpose. Il valore predefinito funziona per SQL warehouse. |
Proprietà di configurazione SQL
Le seguenti proprietà di configurazione SQL sono supportate dal driver JDBC. Questi sono descritti anche in Parametri di configurazione. Le proprietà fanno distinzione tra maiuscole e minuscole.
Proprietà | Default value | Descrizione |
---|---|---|
ansi_mode |
TRUE |
Indica se abilitare un comportamento SQL ANSI rigoroso per determinate funzioni e regole di casting. |
enable_photo |
TRUE |
Indica se abilitare il motore di query vettorializzato Photon. |
legacy_time_parser_policy |
EXCEPTION |
Metodi utilizzati per analizzare e formattare date e timestamp. I valori validi sono EXCEPTION , LEGACY e CORRECTED . |
max_file_partition_bytes |
128m |
Il numero massimo di byte da impacchettare in una singola partizione quando si legge da fonti basate su file. L'impostazione può essere un numero intero positivo e facoltativamente includere una misura, ad esempio b (byte) k o kb (1024 byte). |
read_only_external_metastore |
false |
Controlla se un metastore esterno viene considerato di sola lettura. |
statement_timeout |
172800 |
Imposta un timeout dell'istruzione SQL compreso tra 0 e 172800 secondi. |
timezone |
UTC |
Impostare il fuso orario locale. ID area nel formato area/city , ad esempio America/Los_Angeles o offset di zona nel formato (+|-)HH, (+|-)HH:mm o (+|-)HH:mm:ss, ad esempio -08, +01:00 o -13:33:33. Inoltre, UTC è supportato come alias per +00:00 |
use_cached_result |
true |
Indica se Databricks SQL memorizza nella cache e riutilizza i risultati quando possibile. |
Proprietà della registrazione
Le seguenti proprietà di registrazione sono supportate dal driver JDBC. Le proprietà fanno distinzione tra maiuscole e minuscole.
Proprietà | Default value | Descrizione |
---|---|---|
LogLevel |
OFF |
Livello di registrazione, che è un valore compreso tra 0 e 6: - 0: Disabilita tutte le registrazioni. - 1: Abilita la registrazione sul livello FATAL, che registra eventi di errore molto gravi che porteranno il connettore ad interrompere l'interruzione. - 2: Abilita la registrazione a livello di ERRORE, che registra gli eventi di errore che potrebbero comunque consentire al connettore di continuare l'esecuzione. - 3: Abilita la registrazione a livello di AVVISO, che registra gli eventi che potrebbero generare un errore se non viene eseguita un'azione. - 4: Abilita la registrazione a livello di INFORMAZIONI, che registra informazioni generali che descrivono lo stato del connettore. - 5: Abilita la registrazione a livello DEBUG, che registra informazioni dettagliate utili per il debug del connettore. - 6: Abilita la registrazione sul livello TRACE, che registra tutte le attività del connettore. Utilizzare questa proprietà per abilitare o disabilitare la registrazione nel connettore e per specificare la quantità di dettagli inclusi nei file di log. |
LogPath |
Per determinare il percorso predefinito per i log, il driver usa il valore impostato per queste proprietà di sistema, in questo ordine di priorità: 1. user.dir 2. java.io.tmpdir 3. La directory corrente, in altre parole . |
Percorso completo della cartella in cui il connettore salva i file di log quando la registrazione è abilitata, come stringa. Per assicurarsi che l'URL di connessione sia compatibile con tutte le applicazioni JDBC, eseguire l'escape delle barre rovesciate (\ ) nel percorso del file digitando un'altra barra rovesciata.Se il LogPath valore non è valido, il connettore invia le informazioni registrate al flusso di output standard (System.out). |
LogFileSize |
Nessun valore massimo | Dimensioni massime consentite del file di log, specificate in MB |
LogFileCount |
Nessun valore massimo | Numero massimo di file di log consentiti |
Abilitare e configurare la registrazione
Il driver JDBC supporta i framework Simple Logging Facciata per Java (SLF4J) e java.util.logging (JUL). Il driver usa il framework di registrazione JUL per impostazione predefinita.
Per abilitare e configurare la registrazione per il driver JDBC:
Abilitare il framework di registrazione che si vuole usare:
- Per la registrazione SLF4J, impostare la proprietà
-Dcom.databricks.jdbc.loggerImpl=SLF4JLOGGER
di sistema e fornire l'implementazione dell'associazione SLF4J (compatibile con SLF4J versione 2.0.13 e successive) e il file di configurazione corrispondente nel classpath. - Per la registrazione di JUL, impostare la proprietà
-Dcom.databricks.jdbc.loggerImpl=JDKLOGGER
di sistema . Si tratta dell'impostazione predefinita.
- Per la registrazione SLF4J, impostare la proprietà
Impostare la
LogLevel
proprietà sul stringa di connessione sul livello di informazioni desiderato da includere nei file di log.Impostare la
LogPath
proprietà nel stringa di connessione sul percorso completo della cartella in cui si desidera salvare i file di log.Ad esempio, l'URL di connessione seguente abilita il livello di registrazione 6 e salva i file di log nella cartella C:temp:
jdbc: databricks://localhost:11000;LogLevel=6;LogPath=C:\\temp
Riavviare l'applicazione JDBC e riconnettersi al server per applicare le impostazioni.
Esempio: eseguire una query usando il driver JDBC
L'esempio seguente illustra come usare il driver JDBC per eseguire una query SQL di Databricks usando una risorsa di calcolo di Azure Databricks.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Properties;
public class DatabricksJDBCExample {
public static void main(String[] args) {
Class.forName("com.databricks.client.jdbc.Driver");
// Set JDBC URL properties
String jdbcUrl = "jdbc:databricks://dbc-a1b2345c-d6e7.cloud.databricks.com:443";
Properties connectionProperties = new Properties();
connectionProperties.put("httpPath", "sql/protocolv1/o/123456780012345/0123-123450-z000pi22");
connectionProperties.put("ssl", "1");
// Set authentication properties (personal access token)
connectionProperties.put("AuthMech", "3");
connectionProperties.put("user", "token");
connectionProperties.put("password", "12345678901234667890abcdabcd");
// Set logging properties
connectionProperties.put("logPath", "logs/myapplication.log");
// Establish connection and execute query
try (Connection connection = DriverManager.getConnection(jdbcUrl, connectionProperties);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SELECT * FROM samples.nyctaxi.trips")) {
// Get metadata and column names
ResultSetMetaData metaData = resultSet.getMetaData();
String[] columns = new String[metaData.getColumnCount()];
for (int i = 0; i < columns.length; i++) {
columns[i] = metaData.getColumnName(i + 1);
}
// Process and print the result set
while (resultSet.next()) {
System.out.print("Row " + resultSet.getRow() + "=[");
for (int i = 0; i < columns.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(columns[i] + "='" + resultSet.getObject(i + 1) + "'");
}
System.out.println("]");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}