BigQuery용 JDBC 드라이버 사용
BigQuery용 Java 데이터베이스 연결 (JDBC) 드라이버는 Java 애플리케이션을 BigQuery에 연결하여 원하는 도구 및 인프라로 BigQuery 기능을 사용할 수 있도록 지원합니다. Java가 아닌 애플리케이션을 BigQuery에 연결하려면 BigQuery용 Simba Open Database Connectivity (ODBC) 드라이버를 사용하세요.
제한사항
BigQuery용 JDBC 드라이버에는 다음과 같은 제한사항이 적용됩니다.
- 이 드라이버는 BigQuery에만 해당하며 다른 제품 또는 서비스에는 사용할 수 없습니다.
INTERVAL데이터 유형은 BigQuery Storage Read API에서 지원되지 않습니다.- 모든 데이터 조작 언어 (DML) 제한사항이 적용됩니다.
시작하기 전에
- JDBC 드라이버, Apache Maven,
java.sql패키지에 익숙해야 합니다. - 시스템이 Java 런타임 환경 (JRE) 8.0 이상으로 구성되어 있는지 확인합니다. JRE 버전 확인에 관한 자세한 내용은 JRE 환경 확인을 참고하세요.
BigQuery에 인증하고 나중에 BigQuery용 JDBC 드라이버와 연결을 설정할 때 사용되는 다음 정보를 기록해 둡니다. 사용하는 인증 방법에 해당하는 정보만 기록하면 됩니다.
인증 방법 인증 정보 예시 연결 속성 (나중에 설정) 표준 서비스 계정 서비스 계정 이메일 bq-jdbc-sa@mytestproject.iam.gserviceaccount.comOAuthServiceAcctEmail서비스 계정 키 (JSON 객체) my-sa-keyOAuthPvtKey서비스 계정 키 파일 서비스 계정 키 파일 (전체 경로) path/to/file/secret.jsonOAuthPvtKeyPathGoogle 사용자 계정 클라이언트 ID 123-abc.apps.googleusercontent.comOAuthClientId클라이언트 보안 비밀번호 _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecret사전 생성된 액세스 토큰 액세스 토큰 ya29.a0AfH6SMCiH1L-x_yZOAuthAccessToken사전 생성된 갱신 토큰 갱신 토큰 1/fFAGRNJru1FTz70BzhT3ZgOAuthRefreshToken클라이언트 ID 123-abc.apps.googleusercontent.comOAuthClientId클라이언트 보안 비밀번호 _aB-C1D_E2fGh3Ij4kL5m6No7p8QR9sT0uVOAuthClientSecret애플리케이션 기본 사용자 인증 정보 없음 해당 사항 없음 해당 사항 없음 구성 파일 구성 파일 (JSON 객체 또는 전체 경로) path/to/file/secret.jsonOAuthPvtKey외부 계정 구성 객체 계정 구성 객체 external_account_configuration_objectOAuthPvtKey기타 외부 계정 구성 파일의 잠재고객 속성 //iam.googleapis.com/projects/my-project/locations/US-EAST1/workloadIdentityPools/my-pool-/providers/my-providerBYOID_AudienceUri토큰 가져오기 및 환경 정보 파일 {\"file\":\"/path/to/file\"}BYOID_CredentialSource사용자 프로젝트 (직원 풀을 사용하는 경우에만) my_projectBYOID_PoolUserProject서비스 계정 가장 URI (인력 풀을 사용하는 경우에만 해당) my-saBYOID_SA_Impersonation_Uri토큰 교환 사양에 기반한 보안 토큰 서비스 토큰 urn:ietf:params:oauth:tokentype:id_tokenBYOID_SubjectTokenType보안 토큰 서비스 토큰 교환 엔드포인트 https://sts.googleapis.com/v1/tokenBYOID_TokenUri
개발 환경 구성
BigQuery용 JDBC 드라이버를 사용하여 개발 환경을 구성하려면 다음 단계를 따르세요.
다음 JDBC 패키지 중 하나를 다운로드합니다.
- Uber JAR 모든 종속 항목이 포함된 JAR 파일
- 음영 처리된 Uber JAR 모든 종속 항목이 포함된 음영 처리된 JAR 파일
- 종속 항목이 있는 씬 JAR 씬 JAR 파일과 모든 종속 항목이 포함된 zip 파일입니다.
Java 컴파일러와 런타임이 필요한 JDBC 클래스를 찾을 수 있도록 다운로드한 JAR 파일을 클래스 경로에 추가합니다. 클래스 경로에 파일을 추가하는 방법에 대한 자세한 내용은 클래스 경로 설정을 참고하세요.
빌드 파일에 다음 종속 항목을 추가합니다.
<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>
Gradle 프로젝트를 사용하는 경우 빌드 파일에 다음을 추가합니다.
dependencies { // ... other dependencies implementation files('path/to/file/google-jdbc-jar-with-dependencies.jar') }
연결 설정
BigQuery용 JDBC 드라이버를 사용하여 Java 애플리케이션과 BigQuery 간의 연결을 설정하려면 다음 단계를 따르세요.
BigQuery용 JDBC 드라이버의 연결 문자열을 확인합니다. 이 문자열은 Java 애플리케이션과 BigQuery 간의 연결을 설정하는 데 필요한 모든 정보를 캡처합니다. 연결 문자열의 형식은 다음과 같습니다.
jdbc:bigquery://HOST:PORT;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS
다음을 바꿉니다.
HOST: 서버의 DNS 또는 IP 주소입니다.PORT: TCP 포트 번호입니다.PROJECT_ID: BigQuery 프로젝트의 ID입니다.AUTH_TYPE: 사용한 인증 유형을 지정하는 숫자입니다. 다음 필드 중 하나는 사용해야 합니다.0: 서비스 계정 인증 (표준 및 키 파일)1: Google 사용자 계정 인증2: 사전 생성된 갱신 또는 액세스 토큰 인증3: 애플리케이션 기본 사용자 인증 정보 인증4: 기타 인증 방법
AUTH_PROPS: BigQuery에 인증할 때 기록한 인증 정보입니다.property_1=value_1; property_2=value_2;...형식으로 나열됩니다. 예를 들어 서비스 계정 키 파일로 인증한 경우OAuthPvtKeyPath=path/to/file/secret.json입니다.OTHER_PROPS(선택사항): JDBC 드라이버의 추가 연결 속성으로,property_1=value_1; property_2=value_2;...형식으로 나열됩니다. 연결 속성의 전체 목록은 연결 속성을 참고하세요.
DriverManager또는DataSource클래스를 사용하여 Java 애플리케이션을 BigQuery용 JDBC 드라이버에 연결합니다.DriverManager클래스와 연결합니다.import java.sql.Connection; import java.sql.DriverManager; private static Connection getJdbcConnectionDM(){ Connection connection = DriverManager.getConnection(CONNECTION_STRING); return connection; }
CONNECTION_STRING를 이전 단계의 연결 문자열로 바꿉니다.DataSource클래스와 연결합니다.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; }
CONNECTION_STRING를 이전 단계의 연결 문자열로 바꿉니다.DataSource클래스에는 연결 문자열에 포함하는 대신 연결 속성을 설정하는 데 사용할 수 있는 setter 메서드도 있습니다. 다음은 그 예시입니다.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(); }
연결 속성
JDBC 드라이버 연결 속성은 데이터베이스에 연결을 설정할 때 연결 문자열에 포함하거나 setter 메서드를 통해 전달하는 구성 매개변수입니다. 다음 연결 속성은 BigQuery용 JDBC 드라이버에서 지원됩니다.
| 연결 속성 | 설명 | 기본값 | 데이터 유형 | 필수 |
|---|---|---|---|---|
AdditionalProjects |
드라이버가 쿼리 및 메타데이터 작업을 위해 액세스할 수 있는 프로젝트입니다. ProjectId 속성으로 설정된 기본 프로젝트 외에 추가로 액세스할 수 있습니다.
|
해당 사항 없음 | 쉼표로 구분된 문자열 | 아니요 |
AllowLargeResults |
QueryDialect 속성이 BIG_QUERY로 설정된 경우 드라이버가 128MB보다 큰 쿼리 결과를 처리하는지 여부를 결정합니다. QueryDialect 속성이 SQL로 설정된 경우 드라이버는 항상 대규모 쿼리 결과를 처리합니다.
|
TRUE |
불리언 | 아니요 |
BYOID_AudienceUri |
외부 계정 구성 파일의 잠재고객 속성입니다. audience 속성은 워크로드 아이덴티티 풀 또는 직원 풀의 리소스 이름과 해당 풀의 공급자 식별자를 포함할 수 있습니다. | 해당 사항 없음 | 문자열 | OAuthType=4인 경우에만 |
BYOID_CredentialSource |
토큰 검색 및 환경 정보입니다. | 해당 사항 없음 | 문자열 | OAuthType=4인 경우에만 |
BYOID_PoolUserProject |
직원 풀이 인증에 사용되는 경우의 사용자 프로젝트입니다. | 해당 사항 없음 | 문자열 | OAuthType=4를 사용하고 직원 풀을 사용하는 경우에만 |
BYOID_SA_Impersonation_Uri |
인증에 워크포스 풀이 사용되는 경우 서비스 계정 명의 도용의 URI입니다. | 해당 사항 없음 | 문자열 | OAuthType=4를 사용하고 직원 풀을 사용하는 경우에만 |
BYOID_SubjectTokenType |
토큰 교환 사양에 기반한 보안 토큰 서비스 토큰입니다.
다음 중 하나입니다.
|
urn:ietf:params:oauth:tokentype:id_token |
문자열 | OAuthType=4인 경우에만 |
BYOID_TokenUri |
보안 토큰 서비스 토큰 교환 엔드포인트입니다. | https://sts.googleapis.com/v1/token |
문자열 | 아니요 |
ConnectionPoolSize |
연결 풀링이 사용 설정된 경우 연결 풀 크기입니다. | 10 |
길이 | 아니요 |
DefaultDataset |
쿼리에 지정되지 않은 경우 사용되는 데이터 세트입니다. | 해당 사항 없음 | 문자열 | 아니요 |
EnableHighThroughputAPI |
Storage Read API를 사용할 수 있는지 확인합니다. Storage Read API를 사용하려면 HighThroughputActivationRatio 및 HighThroughputMinTableSize 속성도 TRUE로 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
EnableSession |
연결이 세션을 시작하는지 여부를 결정합니다. TRUE로 설정된 경우 세션 ID가 모든 후속 쿼리에 전달됩니다.
|
FALSE |
불리언 | 아니요 |
EnableWriteAPI |
Storage Write API를 사용할 수 있는지 확인합니다. 일괄 삽입을 사용 설정하려면 TRUE로 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
EndpointOverrides |
다음을 덮어쓰는 맞춤 엔드포인트:
|
해당 사항 없음 | 쉼표로 구분된 문자열 | 아니요 |
FilterTablesOnDefaultDataset |
DatabaseMetaData.getTables() 및 DatabaseMetaData.getColumns() 메서드에서 반환되는 메타데이터의 범위를 결정합니다. FALSE로 설정하면 필터링이 발생하지 않습니다. 필터링을 사용 설정하려면 DefaultDataset 속성도 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
HighThroughputActivationRatio |
쿼리 응답의 페이지 수에 대한 기준입니다. 이 수를 초과하고 EnableHighThroughputAPI 및 HighThroughputMinTableSize 조건이 충족되면 드라이버가 Storage Read API를 사용하기 시작합니다.
|
2 |
정수 | 아니요 |
HighThroughputMinTableSize |
쿼리 응답의 행 수에 대한 기준입니다. 이 숫자를 초과하고 EnableHighThroughputAPI 및 HighThroughputActivationRatio 조건이 충족되면 드라이버가 Storage Read API를 사용하기 시작합니다.
|
100 |
정수 | 아니요 |
JobCreationMode |
작업을 사용하거나 사용하지 않고 쿼리를 실행할지 여부를 결정합니다. 1 값은 모든 쿼리에 대해 작업이 생성됨을 의미하고 2 값은 작업 없이 쿼리를 실행할 수 있음을 의미합니다.
|
2 |
정수 | 아니요 |
JobTimeout |
서버에서 작업이 취소되는 작업 제한 시간 (초)입니다. | 0 |
길이 | 아니요 |
KMSKeyName |
데이터 암호화를 위한 KMS 키 이름입니다. | 해당 사항 없음 | 문자열 | 아니요 |
Labels |
쿼리 작업을 정리하고 그룹화하기 위해 쿼리와 연결된 라벨입니다. | 해당 사항 없음 | Map<String, String> | 아니요 |
LargeResultDataset |
LargeResultTable 속성이 설정된 경우에만 크기가 큰 쿼리 결과의 대상 데이터 세트입니다. 이 속성을 설정하면 데이터 쓰기가 결과 캐시를 우회하고 결과가 작더라도 각 쿼리에 대한 청구가 트리거됩니다.
|
_google_jdbc |
문자열 | 아니요 |
LargeResultsDatasetExpirationTime |
대규모 결과 데이터 세트의 모든 테이블의 수명(밀리초)입니다. 데이터 세트에 이미 기본 만료 시간이 설정되어 있으면 이 속성은 무시됩니다. | 3600000 |
길이 | 아니요 |
LargeResultTable |
LargeResultDataset 속성이 설정된 경우에만 크기가 큰 쿼리 결과의 대상 테이블입니다. 이 속성을 설정하면 데이터 쓰기가 결과 캐시를 우회하고 결과가 작더라도 각 쿼리에 대한 청구가 트리거됩니다.
|
temp_table... |
문자열 | 아니요 |
ListenerPoolSize |
연결 풀링이 사용 설정된 경우 리스너 풀 크기입니다. | 10 |
길이 | 아니요 |
Location |
데이터 세트가 생성되거나 쿼리되는 위치입니다. 이 속성이 설정되지 않은 경우 BigQuery는 위치를 자동으로 결정합니다. | 해당 사항 없음 | 문자열 | 아니요 |
LogLevel |
데이터베이스 상호작용 중에 java.util.logging 패키지에서 로깅하는 세부정보 수준입니다. 로깅은 성능에 영향을 미칠 수 있으므로 문제를 포착하기 위해 일시적으로만 사용 설정하세요. 다음 중 하나입니다.
|
0 |
정수 | 아니요 |
LogPath |
로그 파일이 기록되는 디렉터리입니다. | 해당 사항 없음 | 문자열 | 아니요 |
MaximumBytesBilled |
청구되는 바이트의 한도입니다. 청구되는 바이트가 이 숫자를 초과하는 쿼리는 요금이 청구되지 않고 실패합니다. | 0 |
길이 | 아니요 |
MaxResults |
페이지당 최대 결과 수입니다. | 10000 |
길이 | 아니요 |
MetaDataFetchThreadCount |
데이터베이스 메타데이터 메서드에 사용되는 스레드 수입니다. | 32 |
정수 | 아니요 |
OAuthAccessToken |
사전 생성된 액세스 토큰 인증에 사용되는 액세스 토큰입니다. | 해당 사항 없음 | 문자열 | OAUTH_TYPE=2인 경우에만 |
OAuthClientId |
사전 생성된 갱신 토큰 인증 및 사용자 계정 인증의 클라이언트 ID입니다. | 해당 사항 없음 | 문자열 | OAUTH_TYPE=1 또는 OAUTH_TYPE=2인 경우에만 |
OAuthClientSecret |
사전 생성된 갱신 토큰 인증 및 사용자 계정 인증을 위한 클라이언트 보안 비밀번호입니다. | 해당 사항 없음 | 문자열 | OAUTH_TYPE=1 또는 OAUTH_TYPE=2인 경우에만 |
OAuthP12Password |
PKCS12 키 파일의 비밀번호입니다. | notasecret |
문자열 | 아니요 |
OAuthPvtKey |
서비스 계정 인증을 사용할 때의 서비스 계정 키입니다. 이 값은 원시 JSON 키 파일 객체 또는 JSON 키 파일의 경로일 수 있습니다. | 해당 사항 없음 | 문자열 |
OAUTH_TYPE=0 및 OAuthPvtKeyPath 값이 설정되지 않은 경우에만
|
OAuthPvtKeyPath |
서비스 계정 인증을 사용하는 경우 서비스 계정 키의 경로입니다. | 해당 사항 없음 | 문자열 |
OAUTH_TYPE=0 및 OAuthPvtKey, OAuthServiceAcctEmail 값이 설정되지 않은 경우에만
|
OAuthRefreshToken |
사전 생성된 갱신 토큰 인증을 위한 갱신 토큰입니다. | 해당 사항 없음 | 문자열 |
OAUTH_TYPE=2인 경우에만
|
OAuthServiceAcctEmail |
서비스 계정 인증을 사용할 때의 서비스 계정 이메일입니다. | 해당 사항 없음 | 문자열 |
OAUTH_TYPE=0 및 OAuthPvtKeyPath 값이 설정되지 않은 경우에만
|
OAuthType |
인증 유형입니다. 다음 중 하나입니다.
|
-1 |
정수 | 예 |
PartnerToken |
Google Cloud 파트너가 드라이버 사용을 추적하는 데 사용하는 토큰입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ProjectId |
드라이버의 기본 프로젝트 ID입니다. 이 프로젝트는 쿼리를 실행하는 데 사용되며 리소스 사용량에 따라 요금이 청구됩니다. 설정되지 않은 경우 드라이버가 프로젝트 ID를 추론합니다. | 해당 사항 없음 | 문자열 | 아니요, 그러나 적극 권장됩니다. |
ProxyHost |
JDBC 연결이 라우팅되는 프록시 서버의 호스트 이름 또는 IP 주소입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ProxyPort |
프록시 서버가 연결을 수신 대기하는 포트 번호입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ProxyPwd |
프록시 서버를 통해 연결할 때 인증에 필요한 비밀번호입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ProxyUid |
프록시 서버를 통해 연결할 때 인증에 필요한 사용자 이름입니다. | 해당 사항 없음 | 문자열 | 아니요 |
QueryDialect |
쿼리 실행을 위한 SQL 언어입니다. GoogleSQL (적극 권장)에는 SQL를 사용하고 기존 SQL에는 BIG_QUERY를 사용합니다.
|
SQL |
문자열 | 아니요 |
QueryProperties |
REST 연결 속성을 사용하여 쿼리 동작을 맞춤설정할 수 있습니다. | 해당 사항 없음 | Map<String, String> | 아니요 |
RequestGoogleDriveScope |
1로 설정된 경우 연결에 읽기 전용 Drive 범위를 추가합니다.
|
0 |
정수 | 아니요 |
RetryInitialDelay |
첫 번째 재시도 전 지연 시간 (초)을 설정합니다. | 0 |
길이 | 아니요 |
RetryMaxDelay |
재시도 지연의 최대 한도 (초)를 설정합니다. | 0 |
길이 | 아니요 |
ServiceAccountImpersonationChain |
가장 체인에 있는 서비스 계정 이메일의 쉼표로 구분된 목록입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ServiceAccountImpersonationEmail |
가장할 서비스 계정 이메일입니다. | 해당 사항 없음 | 문자열 | 아니요 |
ServiceAccountImpersonationScopes |
가장된 계정과 함께 사용할 OAuth2 범위의 쉼표로 구분된 목록입니다. | https://www.googleapis.com/auth/bigquery |
문자열 | 아니요 |
ServiceAccountImpersonationTokenLifetime |
가장된 계정 토큰 수명 (초)입니다. | 3600 |
정수 | 아니요 |
SSLTrustStore |
신뢰할 수 있는 인증 기관 (CA) 인증서가 포함된 Java 트러스트 저장소의 전체 경로입니다. 드라이버는 이 트러스트 저장소를 활용하여 SSL/TLS 핸드셰이크 중에 서버의 ID를 검증합니다. | 해당 사항 없음 | 문자열 | 아니요 |
SSLTrustStorePwd |
SSLTrustStore 속성에 지정된 Java TrustStore의 비밀번호입니다.
|
해당 사항 없음 | 문자열 | Java TrustStore가 비밀번호로 보호된 경우에만 |
SWA_ActivationRowCount |
이 값을 초과하면 커넥터가 Storage Write API로 전환되는 executeBatch insert 행의 기준입니다.
|
3 |
정수 | 아니요 |
SWA_AppendRowCount |
쓰기 스트림의 크기입니다. | 1000 |
정수 | 아니요 |
Timeout |
커넥터가 제한 시간 초과 전에 실패한 API 호출을 재시도하는 시간(초)입니다. | 0 |
길이 | 아니요 |
UniverseDomain |
조직의 Google Cloud 리소스와 연결된 최상위 도메인입니다. | googleapis.com |
문자열 | 아니요 |
UnsupportedHTAPIFallback |
커넥터가 REST API로 대체되는지 (TRUE로 설정된 경우) 또는 오류를 반환하는지 (FALSE로 설정된 경우)를 결정합니다.
|
TRUE |
불리언 | 아니요 |
UseQueryCache |
쿼리 캐싱을 사용 설정합니다. | TRUE |
불리언 | 아니요 |
드라이버로 쿼리 실행
JDBC 드라이버를 통해 BigQuery에 연결된 Java 애플리케이션을 사용하면 이제 표준 JDBC 프로세스를 통해 개발 환경에서 쿼리를 실행할 수 있습니다. 모든 BigQuery 할당량 및 한도가 적용됩니다.
데이터 유형 매핑
BigQuery용 JDBC 드라이버를 통해 쿼리를 실행하면 다음 데이터 유형 매핑이 발생합니다.
| GoogleSQL 유형 | Java 유형 |
|---|---|
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 |
예시
다음 섹션에서는 BigQuery용 JDBC 드라이버를 통해 BigQuery 기능을 사용하는 예를 제공합니다.
위치 매개변수
다음 예에서는 위치 매개변수를 사용하여 쿼리를 실행합니다.
PreparedStatement preparedStatement = connection.prepareStatement( "SELECT * FROM MyTestTable where testColumn = ?"); preparedStatement.setString(1, "string2"); ResultSet resultSet = statement.executeQuery(selectQuery);
중첩되고 반복되는 레코드
다음 예에서는 Struct 데이터의 기본 레코드를 쿼리합니다.
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());
드라이버는 기본 레코드를 구조체 객체 또는 JSON 객체의 문자열 표현으로 반환합니다. 결과는 다음과 비슷합니다.
{
"v": {
"f": [
{
"v": "Adam"
},
{
"v": "5"
}
]
}
}다음 예에서는 Struct 객체의 하위 구성요소를 쿼리합니다.
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()); }
다음 예에서는 반복 데이터의 표준 배열을 쿼리한 후 결과를 확인합니다.
// 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]); }
다음 예에서는 반복 데이터의 Struct 배열을 쿼리한 다음 결과를 확인합니다.
// 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]); }
일괄 삽입
다음 예에서는 executeBatch 메서드를 사용하여 대량 삽입 작업을 실행합니다.
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();
가격 책정
BigQuery용 JDBC 드라이버는 무료로 다운로드할 수 있으며 드라이버를 사용하는 데 추가 라이선스가 필요하지 않습니다. 하지만 드라이버를 사용하는 경우 표준 BigQuery 가격 책정이 적용됩니다.
다음 단계
- BigQuery용 Simba ODBC 드라이버에 대해 자세히 알아보세요.
- 다른 BigQuery 개발자 도구를 살펴보세요.