Freigeben über


Microsoft JDBC-Treiber für Microsoft Fabric Data Engineering (Vorschau)

Hinweis

Dieses Feature befindet sich in der Vorschau.

JDBC (Java Database Connectivity) ist ein weit verbreiteter Standard, der es Clientanwendungen ermöglicht, eine Verbindung zu Datenbanken und Big-Data-Plattformen herzustellen und mit diesen zu arbeiten.

Mit dem Microsoft JDBC-Treiber für Fabric Data Engineering können Sie eine Verbindung zu Spark-Workloads in Microsoft Fabric herstellen, sie abfragen und verwalten – basierend auf der Zuverlässigkeit und Einfachheit des JDBC-Standards. Basierend auf den Livy-APIs von Microsoft Fabric bietet der Treiber sichere und flexible Spark SQL-Konnektivität zu Ihren Java-Anwendungen und BI-Tools. Mit dieser Integration können Sie Spark-Code direkt übermitteln und ausführen, ohne separate Notizbuch- oder SparkAuftragsdefinitionsartefakte erstellen zu müssen.

Wichtige Merkmale

  • JDBC 4.2 konform: Vollständige Implementierung der JDBC 4.2-Spezifikation
  • Microsoft Entra ID-Authentifizierung: Mehrere Authentifizierungsflüsse, einschließlich interaktiver, Clientanmeldeinformationen und zertifikatbasierter Authentifizierung
  • Enterprise-Verbindungspooling: Ein integriertes Verbindungspooling mit Gesundheitsüberwachung und automatischer Wiederherstellung
  • Spark SQL Native Query-Unterstützung: Direkte Ausführung von Spark SQL-Anweisungen ohne Übersetzung
  • Umfassende Unterstützung für Datentypen: Unterstützung für alle Spark SQL-Datentypen einschließlich komplexer Typen (ARRAY, MAP, STRUCT)
  • Asynchrones Ergebnismengen-Prefetching: Hintergrunddatenladen für verbesserte Leistung
  • Circuit Breaker Pattern: Schutz vor kaskadierenden Ausfällen mit automatischem Retry
  • Automatische Wiederverbindung: Transparente Sitzungswiederherstellung bei Verbindungsfehlern
  • Proxyunterstützung: HTTP- und SOCKS-Proxykonfiguration für Unternehmensumgebungen

Voraussetzungen

Bevor Sie den Microsoft JDBC-Treiber für Microsoft Fabric Data Engineering verwenden, stellen Sie Folgendes sicher:

  • Java Development Kit (JDK): Version 11 oder höher (Java 21 empfohlen)
  • Microsoft Fabric Access: Zugriff auf einen Microsoft Fabric-Arbeitsbereich
  • Azure Entra ID-Anmeldeinformationen: Geeignete Anmeldeinformationen für die Authentifizierung
  • Arbeitsbereichs- und Lakehouse-IDs: GUID-IDs für den Fabric-Arbeitsbereich und das Lakehouse

Herunterladen und Installieren

Microsoft JDBC Driver für Microsoft Fabric Data Engineering Version 1.0.0 ist die öffentliche Vorschau und unterstützt Java 11, 17 und 21. Wir verbessern kontinuierlich die Java-Konnektivitätsunterstützung und empfehlen Ihnen, mit der neuesten Version des Microsoft ASPX-Treibers zu arbeiten.

  1. Laden Sie entweder die ZIP- oder Tar-Datei aus den obigen Links herunter.
  2. Extrahieren Sie die heruntergeladene Datei, um auf die Treiber-JAR-Dateien zuzugreifen.
  3. Wählen Sie die JAR-Datei aus, die Ihrer JRE-Version entspricht:
    • Für Java 11: ms-sparksql-jdbc-1.0.0.jre11.jar
    • Für Java 17: ms-sparksql-jdbc-1.0.0.jre17.jar
    • Für Java 21: ms-sparksql-jdbc-1.0.0.jre21.jar
  4. Fügen Sie die ausgewählte JAR-Datei zum Klassenpfad Ihrer Anwendung hinzu.
  5. Konfigurieren Sie für JDBC-Clients die JDBC-Treiberklasse: com.microsoft.spark.livy.jdbc.LivyDriver

Schnellstartbeispiel

In diesem Beispiel wird veranschaulicht, wie Sie eine Verbindung mit Microsoft Fabric herstellen und eine Abfrage mithilfe des Microsoft FABRIC Data Engineering-Treibers ausführen. Stellen Sie sicher, dass Sie die Voraussetzungen erfüllt und den Treiber installiert haben, bevor Sie diesen Code ausführen.

import java.sql.*;

public class QuickStartExample {
    public static void main(String[] args) {
        // Connection string with required parameters
        String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
                     "FabricWorkspaceID=<workspace-id>;" +
                     "FabricLakehouseID=<lakehouse-id>;" +
                     "AuthFlow=2;" +  // Interactive browser authentication
                     "LogLevel=INFO";
        
        try (Connection conn = DriverManager.getConnection(url)) {
            // Execute a simple query
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT 'Hello from Fabric!' as message")) {
                
                if (rs.next()) {
                    System.out.println(rs.getString("message"));
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Verbindungszeichenfolgenformat

Basisverbindungszeichenfolge

Der Microsoft JDBC-Treiber für Microsoft Fabric Data Engineering verwendet das folgende Verbindungszeichenfolgenformat:

jdbc:fabricspark://<hostname>[:<port>][;<parameter1>=<value1>;<parameter2>=<value2>;...]

Verbindungskettenkomponenten

Komponente Description Example
Protokoll JDBC-URL-Protokollkennzeichen jdbc:fabricspark://
Hostname Hostname des Microsoft Fabric-Endpunkts api.fabric.microsoft.com
Hafen Optionale Portnummer (Standard: 443) :443
Parameter Durch Semikolons getrennte Schlüssel=Wert-Paare FabricWorkspaceID=<guid>

Beispielverbindungszeichenfolgen

Standardverbindung (interaktive Authentifizierung)

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;AuthFlow=2

Mit Spark-Ressourcenkonfiguration

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2;AuthFlow=2

Mit Spark Session-Eigenschaften

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<workspace-id>;FabricLakehouseID=<lakehouse-id>;spark.sql.adaptive.enabled=true;spark.sql.shuffle.partitions=200;AuthFlow=2

Authentifizierung

Der Microsoft JDBC-Treiber für Microsoft Fabric Data Engineering unterstützt mehrere Authentifizierungsmethoden über Microsoft Entra ID (früher Azure Active Directory). Die Authentifizierung wird mithilfe des AuthFlow Parameters in der Verbindungszeichenfolge konfiguriert.

Authentifizierungsabläufe

AuthFlow Authentifizierungsmethode Anwendungsfall
0 Azure CLI-Anmeldeinformationen Entwicklung mit Azure CLI
1 Clientanmeldeinformationen (Dienstprinzipal) Automatisierte/Dienst-zu-Dienst-Authentifizierung
2 Interaktiver Browser Interaktive Benutzerauthentifizierung (Standard)
3 SPN Dienstprinzipalauthentifizierung
4 Zertifikat-basiert Zertifikatbasierte Dienst-Principal-Authentifizierung
5 Zugriffstoken Vorab erworbenes Zugriffstoken

Interaktive Browserauthentifizierung

Am besten geeignet für: Entwicklung und interaktive Anwendungen

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=2;" +  // Interactive browser authentication
             "AuthTenantID=<tenant-id>;" +  // Optional
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Parameter:

  • AuthFlow=2: Gibt die interaktive Browserauthentifizierung an.
  • AuthTenantID (optional): Azure-Mandanten-ID
  • AuthClientID (optional): Anwendungs-ID (Client)

Benehmen:

  • Öffnet ein Browserfenster für die Benutzerauthentifizierung.
  • Anmeldeinformationen werden für nachfolgende Verbindungen zwischengespeichert, bis sie abgelaufen sind.
  • Geeignet für Einzelbenutzeranwendungen

Clientanmeldeinformationen-Authentifizierung

Am besten geeignet für: Automatisierte Dienste und Hintergrundaufträge

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=1;" +  // Client credentials authentication
             "AuthClientID=<client-id>;" +
             "AuthClientSecret=<client-secret>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Erforderliche Parameter:

  • AuthFlow=1: Gibt die Authentifizierung der Clientanmeldeinformationen an.
  • AuthClientID: Anwendungs-ID (Client-ID) von Microsoft Entra ID
  • AuthClientSecret: Geheimer Clientschlüssel von Microsoft Entra ID
  • AuthTenantID: Azure-Mandanten-ID

Bewährte Methoden:

  • Sicheres Speichern geheimer Schlüssel (Azure Key Vault, Umgebungsvariablen)
  • Verwenden von verwalteten Identitäten nach Möglichkeit
  • Regelmäßiges Erneuern von Geheimnissen

zertifikatbasierte Authentifizierung

Am besten geeignet für: Unternehmensanwendungen, die zertifikatbasierte Authentifizierung erfordern

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=4;" +  // Certificate-based authentication
             "AuthClientID=<client-id>;" +
             "AuthCertificatePath=/path/to/certificate.pfx;" +
             "AuthCertificatePassword=<certificate-password>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Erforderliche Parameter:

  • AuthFlow=4: Gibt die zertifikatbasierte Authentifizierung an.
  • AuthClientID: Anwendungs-ID (Client-ID)
  • AuthCertificatePath: Pfad zur PFX/PKCS12-Zertifikatdatei
  • AuthCertificatePassword: Zertifikatkennwort
  • AuthTenantID: Azure-Mandanten-ID

Dienstprinzipalauthentifizierung

Am besten geeignet für: Headless-Umgebungen und Remotesitzungen

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=3;" +  // Device code authentication
             "AuthClientID=<client-id>;" +
             "AuthTenantID=<tenant-id>;" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Benehmen:

  • Zeigt einen Gerätecode und eine URL in der Konsole an.
  • Der Benutzer besucht die URL und gibt den Code ein.
  • Die Authentifizierung wird nach der Benutzerüberprüfung abgeschlossen.

Zugriffstokenauthentifizierung

Am besten geeignet für: Benutzerdefinierte Authentifizierungsszenarien

// Acquire token through custom mechanism
String accessToken = acquireTokenFromCustomSource();

String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=5;" +  // Access token authentication
             "AuthAccessToken=" + accessToken + ";" +
             "LogLevel=INFO";

Connection conn = DriverManager.getConnection(url);

Zwischenspeichern der Authentifizierung

Der Treiber speichert Authentifizierungstoken automatisch zwischen, um die Leistung zu verbessern:

// Enable/disable caching (enabled by default)
String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
             "FabricWorkspaceID=<workspace-id>;" +
             "FabricLakehouseID=<lakehouse-id>;" +
             "AuthFlow=2;" +
             "AuthEnableCaching=true;" +  // Enable token caching
             "AuthCacheTTLMS=3600000";    // Cache TTL: 1 hour

Connection conn = DriverManager.getConnection(url);

Konfigurationsparameter

Erforderliche Parameter

Diese Parameter müssen in jeder Verbindungszeichenfolge vorhanden sein:

Parameter Typ Description Example
FabricWorkspaceID UUID Microsoft Fabric-Arbeitsbereichsbezeichner <workspace-id>
FabricLakehouseID UUID Microsoft Fabric Lakehouse-ID <lakehouse-id>
AuthFlow Integer Authentifizierungsflusstyp (0-5) 2

Optionale Parameter

API-Versionskonfiguration

Parameter Typ Standard Description
FabricVersion String v1 Microsoft Fabric-API-Version
LivyApiVersion String 2023-12-01 API-Version von Livy

Umgebungskonfiguration

Parameter Typ Standard Description
FabricEnvironmentID UUID Nichts Fabric-Umgebungsbezeichner für das Verweisen auf das Umgebungselement für Spark-Sitzung

Spark-Konfiguration

Sitzungsressourcenkonfiguration

Konfigurieren sie Spark-Sitzungsressourcen für eine optimale Leistung:

Parameter Typ Standard Description Example
DriverCores Integer Spark-Voreinstellung Anzahl der CPU-Kerne für Treiber 4
DriverMemory String Spark-Voreinstellung Speicherzuweisung für Treiber 4g
ExecutorCores Integer Spark-Voreinstellung Anzahl der CPU-Kerne pro Executor 4
ExecutorMemory String Spark-Voreinstellung Speicherzuweisung pro Executor 8g
NumExecutors Integer Spark-Voreinstellung Anzahl von Executors 2

Example:

DriverCores=4;DriverMemory=4g;ExecutorCores=4;ExecutorMemory=8g;NumExecutors=2

Benutzerdefinierte Spark-Sitzungseigenschaften

Jeder Parameter mit dem Präfix spark. wird automatisch auf die Spark-Sitzung angewendet:

Beispiel-Spark-Konfigurationen:

spark.sql.adaptive.enabled=true
spark.sql.adaptive.coalescePartitions.enabled=true
spark.sql.shuffle.partitions=200
spark.sql.autoBroadcastJoinThreshold=10485760
spark.dynamicAllocation.enabled=true
spark.dynamicAllocation.minExecutors=1
spark.dynamicAllocation.maxExecutors=10
spark.executor.memoryOverhead=1g

Natives Ausführungsmodul (NEE):

spark.nee.enabled=true

Vollständiges Beispiel:

jdbc:fabricspark://api.fabric.microsoft.com;FabricWorkspaceID=<guid>;FabricLakehouseID=<guid>;DriverMemory=4g;ExecutorMemory=8g;NumExecutors=2;spark.sql.adaptive.enabled=true;spark.nee.enabled=true;AuthFlow=2

HTTP-Verbindungspoolkonfiguration

Konfigurieren sie die HTTP-Verbindungspooling für eine optimale Netzwerkleistung:

Parameter Typ Standard Description
HttpMaxTotalConnections Integer 100 Maximale Gesamtanzahl von HTTP-Verbindungen
HttpMaxConnectionsPerRoute Integer 50 Maximale Verbindungen pro Route
HttpConnectionTimeoutInSeconds Integer 30 Verbindungstimeout
HttpSocketTimeoutInSeconds Integer 60 Socket-Lesetimeout
HttpReadTimeoutInSeconds Integer 60 HTTP-Lesetimeout
HttpConnectionRequestTimeoutSeconds Integer 30 Timeout der Verbindungsanforderung aus dem Pool
HttpEnableKeepAlive Boolean Wahr Aktivieren von HTTP-Keep-Alive
HttpKeepAliveTimeoutSeconds Integer 60 Keep-Alive-Timeout
HttpFollowRedirects Boolean Wahr HTTP-Umleitungen folgen
HttpUseAsyncIO Boolean Falsch Verwendung von asynchronem HTTP-E/A

Example:

HttpMaxTotalConnections=200;HttpMaxConnectionsPerRoute=100;HttpConnectionTimeoutInSeconds=60

Proxykonfiguration

Konfigurieren von HTTP- und SOCKEN-Proxyeinstellungen für Unternehmensumgebungen:

Parameter Typ Standard Description
UseProxy Boolean Falsch Proxy aktivieren
ProxyTransport String http Proxy-Transporttyp (http/tcp)
ProxyHost String Nichts Proxyhostname
ProxyPort Integer Nichts Proxyport
ProxyAuthEnabled Boolean Falsch Aktivieren der Proxyauthentifizierung
ProxyUsername String Nichts Proxy-Authentifizierungsbenutzername
ProxyPassword String Nichts Proxyauthentifizierungskennwort
ProxyAuthScheme String basic Authentifizierungssystem (Basic/Digest/NTLM)
ProxySocksVersion Integer 5 SOCKS-Version (4/5)

HTTP-Proxybeispiel:

UseProxy=true;ProxyTransport=http;ProxyHost=proxy.company.com;ProxyPort=8080;ProxyAuthEnabled=true;ProxyUsername=user;ProxyPassword=pass

SOCKEN-Proxybeispiel:

UseProxy=true;ProxyTransport=tcp;ProxyHost=socks.company.com;ProxyPort=1080;ProxySocksVersion=5

Protokollierungskonfiguration

Parameter Typ Standard Description
LogLevel String INFO Protokollierungsebene: TRACE, DEBUG, INFO, WARN, ERROR

Example:

LogLevel=DEBUG

Standardprotokollspeicherort:

${user.home}/.microsoft/livy-jdbc-driver/driver.log

Benutzerdefinierte Protokollkonfiguration: Verwenden Sie eine benutzerdefinierte log4j2.xml- oder logback.xml-Datei in Ihrem Klassenpfad.


Verwendungsbeispiele

Grundlegende Verbindung

import java.sql.*;

public class BasicConnectionExample {
    public static void main(String[] args) {
        String url = "jdbc:fabricspark://api.fabric.microsoft.com;" +
                     "FabricWorkspaceID=<workspace-id>;" +
                     "FabricLakehouseID=<lakehouse-id>;" +
                     "AuthFlow=2";
        
        try (Connection conn = DriverManager.getConnection(url)) {
            System.out.println("Connected successfully!");
            System.out.println("Database: " + conn.getMetaData().getDatabaseProductName());
            System.out.println("Driver: " + conn.getMetaData().getDriverName());
            System.out.println("Driver Version: " + conn.getMetaData().getDriverVersion());
        } catch (SQLException e) {
            System.err.println("Connection failed: " + e.getMessage());
            e.printStackTrace();
        }
    }
}

Ausführen von Abfragen

Einfache Abfrage

public void executeSimpleQuery(Connection conn) throws SQLException {
    String sql = "SELECT current_timestamp() as now";
    
    try (Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {
        
        if (rs.next()) {
            Timestamp now = rs.getTimestamp("now");
            System.out.println("Current timestamp: " + now);
        }
    }
}

Abfrage mit Filter

public void executeQueryWithFilter(Connection conn) throws SQLException {
    String sql = "SELECT * FROM sales WHERE amount > 1000 ORDER BY amount DESC";
    
    try (Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {
        
        while (rs.next()) {
            int id = rs.getInt("id");
            double amount = rs.getDouble("amount");
            Date date = rs.getDate("sale_date");
            
            System.out.printf("ID: %d, Amount: %.2f, Date: %s%n", 
                            id, amount, date);
        }
    }
}

Abfrage mit Limit

public void executeQueryWithLimit(Connection conn) throws SQLException {
    String sql = "SELECT * FROM customers LIMIT 10";
    
    try (Statement stmt = conn.createStatement();
         ResultSet rs = stmt.executeQuery(sql)) {
        
        ResultSetMetaData metaData = rs.getMetaData();
        int columnCount = metaData.getColumnCount();
        
        // Print column names
        for (int i = 1; i <= columnCount; i++) {
            System.out.print(metaData.getColumnName(i) + "\t");
        }
        System.out.println();
        
        // Print rows
        while (rs.next()) {
            for (int i = 1; i <= columnCount; i++) {
                System.out.print(rs.getString(i) + "\t");
            }
            System.out.println();
        }
    }
}

Arbeiten mit Resultsets

public void navigateResultSet(Connection conn) throws SQLException {
    String sql = "SELECT id, name, amount FROM orders";
    
    try (Statement stmt = conn.createStatement(
            ResultSet.TYPE_SCROLL_INSENSITIVE,
            ResultSet.CONCUR_READ_ONLY);
         ResultSet rs = stmt.executeQuery(sql)) {
        
        // Move to first row
        if (rs.first()) {
            System.out.println("First row: " + rs.getString("name"));
        }
        
        // Move to last row
        if (rs.last()) {
            System.out.println("Last row: " + rs.getString("name"));
            System.out.println("Total rows: " + rs.getRow());
        }
        
        // Move to specific row
        if (rs.absolute(5)) {
            System.out.println("Row 5: " + rs.getString("name"));
        }
    }
}

Verarbeiten großer Ergebnismengen

public void processLargeResultSet(Connection conn) throws SQLException {
    String sql = "SELECT * FROM large_table";
    
    try (Statement stmt = conn.createStatement()) {
        // Set fetch size for efficient memory usage
        stmt.setFetchSize(1000);
        
        try (ResultSet rs = stmt.executeQuery(sql)) {
            int rowCount = 0;
            while (rs.next()) {
                // Process row
                processRow(rs);
                rowCount++;
                
                if (rowCount % 10000 == 0) {
                    System.out.println("Processed " + rowCount + " rows");
                }
            }
            System.out.println("Total rows processed: " + rowCount);
        }
    }
}

private void processRow(ResultSet rs) throws SQLException {
    // Process individual row
}

Verwendung vorbereiteter Anweisungen

public void usePreparedStatement(Connection conn) throws SQLException {
    String sql = "SELECT * FROM products WHERE category = ? AND price > ?";
    
    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        // Set parameters
        pstmt.setString(1, "Electronics");
        pstmt.setDouble(2, 100.0);
        
        try (ResultSet rs = pstmt.executeQuery()) {
            while (rs.next()) {
                String name = rs.getString("name");
                double price = rs.getDouble("price");
                System.out.printf("Product: %s, Price: $%.2f%n", name, price);
            }
        }
    }
}

Batchvorgänge

public void executeBatchInsert(Connection conn) throws SQLException {
    String sql = "INSERT INTO logs (timestamp, level, message) VALUES (?, ?, ?)";
    
    try (PreparedStatement pstmt = conn.prepareStatement(sql)) {
        conn.setAutoCommit(false);  // Disable auto-commit for batch
        
        // Add multiple statements to batch
        for (int i = 0; i < 1000; i++) {
            pstmt.setTimestamp(1, new Timestamp(System.currentTimeMillis()));
            pstmt.setString(2, "INFO");
            pstmt.setString(3, "Log message " + i);
            pstmt.addBatch();
            
            // Execute batch every 100 statements
            if (i % 100 == 0) {
                pstmt.executeBatch();
                pstmt.clearBatch();
            }
        }
        
        // Execute remaining statements
        pstmt.executeBatch();
        conn.commit();
        
        System.out.println("Batch insert completed successfully");
    } catch (SQLException e) {
        conn.rollback();
        throw e;
    } finally {
        conn.setAutoCommit(true);
    }
}

Datentypzuordnung

Der Treiber ordnet Spark SQL-Datentypen JDBC-SQL-Typen und Java-Typen zu.

Spark SQL-Typ JDBC SQL-Typ Java-Typ Hinweise
BOOLEAN BOOLEAN Boolean
BYTE TINYINT Byte
SHORT SMALLINT Short
INT INTEGER Integer
LONG BIGINT Long
FLOAT FLOAT Float
DOUBLE DOUBLE Double
DECIMAL DECIMAL BigDecimal Genauigkeit und Skalierung erhalten
STRING VARCHAR String
VARCHAR(n) VARCHAR String
CHAR(n) CHAR String
BINARY BINARY byte[]
DATE DATE java.sql.Date
TIMESTAMP TIMESTAMP java.sql.Timestamp
ARRAY VARCHAR String Serialisiert als JSON
MAP VARCHAR String Serialisiert als JSON
STRUCT VARCHAR String Serialisiert als JSON