BigQuery용 JDBC 드라이버 사용
BigQuery용 Java 데이터베이스 연결 (JDBC) 드라이버는 Java 애플리케이션을 BigQuery에 연결하여 원하는 도구 및 인프라로 BigQuery 기능을 사용할 수 있도록 지원합니다. Java가 아닌 애플리케이션을 BigQuery에 연결하려면 BigQuery용 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.OAuthServiceAcctEmail서비스 계정 키 (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
JDBC 드라이버 설치 및 구성
uber-JAR 파일을 직접 다운로드하거나 Maven을 사용하여 BigQuery용 JDBC 드라이버를 설치하고 구성할 수 있습니다.
직접 다운로드 구성
직접 다운로드를 통해 JDBC 드라이버를 구성하려면 다음 단계를 따르세요.
- 드라이버 1.1.0 버전을 다운로드합니다.
- 다운로드한 파일을 소프트웨어에서 지정한 위치에 복사합니다.
기능 변경사항 및 워크플로 업데이트에 대한 자세한 내용은 변경 로그를 참고하세요.
Maven 구성
BigQuery용 JDBC 드라이버는 Maven Central에서 확인할 수 있습니다.
JDBC 드라이버로 개발 환경을 구성하려면 드라이버를 프로젝트의 종속 항목으로 추가하세요.
Maven
pom.xml 파일에 다음 종속 항목을 추가합니다.
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>1.1.0</version> </dependency>
uber-JAR을 사용하는 Maven
pom.xml 파일에 다음 종속 항목을 추가합니다.
<dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-bigquery-jdbc</artifactId> <version>1.1.0</version> <classifier>all</classifier> <exclusions> <exclusion> <groupId>*</groupId> <artifactId>*</artifactId> </exclusion> </exclusions> </dependency>
Gradle
build.gradle 파일에 다음을 추가합니다.
dependencies { // ... other dependencies implementation("com.google.cloud:google-cloud-bigquery-jdbc:1.1.0") }
연결 설정
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 |
쿼리에 지정되지 않은 경우 사용되는 데이터 세트입니다. | 해당 사항 없음 | 문자열 | 아니요 |
EnableGcpLogExporter |
맞춤 또는 전역 OpenTelemetry 인스턴스가 사용되지 않는 경우 드라이버가 로그를 Cloud Logging으로 자동 내보내는지 여부를 결정합니다. 자세한 내용은 OpenTelemetry를 참고하세요. | FALSE |
불리언 | 아니요 |
EnableGcpTraceExporter |
드라이버가 Cloud Trace로 트레이스를 자동으로 내보내는지 여부를 결정합니다(맞춤 또는 전역 OpenTelemetry 인스턴스를 사용하지 않는 경우). 자세한 내용은 OpenTelemetry를 참고하세요. | FALSE |
불리언 | 아니요 |
EnableHighThroughputAPI |
Storage Read API를 사용할 수 있는지 확인합니다. Storage Read API를 사용하려면 HighThroughputActivationRatio 및 HighThroughputMinTableSize 속성도 TRUE로 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
EnableProjectDiscovery |
데이터베이스 메타데이터 메서드가 액세스 가능한 모든 Google Cloud 프로젝트에서 데이터 세트를 검색하는지 여부를 결정합니다. FALSE로 설정하면 검색이 기본 ProjectId로 제한됩니다.
|
FALSE |
불리언 | 아니요 |
EnableSession |
연결이 세션을 시작하는지 여부를 결정합니다. TRUE로 설정된 경우 세션 ID가 모든 후속 쿼리에 전달됩니다.
|
FALSE |
불리언 | 아니요 |
EnableWriteAPI |
Storage Write API (gRPC)를 사용할 수 있는지 확인합니다. 일괄 삽입을 사용 설정하려면 TRUE로 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
EndpointOverrides |
다음을 덮어쓰는 맞춤 엔드포인트:
|
해당 사항 없음 | 쉼표로 구분된 문자열 | 아니요 |
FilterTablesOnDefaultDataset |
DatabaseMetaData.getTables() 및 DatabaseMetaData.getColumns() 메서드에서 반환되는 메타데이터의 범위를 결정합니다. FALSE로 설정하면 필터링이 발생하지 않습니다. 필터링을 사용 설정하려면 DefaultDataset 속성도 설정해야 합니다.
|
FALSE |
불리언 | 아니요 |
GcpTelemetryCredentials |
원격 분석 내보내기를 인증하는 데 사용되는 사용자 인증 정보입니다. 서비스 계정 JSON 키 또는 원시 JSON 문자열의 경로를 허용합니다. 설정하지 않으면 연결 사용자 인증 정보가 기본값입니다. 자세한 내용은 OpenTelemetry를 참고하세요. | 해당 사항 없음 | 문자열 | 아니요 |
GcpTelemetryProjectId |
원격 분석의 대상 Google Cloud 프로젝트 ID입니다. 기본값은 기본 ProjectId입니다. 자세한 내용은 OpenTelemetry를 참고하세요.
|
해당 사항 없음 | 문자열 | 아니요 |
HighThroughputActivationRatio |
쿼리 응답의 페이지 수에 대한 기준입니다. 이 수를 초과하고 EnableHighThroughputAPI 및 HighThroughputMinTableSize 조건이 충족되면 드라이버가 스토리지 읽기 API를 사용하기 시작합니다.
|
2 |
정수 | 아니요 |
HighThroughputMinTableSize |
쿼리 응답의 행 수에 대한 기준입니다. 이 숫자를 초과하고 EnableHighThroughputAPI 및 HighThroughputActivationRatio 조건이 충족되면 드라이버가 Storage Read API를 사용하기 시작합니다.
|
10000 |
정수 | 아니요 |
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 |
드라이버가 로깅하는 세부정보 수준입니다. 자세한 내용은 로깅을 참고하세요. | 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을 사용하고 legacy 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를 검증합니다. | 해당 사항 없음 | 문자열 | 아니요 |
SSLTrustStoreProvider |
SSLTrustStore 속성에 사용되는 Java 암호화 확장 프로그램 (JCE) 제공자입니다.
|
해당 사항 없음 | 문자열 | 아니요 |
SSLTrustStorePwd |
SSLTrustStore 속성에 지정된 Java TrustStore의 비밀번호입니다.
|
해당 사항 없음 | 문자열 | Java TrustStore가 비밀번호로 보호된 경우에만 |
SSLTrustStoreType |
SSLTrustStore 속성에 지정된 트러스트 저장소 파일의 형식입니다 (예: JKS, PKCS12, ROTKS).
|
해당 사항 없음 | 문자열 | 아니요 |
SWA_ActivationRowCount |
executeBatch insert 행의 임계값입니다. 이 값을 초과하면 커넥터가 Storage Write API (gRPC)로 전환됩니다.
|
3 |
정수 | 아니요 |
SWA_AppendRowCount |
쓰기 스트림의 크기입니다. | 1000 |
정수 | 아니요 |
Timeout |
커넥터가 실패한 API 호출을 다시 시도하는 시간(초)입니다. | 0 |
길이 | 아니요 |
UniverseDomain |
조직의 Google Cloud 리소스와 연결된 최상위 도메인입니다. | googleapis.com |
문자열 | 아니요 |
UnsupportedHTAPIFallback |
커넥터가 REST API로 대체되는지 (TRUE로 설정된 경우) 또는 오류를 반환하는지 (FALSE로 설정된 경우)를 결정합니다.
|
TRUE |
불리언 | 아니요 |
UseGlobalOpenTelemetry |
드라이버가 계측에 GlobalOpenTelemetry.get()를 사용하는지 확인합니다. 자세한 내용은 OpenTelemetry를 참고하세요.
|
FALSE |
불리언 | 아니요 |
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 드라이버 문제를 해결하려면 연결 속성 또는 환경 변수를 설정하여 로깅을 사용 설정하면 됩니다. 로깅은 성능에 영향을 미치고 디스크 공간을 차지할 수 있으므로 문제를 포착하기 위해 일시적으로만 사용 설정하세요.
로그 수준
LogLevel 속성은 java.util.logging 패키지에서 로깅하는 세부정보 수준을 결정합니다.
0:OFF(기본값)1:SEVERE2:WARNING3:INFO4:CONFIG5:FINE6:FINER7:FINEST8:ALL
일반적인 문제 해결에는 레벨 6을 사용하는 것이 좋습니다. 7단계와 8단계는 ResultSet 작업으로 제한되며 많은 양의 로그를 생성합니다.
연결 문자열에서 로깅 사용 설정
연결 문자열에서 로깅을 사용 설정하려면 LogLevel 및 LogPath 연결 속성을 추가합니다. 예를 들면 다음과 같습니다.
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=MyTestProject;OAuthType=3;LogLevel=6;LogPath=/tmp/jdbc-logs;
환경 변수로 로깅 사용 설정
개발 도구에서 연결 문자열 수정이 허용되지 않는 경우 애플리케이션을 실행하기 전에 다음 환경 변수를 사용하여 로그 수준과 로그 경로를 설정할 수도 있습니다.
BIGQUERY_JDBC_LOG_LEVEL: 로그 수준 (0~8)입니다.BIGQUERY_JDBC_LOG_PATH: 로그 파일의 디렉터리입니다.
예를 들어 Linux 또는 macOS 환경에서 다음을 실행합니다.
export BIGQUERY_JDBC_LOG_LEVEL=6
export BIGQUERY_JDBC_LOG_PATH=/tmp/jdbc-logs
OpenTelemetry
BigQuery용 JDBC 드라이버는 OpenTelemetry (OTel)를 지원하여 분산 추적 및 로깅을 제공하므로 데이터베이스 상호작용의 성능을 모니터링하고 문제를 효과적으로 해결할 수 있습니다.
추적된 작업
OpenTelemetry가 사용 설정되면 드라이버는 다음 작업에 대한 스팬을 생성합니다.
- 쿼리 실행:
BigQueryStatement(execute(),executeQuery(),executeLargeUpdate(),executeBatch()) 및BigQueryPreparedStatement(execute(),executeQuery(),executeLargeUpdate())에 스팬이 생성됩니다. - 메타데이터 작업: 특정
DatabaseMetaData메서드 (getCatalogs(),getSchemas(),getTables(),getColumns())에 대해 스팬이 생성됩니다. - 페이지로 나누기: REST API 경로를 사용하는 경우 결과의 추가 페이지에 대한 비동기 가져오기가 추적되고 OpenTelemetry 스팬 링크를 사용하여 원래 쿼리 실행 스팬에 인과적으로 연결됩니다. 이러한 작업에 대해
BigQueryStatement.pagination라는 스팬이 생성됩니다. - 컨텍스트 전파: JDBC 드라이버는 활성 컨텍스트를 기본
google-cloud-bigquerySDK에 전파합니다. 따라서 SDK에서 생성된 스팬 (예: HTTP RPC 호출)이 JDBC 스팬의 하위 요소로 자동 표시되어 완전한 엔드 투 엔드 추적 계층 구조를 제공합니다.
구성 모드
애플리케이션의 아키텍처와 요구사항에 따라 다음 모드 중 하나를 사용하여 JDBC 드라이버에서 OpenTelemetry를 구성할 수 있습니다.
애플리케이션 관리 원격 분석
애플리케이션에서 이미 OpenTelemetry를 사용하는 경우 OpenTelemetry 인스턴스를 JDBC 드라이버에 삽입하여 드라이버의 원격 분석이 애플리케이션의 원격 분석과 상관관계가 있는지 확인할 수 있습니다.
이렇게 하려면 BigQueryDataSource API를 사용하세요.
BigQueryDataSource dataSource = new BigQueryDataSource();
// ... set other properties ...
dataSource.setCustomOpenTelemetry(yourOpenTelemetryInstance);
글로벌 OpenTelemetry 지원
애플리케이션에서 전역으로 OpenTelemetry를 초기화한 경우 (예: OpenTelemetry Java 에이전트를 사용하거나 GlobalOpenTelemetry.set() 함수를 호출하여) 이 전역 인스턴스를 사용하도록 드라이버를 구성할 수 있습니다.
전역 인스턴스를 사용 설정하려면 UseGlobalOpenTelemetry 연결 속성을 TRUE로 설정합니다.
구성 Google Cloud 이 필요 없는 원격 분석
Google Cloud 에서 실행 중이고 빠른 설정을 원하는 경우 Google Cloud 관측 가능성 (Trace 및 Logging)으로 트레이스 및 로그의 자동 내보내기를 사용 설정하면 됩니다.
이 내보내기를 사용 설정하려면 JDBC URL에서 다음 연결 속성을 설정하세요.
EnableGcpTraceExporter=trueEnableGcpLogExporter=true
다음은 연결 URL의 예입니다.
jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId=your-project-id;EnableGcpTraceExporter=true;EnableGcpLogExporter=true;
OpenTelemetry 연결 속성
OpenTelemetry에서는 다음 연결 속성이 지원됩니다. 자세한 설명과 기본값은 연결 속성을 참고하세요.
EnableGcpLogExporterEnableGcpTraceExporterGcpTelemetryCredentialsGcpTelemetryProjectIdUseGlobalOpenTelemetry
중요 고려사항
OpenTelemetry 통합을 배포할 때는 로깅 동작, 인증, 가격 책정과 관련하여 다음 고려사항에 유의하세요.
LogLevel과의 상호작용
기존 LogLevel 연결 속성은 로깅의 기본 게이트키퍼 역할을 합니다.
LogLevel=0(OFF)가 설정되면 로그 레코드가 생성되지 않습니다. 따라서EnableGcpLogExporter=true인 경우에도 OpenTelemetry를 사용하거나 Logging으로 내보내지는 로그가 없습니다.- OTel 로깅을 사용 설정하려면
LogLevel이 0보다 큰 값(예: 상세 로그의 경우5)으로 설정되어 있는지 확인합니다.
원격 분석 인증
자동Google Cloud 대체가 적용된 원격 분석 내보내기 (추적 및 로깅 모두)는 애플리케이션 기본 사용자 인증 정보(ADC)와 GcpTelemetryCredentials를 사용하여 제공된 명시적 서비스 계정 사용자 인증 정보를 모두 지원합니다.
GcpTelemetryProjectId 또는 GcpTelemetryCredentials가 제공되면 로그와 트레이스가 모두 동일한 구성된 사용자 인증 정보를 사용하여 동일한 지정된 대상 프로젝트로 전송됩니다.
필수 API 및 IAM 권한
Google Cloud 모니터링 가능성에 원격 분석 데이터를 성공적으로 쓰려면 타겟 Google Cloud 프로젝트에서 다음 설정을 실행하세요.
- API 사용 설정:
- Cloud Trace API (
cloudtrace.googleapis.com)를 사용 설정합니다. - Cloud Logging API (
logging.googleapis.com)를 사용 설정합니다.
- Cloud Trace API (
- IAM 역할 부여:
- 트레이스 내보내기: 주 구성원 또는 서비스 계정에 Trace 에이전트 (
roles/cloudtrace.agent) 역할을 부여합니다. - 로그 내보내기: 주 구성원 또는 서비스 계정에 로그 작성자 (
roles/logging.logWriter) 역할을 부여합니다.
- 트레이스 내보내기: 주 구성원 또는 서비스 계정에 Trace 에이전트 (
가격 책정 및 결제
구성 제로 Google Cloud 원격 분석(EnableGcpTraceExporter=true 또는 EnableGcpLogExporter=true)을 사용하면 원격 분석 데이터가 Trace 및 Logging으로 전송됩니다. 이러한 서비스는 수집된 데이터의 양에 따라 요금이 청구될 수 있습니다. 자세한 내용은 Google Cloud Observability를 참고하세요.
측정항목
이 통합은 OpenTelemetry 측정항목을 지원하지 않습니다.
종속 항목 셰이딩
애플리케이션과의 클래스 경로 충돌을 방지하기 위해 드라이버는 OpenTelemetry SDK 및 내보내기 도구 종속 항목을 셰이딩합니다. OpenTelemetry API는 애플리케이션 제공 SDK와의 상호 운용성을 허용하기 위해 셰이딩되지 않은 상태로 유지됩니다.
로깅 및 추적 상관관계
OpenTelemetry를 사용 설정하면 드라이버가 로그를 트레이스와 자동으로 상호 연관시킵니다.
db.connection_id: 모든 JDBC 스팬에 스팬 속성으로 연결됩니다.jdbc.connection_id: baggage 키로 사용되며 드라이버가 Logging에 내보낸 모든 로그 항목에 라벨로 연결됩니다.- 추적 ID 및 스팬 ID: 쿼리 실행 범위 내에서 생성된 로그에는 활성
trace_id및span_id이 자동으로 포함됩니다.
가격 책정
BigQuery용 JDBC 드라이버는 무료로 다운로드할 수 있습니다. 하지만 드라이버를 사용하는 경우 표준 BigQuery 가격 책정이 적용됩니다.
다음 단계
- BigQuery용 ODBC 드라이버에 대해 자세히 알아보세요.
- 다른 BigQuery 개발자 도구를 살펴봅니다.