Aller au contenu principal

Test du Driver JDBC Databricks (Simba)

remarque

Cette page s'applique au Driver JDBC Simba (hérité), versions inférieures à la version 3. Databricks recommande vivement de migrer vers le Driver JDBC Databricks pour la connectivité JDBC. Il inclut des améliorations telles que la prise en charge des vues des indicateurs Unity Catalog, des transactions couvrant plusieurs instructions SQL, des procédures stockées, une récupération plus rapide des grands résultats et la télémétrie client intégrée.

Cette page décrit comment tester du code qui utilise le Driver JDBC Databricks.

Utilisez n'importe quel cadre de test pour les langages compatibles JDBC. Les exemples suivants utilisent JUnit et Mockito pour tester les connexions du Driver JDBC. Ce code est basé sur l'exemple des paramètres d'authentification du Driver JDBC Databricks (Simba).

Fonctions d'aide

Le fichier Helpers.java contient des fonctions utilitaires pour l'utilisation des connexions JDBC :

  • CreateConnection: Ouvre une connexion à une ressource de compute Databricks.
  • SelectNYCTaxis: Interroge le nombre spécifié de lignes depuis samples.nyctaxi.trips.
  • PrintResultSet: Affiche le contenu du jeu de résultats dans la console.
Java
// Helpers.java

import java.sql.*;
import java.util.Properties;

public class Helpers {
static Connection CreateConnection(
String url,
Properties p
) throws SQLException {
Connection conn = DriverManager.getConnection(url, p);
return conn;
}

static ResultSet SelectNYCTaxis(
Connection conn,
long rows
) throws SQLException {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM samples.nyctaxi.trips LIMIT " + rows);
return rs;
}

static void PrintResultSet(ResultSet rs) throws SQLException {
ResultSetMetaData md = rs.getMetaData();
String[] columns = new String[md.getColumnCount()];
for (int i = 0; i < columns.length; i++) {
columns[i] = md.getColumnName(i + 1);
}
while (rs.next()) {
System.out.print("Row " + rs.getRow() + "=[");
for (int i = 0; i < columns.length; i++) {
if (i != 0) {
System.out.print(", ");
}
System.out.print(columns[i] + "='" + rs.getObject(i + 1) + "'");
}
System.out.println(")]");
}
}
}

Classe principale

Le fichier Main.java appelle les fonctions d'assistance pour se connecter aux données et les query :

Java
package org.example;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

public class Main {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("com.databricks.client.jdbc.Driver");
String url = "jdbc:databricks://" + System.getenv("DATABRICKS_SERVER_HOSTNAME") + ":443";
Properties p = new Properties();
p.put("httpPath", System.getenv("DATABRICKS_HTTP_PATH"));
p.put("AuthMech", "3");
p.put("UID", "token");
p.put("PWD", System.getenv("DATABRICKS_TOKEN"));

Connection conn = Helpers.CreateConnection(url, p);
ResultSet rs = Helpers.SelectNYCTaxis(conn, 2);
Helpers.PrintResultSet(rs);
}
}

Tests unitaires avec simulation

Le fichier HelpersTest.java utilise JUnit et Mockito pour tester la fonction SelectNYCTaxis. La simulation (mocking) simule les connexions à la base de données sans utiliser de Ressources de compute réelles, ainsi les tests s'exécutent en quelques secondes sans affecter vos Workspaces Databricks.

Java
package org.example;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import static org.junit.jupiter.api.Assertions.assertEquals;

public class HelpersTest {
@Test
public void testSelectNYCTaxis() throws SQLException {
Connection mockConnection = Mockito.mock(Connection.class);
Statement mockStatement = Mockito.mock(Statement.class);
ResultSet mockResultSet = Mockito.mock(ResultSet.class);

Mockito.when(mockConnection.createStatement()).thenReturn(mockStatement);
Mockito.when(mockStatement.executeQuery(Mockito.anyString())).thenReturn(mockResultSet);

ResultSet rs = Helpers.SelectNYCTaxis(mockConnection, 2);
assertEquals(mockResultSet, rs);
}
}

Puisque SelectNYCTaxis n'exécute qu'une SELECT instruction, la simulation n'est pas strictement requise ici. Cependant, le mocking est particulièrement utile lors du test de fonctions qui modifient les données (INSERT INTO, UPDATE, DELETE FROM), car vous pouvez exécuter des tests à plusieurs reprises sans affecter l'état de la table.