Databricks JDBC Sürücüsünü (Simba) Test Etme

Uyarı

Bu sayfa, Simba JDBC Sürücüsü (Eski), sürüm 3'ün altındaki sürümler için geçerlidir. Databricks, JDBC bağlantısı için Databricks JDBC Sürücüsüne geçiş yapmanızı kesinlikle önerir. Unity Kataloğu ölçüm görünümleri desteği, birden çok SQL deyimine yayılan işlemler, saklı yordamlar, daha hızlı büyük sonuç alma ve yerleşik istemci telemetrisi gibi iyileştirmeler içerir.

Bu sayfada Databricks JDBC Sürücüsünü kullanan kodun nasıl test edilir açıklanmaktadır.

JDBC uyumlu diller için herhangi bir test çerçevesi kullanın. Aşağıdaki örneklerde JDBC sürücü bağlantılarını test etmek için JUnit ve Mockito kullanılır. Bu kod, Databricks JDBC Sürücüsü (Simba) için kimlik doğrulama ayarlarındaki örneği temel alır.

Yardımcı işlevler

Dosya, Helpers.java JDBC bağlantılarıyla çalışmaya yönelik yardımcı program işlevlerini içerir:

  • CreateConnection: Azure Databricks işlem kaynağına bir bağlantı açar.
  • SelectNYCTaxis: içinden samples.nyctaxi.tripsbelirtilen satır sayısını sorgular.
  • PrintResultSet: Sonuç kümesinin içeriğini konsola yazdırır.
// 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(")]");
    }
  }
}

Main sınıfı

Dosya, Main.java bağlanmak ve verileri sorgulamak için yardımcı işlevleri çağırır:

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

Birim testleri taklit (mocking) ile

JUnit ve Mockito, HelpersTest.java işlevini test etmek için SelectNYCTaxis dosyasında kullanılır. Mocking, gerçek hesaplama kaynaklarını kullanmadan veritabanı bağlantılarını simüle eder, böylece testler Azure Databricks çalışma alanlarınızı etkilemeden saniyeler içinde çalışır.

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

Yalnızca bir SelectNYCTaxis deyimi çalıştırdığı için SELECT, burada mocking kesinlikle gerekli değildir. Ancak, tablo durumunu etkilemeden testleri tekrar tekrar çalıştırabileceğinizden, sahte işlem özellikle verileri (INSERT INTO, UPDATE, DELETE FROM) değiştiren işlevleri test ederken yararlıdır.