Databricks JDBC-drivrutin (OSS)

Viktigt!

Den här drivrutinen är i offentlig förhandsversion och är ännu inte tillgänglig som öppen källkod.

Databricks tillhandahåller en JDBC-drivrutin för öppen källkod programvara (OSS) som gör att du kan ansluta verktyg som DataGrip, DBeaver och SQL Workbench/J till Azure Databricks via Java Database Connectivity (JDBC), en branschstandardspecifikation för åtkomst till databashanteringssystem.

Den här drivrutinen har implementerat JDBC-API:erna och tillhandahåller grundläggande funktioner som OAuth, Cloud Fetch och funktioner som volyminmatning i Unity Catalog. Den kör inbyggt frågeläge och stöder intern parameteriserad fråga och kan köras med api:er för körning av instruktioner, vilket ger den fördelaktiga funktionen för kvarhållning av frågeresultat eller Thrift.

Den här artikeln innehåller information om hur du installerar och använder Databricks JDBC-drivrutinen (OSS). Information om JDBC-drivrutinen för icke-OSS Databricks finns i Databricks JDBC-drivrutin.

Krav

Om du vill använda Databricks JDBC-drivrutinen (OSS) måste följande krav uppfyllas:

  • Java Runtime Environment (JRE) 11.0 eller senare. CI-testning stöds på JRE 11, 17 och 21.

Installera drivrutinen

Databricks JDBC-drivrutinen (OSS) publiceras på Maven-lagringsplatsen. Den senaste versionen är 0.9.1-oss.

Om du vill installera drivrutinen kan du göra något av följande:

  • För Maven-projekt lägger du till följande beroende i projektets pom.xml fil för att instruera Maven att automatiskt ladda ned JDBC-drivrutinen med den angivna versionen:

    <dependency>
      <groupId>com.databricks</groupId>
      <artifactId>databricks-jdbc</artifactId>
      <version>0.9.1-oss</version>
      <scope>runtime</scope>
    </dependency>
    
  • För Gradle-projekt lägger du till följande beroende i projektets byggfil för att instruera Gradle att automatiskt ladda ned JDBC-drivrutinen med den angivna versionen:

    implementation 'com.databricks:databricks-jdbc:0.9.1-oss'
    

Information om hur du visar beroendesyntaxen för andra projekttyper och för att hämta det senaste versionsnumret för Databricks JDBC-drivrutinen (OSS) finns i Maven-lagringsplatsen.

Konfigurera anslutnings-URL:en

För att ansluta till din Azure Databricks-arbetsyta med JDBC-drivrutinen måste du ange en JDBC-anslutnings-URL som innehåller olika anslutningsinställningar, till exempel servervärdnamnet för din Azure Databricks-arbetsyta, inställningarna för beräkningsresurser och autentiseringsuppgifter för att ansluta till arbetsytan.

Du kan ange värdet för de här egenskaperna på JDBC-anslutnings-URL:en, ange och skicka dem till metoden DriverManager.getConnection eller en kombination av båda. Se leverantörens dokumentation för hur du bäst ansluter med din specifika app, klient, SDK, API eller SQL-verktyg.

JDBC-anslutnings-URL:en måste ha följande format. Egenskaper är skiftlägesokänsliga.

jdbc:databricks://<server-hostname>:<port>/<schema>;[property1]=[value];[property2]=[value];...

Du kan också ange inställningarna med hjälp av java.util.Properties klassen eller en kombination:

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");

Anslutnings-URL-element beskrivs i följande tabell. Information om ytterligare egenskaper, inklusive autentiseringsegenskaper, finns i avsnitten nedan. URL-element och egenskaper är skiftlägesokänsliga.

URL-element eller egenskap beskrivning
<server-hostname> Azure Databricks-beräkningsresursens värdnamnsvärde för servern.
<port> Azure Databricks-beräkningsresursens portvärde. Standardvärdet är 443.
<schema> Namnet på schemat. Du kan också ange egenskapen ConnSchema . Se Anslutningsegenskaper.
httpPath Azure Databricks-beräkningsresursens HTTP-sökvägsvärde. Anslutningsappen utgör DEN HTTP-adress som ska anslutas till genom httpPath att lägga till värdet på värden och porten som anges i anslutnings-URL:en. Om du till exempel vill ansluta till HTTP-adressen http://localhost:10002/cliserviceanvänder du följande anslutnings-URL: jdbc:databricks://localhost:10002;httpPath=cliservice

Hämta JDBC-anslutnings-URL:en för ett Azure Databricks-kluster:

  1. Logga in på Azure Databricks-arbetsytan.
  2. I sidofältet klickar du på Beräkning och sedan på målklustrets namn.
  3. På fliken Konfiguration expanderar du Avancerade alternativ.
  4. Klicka på fliken JDBC/ODBC .
  5. Kopiera JDBC-URL:en som ska användas som JDBC-anslutnings-URL eller konstruera URL:en från värden i fälten Servervärdnamn, Port och HTTP-sökväg.

Hämta JDBC-anslutnings-URL:en för ett Databricks SQL-lager:

  1. Logga in på Azure Databricks-arbetsytan.
  2. I sidofältet klickar du på SQL Warehouses och sedan på mållagrets namn.
  3. Klicka på fliken Anslutningsinformation .
  4. Kopiera JDBC-URL:en som ska användas som JDBC-anslutnings-URL eller konstruera URL:en från värden i fälten Servervärdnamn, Port och HTTP-sökväg.

Autentisera drivrutinen

Du kan autentisera JDBC-drivrutinsanslutningen med någon av följande autentiseringsmekanismer:

OAuth-autentisering från användare till dator (U2M)

JDBC-drivrutinen stöder OAuth-autentisering från användare till dator (U2M) för mänsklig inloggning i realtid och medgivande för att autentisera databricks-målanvändarkontot. Detta kallas även webbläsarbaserad OAuth-autentisering.

Azure Databricks har skapat OAuth-klient-ID databricks-sql-jdbc för kunder. Detta är också standard-OAuth-klient-ID som används i JDBC-drivrutinen. Om du vill konfigurera OAuth U2M-autentisering lägger du bara till följande egenskaper i din befintliga JDBC-anslutnings-URL eller java.util.Properties -objekt:

Property Värde
AuthMech 11
Auth_Flow 2

OAuth-autentisering från dator till dator (M2M)

JDBC-drivrutinen stöder OAuth-M2M-autentisering (machine-to-machine) med hjälp av ett huvudnamn för Azure Databricks-tjänsten. Detta kallas även OAuth 2.0-klientautentiseringsuppgifter. Se Autentisera åtkomst till Azure Databricks med ett huvudnamn för tjänsten med OAuth (OAuth M2M).

Så här konfigurerar du autentiseringsuppgifter för OAuth M2M- eller OAuth 2.0-klienten:

  1. Skapa ett Microsoft Entra ID-hanterat tjänsthuvudnamn och tilldela det sedan till Azure Databricks-konton och arbetsytor. Mer information finns i Hantera tjänstens huvudnamn.

    Viktigt!

    Databricks JDBC Driver (OSS) stöder Azure Databricks OAuth-hemligheter för OAuth M2M- eller OAuth 2.0-klientautentiseringsuppgifter. Microsoft Entra-ID-hemligheter stöds inte.

  2. Skapa en Azure Databricks OAuth-hemlighet för tjänstens huvudnamn. Det gör du genom att läsa Manuellt generera och använda åtkomsttoken för OAuth M2M-autentisering.

  3. Ge tjänstens huvudnamn åtkomst till klustret eller informationslagret. Se Beräkningsbehörigheter eller Hantera ett SQL-lager.

Lägg till följande egenskaper i din befintliga JDBC-anslutnings-URL eller java.util.Properties -objekt:

Property Värde
AuthMech 11
Auth_Flow 1
OAuth2ClientID Tjänstens huvudnamns program-ID (klient)-värde.
OAuth2Secret Tjänstens huvudnamns Azure Databricks OAuth-hemlighet. (Microsoft Entra ID-hemligheter stöds inte för OAuth M2M- eller OAuth 2.0-klientautentiseringsuppgifter.)

Personlig åtkomsttoken för Azure Databricks

Om du vill autentisera din JDBC-drivrutinsanslutning med en personlig åtkomsttoken för Azure Databricks lägger du till följande egenskaper i JDBC-anslutnings-URL:en eller java.util.Properties -objektet:

Property Värde
AuthMech 3
user Värdet token, som en sträng.
PWD eller password Ditt personliga åtkomsttokenvärde för Azure Databricks som en sträng.

Anslutningsegenskaper

Följande ytterligare anslutningsegenskaper stöds av JDBC-drivrutinen. Egenskaper är skiftlägesokänsliga.

Property Standardvärde beskrivning
AuthMech Obligatoriskt Autentiseringsmekanismen, där 3 anger att mekanismen är en personlig åtkomsttoken för Azure Databricks, och 11 anger att mekanismen är OAuth 2.0-token. Ytterligare egenskaper krävs för varje mekanism. Se Autentisera drivrutinen.
Auth_Flow 0 OAuth2-autentiseringsflödet för drivrutinsanslutningen. Den här egenskapen krävs om AuthMech är 11.
SSL 1 Om anslutningsappen kommunicerar med Spark-servern via en SSL-aktiverad socket.
ConnCatalog eller catalog SPARK Namnet på den standardkatalog som ska användas.
ConnSchema eller schema default Namnet på det standardschema som ska användas. Detta kan anges antingen genom att <schema> ersätta i URL:en med namnet på schemat som ska användas eller genom att ställa in ConnSchema egenskapen på namnet på schemat som ska användas.
ProxyAuth 0 Om den är inställd 1på använder drivrutinen proxyautentiseringsanvändaren och lösenordet, som representeras av ProxyUID och ProxyPwd.
ProxyHost null En sträng som representerar namnet på proxyvärden som ska användas när UseProxy är också inställt på 1.
ProxyPort null Ett heltal som representerar antalet proxyportar som ska användas när UseProxy är också inställt på 1.
ProxyUID null En sträng som representerar användarnamnet som ska användas för proxyautentisering när ProxyAuth och UseProxy är också inställt på 1.
ProxyPwd null En sträng som representerar lösenordet som ska användas för proxyautentisering när ProxyAuth och UseProxy är också inställt på 1.
UseProxy 0 Om inställningen är inställd 1på använder drivrutinen de angivna proxyinställningarna (till exempel: ProxyAuth, ProxyHost, ProxyPort, ProxyPwdoch ProxyUID).
UseSystemProxy 0 Om inställningen är inställd 1på använder drivrutinen de proxyinställningar som har angetts på systemnivå. Om ytterligare proxyegenskaper anges i anslutnings-URL:en åsidosätter dessa ytterligare proxyegenskaper de som har angetts på systemnivå.
UseCFProxy 0 Om inställningen är inställd 1på använder drivrutinen proxyinställningarna för molnhämtning om de tillhandahålls, annars använder du den vanliga proxyn.
CFProxyAuth 0 Om den är inställd 1på använder drivrutinen proxyautentiseringsanvändaren och lösenordet, som representeras av CFProxyUID och CFProxyPwd.
CFProxyHost null En sträng som representerar namnet på proxyvärden som ska användas när UseCFProxy är också inställt på 1.
CFProxyPort null Ett heltal som representerar antalet proxyportar som ska användas när UseCFProxy är också inställt på 1.
CFProxyUID null En sträng som representerar användarnamnet som ska användas för proxyautentisering när CFProxyAuth och UseCFProxy är också inställt på 1.
CFProxyPwd null En sträng som representerar lösenordet som ska användas för proxyautentisering när CFProxyAuth och UseCFProxy är också inställt på 1.
AsyncExecPollInterval 200 Tiden i millisekunder mellan varje avsökning för den asynkrona frågekörningsstatusen. Asynkront refererar till det faktum att RPC-anropet som används för att köra en fråga mot Spark är asynkront. Det betyder inte att JDBC-asynkrona åtgärder stöds.
UserAgentEntry browser Posten User-Agent som ska ingå i HTTP-begäran. Det här värdet är i följande format: [ProductName]/[ProductVersion] [Comment]
UseThriftClient 0 Om JDBC-drivrutinen ska använda Thrift-klienten för att ansluta till ett kluster för alla syften. Standardvärdet fungerar för SQL-lager.

SQL-konfigurationsegenskaper

Följande SQL-konfigurationsegenskaper stöds av JDBC-drivrutinen. Dessa beskrivs också i Konfigurationsparametrar. Egenskaper är skiftlägesokänsliga.

Property Standardvärde beskrivning
ansi_mode TRUE Om du vill aktivera strikt ANSI SQL-beteende för vissa funktioner och regler för gjutning.
enable_photo TRUE Om du vill aktivera den fotovektoriserade frågemotorn.
legacy_time_parser_policy EXCEPTION De metoder som används för att parsa och formatera datum och tidsstämplar. Giltiga värden är EXCEPTION, LEGACY och CORRECTED.
max_file_partition_bytes 128m Det maximala antalet byte som ska packas i en enda partition när du läser från filbaserade källor. Inställningen kan vara ett positivt heltal och eventuellt inkludera ett mått som b (byte) k eller kb (1 024 byte).
read_only_external_metastore false Styr om ett externt metaarkiv behandlas som skrivskyddat.
statement_timeout 172800 Anger tidsgränsen för SQL-instruktionen mellan 0 och 172800 sekunder.
timezone UTC Ange den lokala tidszonen. Region-ID:n i formatet area/city, till exempel Amerika/Los_Angeles eller zonförskjutningar i formatet (+|-)HH, (+|-)HH:mm eller (+|-)HH:mm:ss, t.ex. -08, +01:00 eller -13:33:33. UTC Dessutom stöds som ett alias för +00:00
use_cached_result true Om Databricks SQL cachelagrar och återanvänder resultat när det är möjligt.

Loggningsegenskaper

Följande loggningsegenskaper stöds av JDBC-drivrutinen. Egenskaper är skiftlägesokänsliga.

Property Standardvärde beskrivning
LogLevel 4 Loggningsnivån, som är värdet 0 till 6:

- 0: Inaktivera all loggning.
– 1: Aktivera loggning på fatal-nivån, som loggar mycket allvarliga felhändelser som leder till att anslutningsappen avbryts.
– 2: Aktivera loggning på felnivån, som loggar felhändelser som fortfarande kan tillåta att anslutningsappen fortsätter att köras.
- 3: Aktivera loggning på VARNING-nivån, som loggar händelser som kan resultera i ett fel om åtgärden inte vidtas.
– 4: Aktivera loggning på INFO-nivån, som loggar allmän information som beskriver förloppet för anslutningsappen.
– 5: Aktivera loggning på FELSÖKNINGsnivå, som loggar detaljerad information som är användbar för felsökning av anslutningsappen.
– 6: Aktivera loggning på TRACE-nivån, som loggar all anslutningsaktivitet.

Använd den här egenskapen för att aktivera eller inaktivera loggning i anslutningsappen och för att ange hur mycket information som ingår i loggfilerna.
LogPath logs/application.log Den fullständiga sökvägen till mappen där anslutningsappen sparar loggfiler när loggning är aktiverad, som en sträng. Om värdet LogPath är ogiltigt skickar anslutningsappen den loggade informationen till standardutdataströmmen (System.out).

Exempel: Kör en fråga med JDBC-drivrutinen

I följande exempel visas hur du använder JDBC-drivrutinen för att köra en Databricks SQL-fråga med hjälp av en Azure Databricks-beräkningsresurs.

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();
        }
    }
}

Ytterligare resurser