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:
- Der Treiber ist spezifisch für BigQuery und kann nicht mit anderen Produkten oder Diensten verwendet werden.
- Der Datentyp
INTERVALwird von der BigQuery Storage Read API nicht unterstützt. - Es gelten alle Einschränkungen für die Datenbearbeitungssprache (DML).
Hinweise
- Sie sollten mit JDBC-Treibern, Apache Maven und dem
java.sql-Paket vertraut sein. - 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.
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.comOAuthServiceAcctEmailDienstkontoschlüssel (JSON-Objekt) my-sa-keyOAuthPvtKeyDienstkontoschlüsseldatei Dienstkontoschlüsseldatei (vollständiger Pfad) path/to/file/secret.jsonOAuthPvtKeyPathGoogle-Nutzerkonto Client-ID 123-abc.apps.googleusercontent.comOAuthClientIdClientschlüssel _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretVorab generiertes Zugriffstoken Zugriffstoken ya29.a0AfH6SMCiH1L-x_yZOAuthAccessTokenVorab generiertes Aktualisierungstoken Aktualisierungstoken 1/fFAGRNJru1FTz70BzhT3ZgOAuthRefreshTokenClient-ID 123-abc.apps.googleusercontent.comOAuthClientIdClientschlüssel _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecretStandardanmeldedaten für Anwendungen Keine – – Konfigurationsdatei Konfigurationsdatei (JSON-Objekt oder vollständiger Pfad) path/to/file/secret.jsonOAuthPvtKeyKonfigurationsobjekt für externes Konto Konfigurationsobjekt für das Konto external_account_configuration_objectOAuthPvtKeySonstiges Zielgruppen-Property der Konfigurationsdatei für externe Konten //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-providerBYOID_AudienceUriAbrufen von Tokens und Datei mit Umgebungsinformationen {\"file\":\"/path/to/file\"}BYOID_CredentialSourceNutzerprojekt (nur bei Verwendung eines Workforce-Pools) my_projectBYOID_PoolUserProjectURI für die Identitätsübernahme des Dienstkontos (nur bei Verwendung eines Mitarbeiteridentitätspools) my-saBYOID_SA_Impersonation_UriSecurity Token Service-Token basierend auf der Token Exchange-Spezifikation urn:ietf:params:oauth:tokentype:id_tokenBYOID_SubjectTokenTypeSecurity Token Service-Endpunkt für den Tokenaustausch https://sts.googleapis.com/v1/tokenBYOID_TokenUri
Entwicklungsumgebung konfigurieren
So konfigurieren Sie Ihre Entwicklungsumgebung mit dem JDBC-Treiber für BigQuery:
Laden Sie eines der folgenden JDBC-Pakete herunter:
- Uber-JAR: Eine JAR-Datei mit allen Abhängigkeiten.
- Shading-Uber-JAR-Datei Eine Shading-JAR-Datei mit allen Abhängigkeiten.
- Schlanke JAR-Datei mit Abhängigkeiten: Eine ZIP-Datei, die eine schlanke JAR-Datei und alle Abhängigkeiten enthält.
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.
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>
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:
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-Nutzerkonten2: für die Authentifizierung mit einem vorab generierten Aktualisierungs- oder Zugriffstoken3: für die Authentifizierung mit Standardanmeldedaten für Anwendungen4: für andere Authentifizierungsmethoden
AUTH_PROPS: die Authentifizierungsinformationen, die Sie beim Authentifizieren bei BigQuery notiert haben, im Formatproperty_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 Formatproperty_1=value_1; property_2=value_2;.... Eine vollständige Liste der Verbindungseigenschaften finden Sie unter Verbindungseigenschaften.
Verbinden Sie Ihre Java-Anwendung mit dem JDBC-Treiber für BigQuery mit der Klasse
DriverManageroderDataSource.Stellen Sie eine Verbindung zur Klasse
DriverManagerher:import java.sql.Connection; import java.sql.DriverManager; private static Connection getJdbcConnectionDM(){ Connection connection = DriverManager.getConnection(CONNECTION_STRING); return connection; }
Ersetzen Sie
CONNECTION_STRINGdurch den Verbindungsstring aus dem vorherigen Schritt.Stellen Sie eine Verbindung zur Klasse
DataSourceher: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_STRINGdurch den Verbindungsstring aus dem vorherigen Schritt.Die Klasse
DataSourceenthä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: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:
|
– | 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 |
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:
|
-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.