JDBC-Treiber für BigQuery verwenden

Der JDBC-Treiber (Java Database Connectivity) für BigQuery verbindet Ihre Java-Anwendungen mit BigQuery. So können Sie BigQuery-Funktionen mit Ihren bevorzugten Tools und Ihrer bevorzugten Infrastruktur nutzen. Wenn Sie Nicht-Java-Anwendungen mit BigQuery verbinden möchten, verwenden Sie den Simba Open Database Connectivity (ODBC)-Treiber für BigQuery.

Beschränkungen

Für den JDBC-Treiber für BigQuery gelten die folgenden Einschränkungen:

Hinweise

  1. Sie sollten mit JDBC-Treibern, Apache Maven und dem java.sql-Paket vertraut sein.
  2. Prüfen Sie, ob auf Ihrem System die Java-Laufzeitumgebung (JRE) 8.0 oder höher konfiguriert ist. Informationen zum Prüfen Ihrer JRE-Version finden Sie unter JRE-Umgebung prüfen.
  3. Authentifizieren Sie sich bei BigQuery und notieren Sie sich die folgenden Informationen, die später verwendet werden, wenn Sie eine Verbindung mit dem JDBC-Treiber für BigQuery herstellen. Sie müssen nur die Informationen beachten, die der von Ihnen verwendeten Authentifizierungsmethode entsprechen.

    Authentifizierungsmethode Authentifizierungsinformationen Beispiel Verbindungseigenschaft (wird später festgelegt)
    Standarddienstkonto E-Mail-Adresse des Dienstkontos bq-jdbc-sa@mytestproject.iam.gserviceaccount.com OAuthServiceAcctEmail
    Dienstkontoschlüssel (JSON-Objekt) my-sa-key OAuthPvtKey
    Dienstkontoschlüsseldatei Dienstkontoschlüsseldatei (vollständiger Pfad) path/to/file/secret.json OAuthPvtKeyPath
    Google-Nutzerkonto Client-ID 123-abc.apps.googleusercontent.com OAuthClientId
    Clientschlüssel _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV OAuthClientSecret
    Vorab generiertes Zugriffstoken Zugriffstoken ya29.a0AfH6SMCiH1L-x_yZ OAuthAccessToken
    Vorab generiertes Aktualisierungstoken Aktualisierungstoken 1/fFAGRNJru1FTz70BzhT3Zg OAuthRefreshToken
    Client-ID 123-abc.apps.googleusercontent.com OAuthClientId
    Clientschlüssel _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uV OAuthClientSecret
    Standardanmeldedaten für Anwendungen Keine
    Konfigurationsdatei Konfigurationsdatei (JSON-Objekt oder vollständiger Pfad) path/to/file/secret.json OAuthPvtKey
    Konfigurationsobjekt für externes Konto Konfigurationsobjekt für das Konto external_account_configuration_object OAuthPvtKey
    Sonstiges Zielgruppen-Property der Konfigurationsdatei für externe Konten //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-provider BYOID_AudienceUri
    Abrufen von Tokens und Datei mit Umgebungsinformationen {\"file\":\"/path/to/file\"} BYOID_CredentialSource
    Nutzerprojekt (nur bei Verwendung eines Workforce-Pools) my_project BYOID_PoolUserProject
    URI für die Identitätsübernahme des Dienstkontos (nur bei Verwendung eines Mitarbeiteridentitätspools) my-sa BYOID_SA_Impersonation_Uri
    Security Token Service-Token basierend auf der Token Exchange-Spezifikation urn:ietf:params:oauth:tokentype:id_token BYOID_SubjectTokenType
    Security Token Service-Endpunkt für den Tokenaustausch https://sts.googleapis.com/v1/token BYOID_TokenUri

Entwicklungsumgebung konfigurieren

So konfigurieren Sie Ihre Entwicklungsumgebung mit dem JDBC-Treiber für BigQuery:

  1. Laden Sie eines der folgenden JDBC-Pakete herunter:

  2. Fügen Sie die heruntergeladene JAR-Datei Ihrem Klassenpfad hinzu, damit der Java-Compiler und die Laufzeitumgebung die erforderlichen JDBC-Klassen finden können. Informationen zum Hinzufügen einer Datei zu Ihrem Klassenpfad finden Sie unter Klassenpfad festlegen.

  3. Fügen Sie der Build-Datei die folgende Abhängigkeit hinzu:

    <dependency>
        <groupId>com.google.cloud</groupId>
        <artifactId>google-cloud-bigquery-jdbc</artifactId>
        <version>0.0.1</version>
        <scope>system</scope>
        <systemPath>path/to/file/google-jdbc-jar-with-dependencies.jar</systemPath>
    </dependency>
  4. Wenn Sie ein Gradle-Projekt verwenden, fügen Sie Ihrer Build-Datei Folgendes hinzu:

    dependencies {
    // ... other dependencies
    implementation files('path/to/file/google-jdbc-jar-with-dependencies.jar')
    }

Verbindung herstellen

So stellen Sie mit dem JDBC-Treiber für BigQuery eine Verbindung zwischen Ihrer Java-Anwendung und BigQuery her:

  1. Ermitteln Sie den Verbindungs-String für den JDBC-Treiber für BigQuery. Dieser String enthält alle erforderlichen Informationen, um eine Verbindung zwischen Ihrer Java-Anwendung und BigQuery herzustellen. Der Verbindungsstring hat das folgende Format:

    jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS

    Ersetzen Sie Folgendes:

    • HOST: Der DNS-Name oder die IP-Adresse des Servers.
    • PORT: die TCP-Portnummer.
    • PROJECT_ID: die ID Ihres BigQuery-Projekts.
    • AUTH_TYPE: Eine Zahl, die den von Ihnen verwendeten Authentifizierungstyp angibt. Einer der folgenden:
      • 0: für die Dienstkonto-Authentifizierung (Standard und Schlüsseldatei)
      • 1: für die Authentifizierung von Google-Nutzerkonten
      • 2: für die Authentifizierung mit einem vorab generierten Aktualisierungs- oder Zugriffstoken
      • 3: für die Authentifizierung mit Standardanmeldedaten für Anwendungen
      • 4: für andere Authentifizierungsmethoden
    • AUTH_PROPS: die Authentifizierungsinformationen, die Sie beim Authentifizieren bei BigQuery notiert haben, im Format property_1=value_1; property_2=value_2;..., z. B. OAuthPvtKeyPath=path/to/file/secret.json, wenn Sie sich mit einer Dienstkontoschlüsseldatei authentifiziert haben.
    • OTHER_PROPS (optional): zusätzliche Verbindungseigenschaften für den JDBC-Treiber im Format property_1=value_1; property_2=value_2;.... Eine vollständige Liste der Verbindungseigenschaften finden Sie unter Verbindungseigenschaften.
  2. Verbinden Sie Ihre Java-Anwendung mit dem JDBC-Treiber für BigQuery mit der Klasse DriverManager oder DataSource.

    • Stellen Sie eine Verbindung zur Klasse DriverManager her:

      import java.sql.Connection;
      import java.sql.DriverManager;
      
      private static Connection getJdbcConnectionDM(){
        Connection connection = DriverManager.getConnection(CONNECTION_STRING);
        return connection;
      }

      Ersetzen Sie CONNECTION_STRING durch den Verbindungsstring aus dem vorherigen Schritt.

    • Stellen Sie eine Verbindung zur Klasse DataSource her:

      import com.google.cloud.bigquery.jdbc.DataSource;
      import java.sql.Connection;
      import java.sql.SQLException;
      
      private static public Connection getJdbcConnectionDS() throws SQLException {
        Connection connection = null;
        DataSource dataSource = new com.google.cloud.bigquery.jdbc.DataSource();
        dataSource.setURL(CONNECTION_STRING);
        connection = dataSource.getConnection();
        return connection;
      }

      Ersetzen Sie CONNECTION_STRING durch den Verbindungsstring aus dem vorherigen Schritt.

      Die Klasse DataSource enthält auch Setter-Methoden, mit denen Sie Verbindungseigenschaften festlegen können, anstatt sie in den Verbindungsstring aufzunehmen. Hier ein Beispiel:

      private static Connection getConnection() throws SQLException {
        DataSource ds = new DataSource();
        ds.setURL(jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;);
        ds.setAuthType(3);  // Application Default Credentials
        ds.setProjectId("MyTestProject");
        ds.setEnableHighThroughputAPI(true);
        ds.setLogLevel("6");
        ds.setUseQueryCache(false);
        return ds.getConnection();
      }

Verbindungsattribute

JDBC-Treiberverbindungseigenschaften sind Konfigurationsparameter, die Sie in den Verbindungsstring aufnehmen oder über Setter-Methoden übergeben, wenn Sie eine Verbindung zu einer Datenbank herstellen. Die folgenden Verbindungseigenschaften werden vom JDBC-Treiber für BigQuery unterstützt.

Verbindungseigenschaft Beschreibung Standardwert Datentyp Erforderlich
AdditionalProjects Projekte, auf die der Treiber für Abfragen und Metadatenvorgänge zugreifen kann, zusätzlich zum primären Projekt, das durch die ProjectId-Property festgelegt wird. Durch Kommas getrennter String Nein
AllowLargeResults Bestimmt, ob der Treiber Abfrageergebnisse verarbeitet, die größer als 128 MB sind, wenn die Eigenschaft QueryDialect auf BIG_QUERY gesetzt ist. Wenn das Attribut QueryDialect auf SQL gesetzt ist, verarbeitet der Treiber immer große Abfrageergebnisse. TRUE Boolesch Nein
BYOID_AudienceUri Das Attribut „audience“ in einer Konfigurationsdatei für ein externes Konto. Die Eigenschaft „audience“ kann den Ressourcennamen für den Workload Identity-Pool oder Personalpool sowie die Anbieter-ID in diesem Pool enthalten. String Nur bei OAuthType=4
BYOID_CredentialSource Der Tokenabruf und die Umgebungsinformationen. String Nur bei OAuthType=4
BYOID_PoolUserProject Das Nutzerprojekt, wenn ein Workforce-Pool für die Authentifizierung verwendet wird. String Nur bei OAuthType=4 und Verwendung des Personalpools
BYOID_SA_Impersonation_Uri Der URI für die Identitätsübernahme des Dienstkontos, wenn ein Workforce-Pool zur Authentifizierung verwendet wird. String Nur bei OAuthType=4 und Verwendung des Personalpools
BYOID_SubjectTokenType Das Security Token Service-Token, das auf der Token Exchange-Spezifikation basiert. Einer der folgenden:
  • urn:ietf:params:oauth:token-type:jwt
  • urn:ietf:params:oauth:token-type:id_token
  • urn:ietf:params:oauth:token-type:saml2
  • urn:ietf:params:aws:token-type:aws4_request
urn:ietf:params:oauth:tokentype:id_token String Nur bei OAuthType=4
BYOID_TokenUri Der Endpunkt für den Tokenaustausch des Security Token Service. https://sts.googleapis.com/v1/token String Nein
ConnectionPoolSize Die Größe des Verbindungspools, wenn das Verbindungs-Pooling aktiviert ist. 10 Lang Nein
DefaultDataset Das Dataset, das verwendet wird, wenn in einer Abfrage keines angegeben ist. String Nein
EnableHighThroughputAPI Gibt an, ob die Storage Read API verwendet werden kann. Die Attribute HighThroughputActivationRatio und HighThroughputMinTableSize müssen ebenfalls auf TRUE gesetzt sein, damit die Storage Read API verwendet werden kann. FALSE Boolesch Nein
EnableSession Legt fest, ob mit der Verbindung eine Sitzung gestartet wird. Wenn TRUE festgelegt ist, wird die Sitzungs-ID an alle nachfolgenden Anfragen übergeben. FALSE Boolesch Nein
EnableWriteAPI Gibt an, ob die Storage Write API verwendet werden kann. Sie muss auf TRUE gesetzt sein, um Bulk-Einfügungen zu aktivieren. FALSE Boolesch Nein
EndpointOverrides Benutzerdefinierte Endpunkte zum Überschreiben der folgenden Elemente:
  • BIGQUERY=https://bigquery.googleapis.com
  • READ_API=https://bigquerystorage.googleapis.com
  • OAUTH2=https://oauth2.googleapis.com
  • STS=https://sts.googleapis.com
Durch Kommas getrennter String Nein
FilterTablesOnDefaultDataset Bestimmt den Umfang der Metadaten, die von den Methoden DatabaseMetaData.getTables() und DatabaseMetaData.getColumns() zurückgegeben werden. Wenn FALSE festgelegt ist, findet keine Filterung statt. Das Attribut DefaultDataset muss ebenfalls festgelegt werden, damit die Filterung möglich ist. FALSE Boolesch Nein
HighThroughputActivationRatio Der Grenzwert für die Anzahl der Seiten in einer Abfrageantwort. Wenn diese Zahl überschritten wird und die Bedingungen EnableHighThroughputAPI und HighThroughputMinTableSize erfüllt sind, beginnt der Treiber mit der Verwendung der Storage Read API. 2 Ganzzahl Nein
HighThroughputMinTableSize Der Grenzwert für die Anzahl der Zeilen in einer Antwort auf eine Abfrage. Wenn diese Zahl überschritten wird und die Bedingungen EnableHighThroughputAPI und HighThroughputActivationRatio erfüllt sind, beginnt der Treiber mit der Verwendung der Storage Read API. 100 Ganzzahl Nein
JobCreationMode Bestimmt, ob Abfragen mit oder ohne Jobs ausgeführt werden. Ein Wert von 1 bedeutet, dass für jede Abfrage Jobs erstellt werden. Ein Wert von 2 bedeutet, dass Abfragen ohne Jobs ausgeführt werden können. 2 Ganzzahl Nein
JobTimeout Das Zeitlimit für den Job (in Sekunden), nach dem der Job auf dem Server abgebrochen wird. 0 Lang Nein
KMSKeyName Der KMS-Schlüsselname für die Verschlüsselung von Daten. String Nein
Labels Labels, die der Abfrage zugeordnet sind, um Abfragejobs zu organisieren und zu gruppieren. Map<String, String> Nein
LargeResultDataset Das Ziel-Dataset für umfangreiche Abfrageergebnisse, nur wenn das Attribut LargeResultTable festgelegt ist. Wenn Sie diese Eigenschaft festlegen, werden Daten, die geschrieben werden, nicht im Ergebniscache gespeichert. Für jede Abfrage wird eine Abrechnung ausgelöst, auch wenn die Ergebnisse klein sind. _google_jdbc String Nein
LargeResultsDatasetExpirationTime Die Lebensdauer aller Tabellen in einem großen Ergebnis-Dataset in Millisekunden. Diese Property wird ignoriert, wenn für das Dataset bereits eine Standardablaufzeit festgelegt ist. 3600000 Lang Nein
LargeResultTable Die Zieltabelle für umfangreiche Abfrageergebnisse, nur wenn das Attribut LargeResultDataset festgelegt ist. Wenn Sie diese Eigenschaft festlegen, werden Daten nicht in den Ergebniscache geschrieben und jede Abfrage wird in Rechnung gestellt, auch wenn die Ergebnisse klein sind. temp_table... String Nein
ListenerPoolSize Die Größe des Listener-Pools, wenn das Verbindungs-Pooling aktiviert ist. 10 Lang Nein
Location Der Speicherort, an dem Datasets erstellt oder abgefragt werden. BigQuery ermittelt den Standort automatisch, wenn diese Eigenschaft nicht festgelegt ist. String Nein
LogLevel Die Detailgenauigkeit, die vom java.util.logging-Paket bei Datenbankinteraktionen protokolliert wird. Die Protokollierung kann sich auf die Leistung auswirken. Aktivieren Sie sie daher nur vorübergehend, um ein Problem zu erfassen. Einer der folgenden:
  • 0: die Ebene OFF
  • 1: die Ebene SEVERE
  • 2: die Ebene WARNING
  • 3: die Stufe INFO
  • 4: die Stufe CONFIG
  • 5: die Stufe FINE
  • 6: die Stufe FINER
  • 7: die Stufe FINEST
  • 8: die Stufe ALL
0 Ganzzahl Nein
LogPath Das Verzeichnis, in das Logdateien geschrieben werden. String Nein
MaximumBytesBilled Das Limit für die berechneten Byte. Abfragen, bei denen die abgerechneten Byte diese Zahl überschreiten, schlagen fehl, ohne dass eine Gebühr anfällt. 0 Lang Nein
MaxResults Die maximale Anzahl von Ergebnissen pro Seite. 10000 Lang Nein
MetaDataFetchThreadCount Die Anzahl der Threads, die für Datenbankmetadatenmethoden verwendet werden. 32 Ganzzahl Nein
OAuthAccessToken Das Zugriffstoken, das für die Authentifizierung mit einem vorab generierten Zugriffstoken verwendet wird. String Nur bei OAUTH_TYPE=2
OAuthClientId Die Client-ID für die Authentifizierung mit einem vorab generierten Aktualisierungstoken und die Authentifizierung von Nutzerkonten. String Nur bei OAUTH_TYPE=1 oder OAUTH_TYPE=2
OAuthClientSecret Der Clientschlüssel für die Authentifizierung mit einem vorab generierten Aktualisierungstoken und die Authentifizierung von Nutzerkonten. String Nur bei OAUTH_TYPE=1 oder OAUTH_TYPE=2
OAuthP12Password Das Passwort für die PKCS12-Schlüsseldatei. notasecret String Nein
OAuthPvtKey Der Dienstkontoschlüssel bei Verwendung der Dienstkonto-Authentifizierung. Dieser Wert kann ein rohes JSON-Schlüsseldatei-Objekt oder ein Pfad zur JSON-Schlüsseldatei sein. String Nur, wenn OAUTH_TYPE=0 und der OAuthPvtKeyPath-Wert nicht festgelegt sind
OAuthPvtKeyPath Der Pfad zum Dienstkontoschlüssel bei Verwendung der Dienstkonto-Authentifizierung. String Nur, wenn OAUTH_TYPE=0 und die Werte für OAuthPvtKey und OAuthServiceAcctEmail nicht festgelegt sind
OAuthRefreshToken Das Aktualisierungstoken für die Authentifizierung mit einem vorab generierten Aktualisierungstoken. String Nur bei OAUTH_TYPE=2
OAuthServiceAcctEmail Die E-Mail-Adresse des Dienstkontos bei Verwendung der Dienstkonto-Authentifizierung. String Nur, wenn OAUTH_TYPE=0 und der OAuthPvtKeyPath-Wert nicht festgelegt sind
OAuthType Der Authentifizierungstyp. Einer der folgenden:
  • 0: Dienstkonto-Authentifizierung
  • 1: Authentifizierung des Nutzerkontos
  • 2: Vorab generierte Authentifizierung mit Aktualisierungs- oder Zugriffstoken
  • 3: Authentifizierung mit Standardanmeldedaten für Anwendungen
  • 4: andere Authentifizierungsmethoden
-1 Ganzzahl Ja
PartnerToken Ein Token, das von Google Cloud -Partnern verwendet wird, um die Nutzung des Treibers zu erfassen. String Nein
ProjectId Die Standardprojekt-ID für den Treiber. In diesem Projekt werden Abfragen ausgeführt und die Ressourcennutzung wird abgerechnet. Wenn sie nicht festgelegt ist, leitet der Treiber eine Projekt-ID ab. String Nein, aber dringend empfohlen
ProxyHost Der Hostname oder die IP-Adresse eines Proxyservers, über den die JDBC-Verbindung weitergeleitet wird. String Nein
ProxyPort Die Portnummer, die der Proxyserver auf Verbindungen überwacht. String Nein
ProxyPwd Das Passwort für die Authentifizierung bei der Verbindung über einen Proxyserver, der dies erfordert. String Nein
ProxyUid Der Nutzername für die Authentifizierung beim Verbindungsaufbau über einen Proxyserver, der dies erfordert. String Nein
QueryDialect Der SQL-Dialekt für die Ausführung von Abfragen. Verwenden Sie SQL für GoogleSQL (dringend empfohlen) und BIG_QUERY für Legacy-SQL. SQL String Nein
QueryProperties REST-Verbindungsattribute, mit denen das Abfrageverhalten angepasst wird. Map<String, String> Nein
RequestGoogleDriveScope Fügt der Verbindung den schreibgeschützten Drive-Bereich hinzu, wenn er auf 1 festgelegt ist. 0 Ganzzahl Nein
RetryInitialDelay Legt die Verzögerung (in Sekunden) vor dem ersten Wiederholungsversuch fest. 0 Lang Nein
RetryMaxDelay Legt das maximale Limit (in Sekunden) für die Wiederholungsverzögerung fest. 0 Lang Nein
ServiceAccountImpersonationChain Eine durch Kommas getrennte Liste von Dienstkonto-E-Mail-Adressen in der Imitierungskette. String Nein
ServiceAccountImpersonationEmail Die E-Mail-Adresse des Dienstkontos, dessen Identität angenommen werden soll. String Nein
ServiceAccountImpersonationScopes Eine durch Kommas getrennte Liste von OAuth2-Bereichen, die mit dem imitierten Konto verwendet werden sollen. https://www.googleapis.com/auth/bigquery String Nein
ServiceAccountImpersonationTokenLifetime Die Lebensdauer des Tokens für das imitierten Konto in Sekunden. 3600 Ganzzahl Nein
SSLTrustStore Der vollständige Pfad zum Java TrustStore, der vertrauenswürdige Zertifikate der Zertifizierungsstelle enthält. Der Treiber verwendet diesen Truststore, um die Identität des Servers während des SSL/TLS-Handshakes zu validieren. String Nein
SSLTrustStorePwd Das Passwort für den in der Eigenschaft SSLTrustStore angegebenen Java-Truststore. String Nur, wenn der Java-TrustStore passwortgeschützt ist
SWA_ActivationRowCount Der Grenzwert von executeBatch insert Zeilen, bei dessen Überschreitung der Connector zur Storage Write API wechselt. 3 Ganzzahl Nein
SWA_AppendRowCount Die Größe des Schreibstreams. 1000 Ganzzahl Nein
Timeout Die Zeitspanne in Sekunden, die der Connector einen fehlgeschlagenen API-Aufruf wiederholt, bevor das Zeitlimit überschritten wird. 0 Lang Nein
UniverseDomain Die Top-Level-Domain, die den Google Cloud -Ressourcen Ihrer Organisation zugeordnet ist. googleapis.com String Nein
UnsupportedHTAPIFallback Gibt an, ob der Connector auf die REST API zurückgreift (wenn auf TRUE festgelegt) oder einen Fehler zurückgibt (wenn auf FALSE festgelegt). TRUE Boolesch Nein
UseQueryCache Aktiviert das Zwischenspeichern von Abfragen. TRUE Boolesch Nein

Abfragen mit dem Treiber ausführen

Nachdem Ihre Java-Anwendung über den JDBC-Treiber mit BigQuery verbunden ist, können Sie Abfragen in Ihrer Entwicklungsumgebung über den standardmäßigen JDBC-Prozess ausführen. Es gelten alle BigQuery-Kontingente und -Limits.

Datentypzuordnung

Wenn Sie Abfragen über den JDBC-Treiber für BigQuery ausführen, erfolgt die folgende Datentypzuordnung:

GoogleSQL-Typ Java-Typ
ARRAY Array
BIGNUMERIC BigDecimal
BOOL Boolean
BYTES byte[]
DATE Date
DATETIME String
FLOAT64 Double
GEOGRAPHY String
INT64 Long
INTERVAL String
JSON String
NUMERIC BigDecimal
STRING String
STRUCT Struct
TIME Time
TIMESTAMP Timestamp

Beispiele

In den folgenden Abschnitten finden Sie Beispiele für die Verwendung von BigQuery-Funktionen über den JDBC-Treiber für BigQuery.

Positionsparameter

Im folgenden Beispiel wird eine Abfrage mit einem Positionsparameter ausgeführt:

PreparedStatement preparedStatement = connection.prepareStatement(
    "SELECT * FROM MyTestTable where testColumn = ?");
preparedStatement.setString(1, "string2");
ResultSet resultSet = statement.executeQuery(selectQuery);

Verschachtelte und wiederkehrende Datensätze

Im folgenden Beispiel wird der Basisdatensatz von Struct-Daten abgefragt:

ResultSet resultSet = statement.executeQuery("SELECT STRUCT(\"Adam\" as name, 5 as age)");
    resultSet.next();
    Struct obj = (Struct) resultSet.getObject(1);
    System.out.println(obj.toString());

Der Treiber gibt den Basisdatensatz als Strukturobjekt oder als Stringdarstellung eines JSON-Objekts zurück. Das Ergebnis sieht etwa so aus:

{
  "v": {
    "f": [
      {
        "v": "Adam"
      },
      {
        "v": "5"
      }
    ]
  }
}

Im folgenden Beispiel werden die untergeordneten Komponenten eines Struct-Objekts abgefragt:

ResultSet resultSet = statement.executeQuery("SELECT STRUCT(\"Adam\" as name, 5 as age)");
    resultSet.next();
    Struct structObject = (Struct) resultSet.getObject(1);
    Object[] structComponents = structObject.getAttributes();
    for (Object component : structComponents){
      System.out.println(component.toString());
    }

Im folgenden Beispiel wird ein Standardarray mit wiederholten Daten abgefragt und das Ergebnis überprüft:

// Execute Query
ResultSet resultSet = statement.executeQuery("SELECT [1,2,3]");
resultSet.next();
Object[] arrayObject = (Object[]) resultSet.getArray(1).getArray();

// Verify Result
int count =0;
for (; count < arrayObject.length; count++) {
  System.out.println(arrayObject[count]);
}

Im folgenden Beispiel wird ein Struct-Array mit wiederholten Daten abgefragt und das Ergebnis überprüft:

// Execute Query
ResultSet resultSet = statement.executeQuery("SELECT "
    + "[STRUCT(\"Adam\" as name, 12 as age), "
    + "STRUCT(\"Lily\" as name, 17 as age)]");

Struct[] arrayObject = (Struct[]) resultSet.getArray(1).getArray();

// Verify Result
for (int count =0; count < arrayObject.length; count++) {
  System.out.println(arrayObject[count]);
}

Bulk-Insert

Im folgenden Beispiel wird ein Bulk-Insert-Vorgang mit der Methode executeBatch ausgeführt.

Connection conn = DriverManager.getConnection(connectionUrl);
PreparedStatement statement = null;
Statement st = conn.createStatement();
final String insertQuery = String.format(
        "INSERT INTO `%s.%s.%s` "
      + " (StringField, IntegerField, BooleanField) VALUES(?, ?, ?);",
        DEFAULT_CATALOG, DATASET, TABLE_NAME);

statement = conn.prepareStatement(insertQuery1);

for (int i=0; i<2000; ++i) {
      statement.setString(1, i+"StringField");
      statement.setInt(2, i);
      statement.setBoolean(3, true);
      statement.addBatch();
}

statement.executeBatch();

Preise

Sie können den JDBC-Treiber für BigQuery kostenlos herunterladen und benötigen keine zusätzlichen Lizenzen für die Verwendung der Treiber. Wenn Sie den Treiber verwenden, gelten jedoch die BigQuery-Standardpreise.

Nächste Schritte