BigQuery용 ODBC 드라이버 사용

BigQuery용 Open Database Connectivity (ODBC) 드라이버는 Java가 아닌 애플리케이션을 BigQuery에 연결하여 원하는 도구 및 인프라로 BigQuery 기능을 사용할 수 있도록 지원합니다. Java 애플리케이션을 BigQuery에 연결하려면 BigQuery용 JDBC 드라이버를 사용하세요.

BigQuery용 ODBC 드라이버는 Apache 2.0 라이선스에 따라 제공됩니다.

시작하기 전에

  1. ODBC 드라이버 및 드라이버 관리자를 숙지해야 합니다.

  2. 운영체제가 다음 요구사항을 충족하는지 확인합니다.

    운영체제 지원되는 아키텍처 최소 버전 및 종속 항목
    Windows 32비트 (x86), 64비트 (x64) 버전: Windows 10, Windows Server 2016 이상

    종속 항목: Microsoft Visual C++ 재배포 가능 패키지(Visual Studio 2019 또는 2022용)
    macOS 64비트 (x86_64), ARM64 (Apple Silicon) 버전: macOS 12 (Monterey) 이상

    종속 항목: ODBC 드라이버 관리자 (예: unixODBC) 설치 디렉터리를 DYLD_LIBRARY_PATH에 추가해야 합니다.
    Linux 64비트 (x86_64) 버전: glibc 2.27 이상이 있는 배포판 (예: Ubuntu 20.04 LTS+, Debian 11+)

    종속 항목: ODBC 드라이버 관리자 (예: unixODBC) 설치 디렉터리를 LD_LIBRARY_PATH에 추가해야 합니다.
  3. BigQuery에 인증하고 나중에 BigQuery용 ODBC 드라이버와 연결을 설정할 때 사용되는 다음 정보를 기록해 둡니다. 사용하는 인증 방법에 해당하는 정보만 기록하면 됩니다.

    인증 방법 인증 정보 예시 연결 속성 (나중에 설정)
    표준 서비스 계정 서비스 계정 키 (JSON 객체) my-sa-key KeyFilePath
    워크로드 아이덴티티 제휴 또는 직원 ID 제휴 외부 계정 구성 파일의 잠재고객 속성 //iam.googleapis.com/locations/global/... BYOID_AudienceUrl
    토큰 가져오기 및 환경 정보 파일 {"file":"/path/to/file"} BYOID_CredentialSource
    사용자 프로젝트 (직원 풀만 해당) my_project BYOID_PoolUserProject
    STS 토큰 유형 id_token BYOID_SubjectTokenType
    STS 토큰 교환 엔드포인트 https://sts.googleapis.com/v1/token BYOID_TokenUrl
    애플리케이션 기본 사용자 인증 정보 없음 해당 사항 없음 해당 사항 없음

ODBC 드라이버 설치 및 구성

Windows 또는 비 Windows 운영체제를 사용하여 BigQuery용 ODBC 드라이버를 설치하고 구성할 수 있습니다.

Windows

  1. 애플리케이션의 아키텍처에 해당하는 드라이버를 설치합니다.

  2. 다음과 같이 데이터 소스 이름 (DSN)을 만듭니다.

    1. Windows 시작 메뉴에서 ODBC 데이터 소스로 이동하여 클라이언트 애플리케이션과 비트 수가 동일한 버전을 선택합니다.
    2. ODBC 데이터 소스 관리자 페이지에서 드라이버 탭을 클릭합니다.
    3. 설치된 ODBC 드라이버 목록에서 BigQuery용 ODBC 드라이버를 찾습니다.
    4. 시스템 DSN 탭을 선택하여 모든 사용자의 DSN을 만들거나 사용자 DSN 탭을 선택하여 현재 사용자의 DSN을 만듭니다. 일반적으로 일부 애플리케이션은 다른 사용자 계정을 사용하여 데이터를 로드하고 다른 사용자 DSN을 감지하지 못할 수 있으므로 시스템 DSN이 권장됩니다.
    5. 추가를 클릭합니다.
    6. 새 데이터 소스 만들기 대화상자에서 BigQuery용 ODBC 드라이버를 선택한 다음 완료를 클릭합니다. BigQuery용 ODBC 드라이버 DSN 설정 대화상자가 열립니다.
    7. 데이터 소스 이름 필드에 DSN 이름을 입력합니다.
    8. 연결 속성을 추가합니다. 속성의 전체 목록은 연결 속성을 참고하세요.

Windows 이외

  1. 운영체제에 해당하는 드라이버를 설치합니다.

  2. 다운로드한 ZIP 또는 TAR 파일의 콘텐츠를 추출합니다.

  3. ZIP 또는 TAR 파일의 콘텐츠를 커넥터를 설치할 디렉터리로 이동합니다. BigQuery용 ODBC 드라이버 공유 객체 경로는 INSTALL_DIR/lib/libgoogle_cloud_odbc_bq_driver.so이며, 여기서 INSTALL_DIR은 설치 디렉터리입니다.

  4. 커넥터의 새 경로를 반영하도록 .ini 파일을 업데이트합니다.

    다음 예시에서는 Linux 시스템의 .ini 파일을 업데이트합니다.

    unzip linux_odbc-driver.VERSION.zip -d linux_odbc-driver.VERSION/
    cd ./linux_odbc-driver.VERSION
    export INSTALL_DIR=$(pwd)
    export ODBCINI=$INSTALL_DIR/odbc.ini
    export ODBCINSTINI=$INSTALL_DIR/odbcinst.ini
    export GOOGLEBIGQUERYODBCINI=$INSTALL_DIR/googlebigqueryodbc.ini

    VERSION을 드라이버 버전으로 바꿉니다.

연결 설정

BigQuery용 ODBC 드라이버를 사용하여 애플리케이션과 BigQuery 간의 연결을 설정하려면 연결 문자열을 식별하세요. DSN을 통해 연결 속성을 이미 구성한 경우 이 단계를 건너뛸 수 있습니다.

연결 문자열의 형식은 다음과 같습니다.

Driver=ODBC Driver for BigQuery;ProjectId=PROJECT_ID;OAuthType=AUTH_TYPE;AUTH_PROPS;OTHER_PROPS

다음을 바꿉니다.

  • PROJECT_ID: BigQuery 프로젝트의 ID입니다.
  • AUTH_TYPE: 사용한 인증 유형을 지정하는 숫자입니다. 다음 중 하나를 선택합니다.
    • 0: 서비스 계정 인증
    • 3: 애플리케이션 기본 사용자 인증 정보 인증
    • 4: 워크로드 아이덴티티 제휴 또는 직원 ID 제휴 인증
  • AUTH_PROPS: BigQuery에 인증할 때 기록한 인증 정보입니다. property_1=value_1; property_2=value_2;... 형식으로 나열됩니다. 예를 들어 서비스 계정으로 인증한 경우 KeyFilePath=my-sa-key입니다.
  • OTHER_PROPS (선택사항): property_1=value_1; property_2=value_2;... 형식으로 나열된 ODBC 드라이버의 추가 연결 속성입니다. 연결 속성의 전체 목록은 연결 속성을 참고하세요.

연결 속성

ODBC 드라이버 연결 속성은 데이터베이스에 연결을 설정할 때 연결 문자열에 포함하는 구성 매개변수입니다. BigQuery용 ODBC 드라이버는 다음 연결 속성을 지원합니다.

연결 속성 설명 기본값 데이터 유형 필수
AdditionalProjects 드라이버가 쿼리 및 메타데이터 작업을 위해 액세스할 수 있는 프로젝트입니다. ProjectId 속성으로 설정된 기본 프로젝트 외에 추가로 액세스할 수 있습니다. 해당 사항 없음 쉼표로 구분된 문자열 아니요
AllowHtapiForLargeResults 드라이버가 BigQuery Storage Read API를 사용할 수 있는지 여부를 확인합니다. 0 불리언 아니요
AllowLargeResults QueryDialect 속성이 BIG_QUERY로 설정된 경우 드라이버가 128MB보다 큰 쿼리 결과를 처리하는지 여부를 결정합니다. QueryDialect 속성이 SQL로 설정된 경우 드라이버는 항상 대규모 쿼리 결과를 처리합니다. 0 불리언 아니요
BYOID_AudienceUrl 워크로드 아이덴티티 풀 또는 직원 풀의 리소스 이름과 해당 풀의 제공업체 식별자를 포함합니다. 해당 사항 없음 문자열 OAuthMechanism=4인 경우에만
BYOID_CredentialSource 토큰 자체를 가져오는 데 필요한 정보와 일부 환경 정보를 설정합니다. 해당 사항 없음 문자열 OAuthMechanism=4인 경우에만
BYOID_PoolUserProject 워크로드 아이덴티티 풀이 아닌 직원 풀인 경우 프로젝트를 설정합니다. 해당 사항 없음 문자열 OAuthMechanism=4를 사용하고 직원 풀을 사용하는 경우에만
BYOID_SubjectTokenType Oauth2.0 토큰 교환 사양에 따라 STS 토큰 유형을 설정합니다. 예상 값은 다음과 같습니다.
  • 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
해당 사항 없음 문자열 OAuthMechanism=4인 경우에만
BYOID_TokenUrl STS 토큰 교환 엔드포인트를 설정합니다. https://sts.googleapis.com/v1/token 문자열 아니요
DefaultDataset 데이터 세트를 명시적으로 지정하지 않고 쿼리를 실행할 때 드라이버가 자동으로 참조하는 프로젝트 내의 지정된 데이터 세트 역할을 합니다. 해당 사항 없음 문자열 아니요
FilterTablesOnDefaultDataset 표 또는 열 메타데이터 메서드가 반환하는 메타데이터의 범위를 결정합니다. false인 경우 필터링이 발생하지 않습니다. 필터링을 사용 설정하려면 DefaultDataset 속성도 설정해야 합니다. FALSE 불리언 아니요
EnableSession 연결이 세션을 시작하는지 여부를 결정합니다. 사용 설정하면 해당 연결에서 실행되는 첫 번째 쿼리가 세션을 시작하고 드라이버가 후속 쿼리에 세션 ID를 전달합니다. 0 불리언 아니요
JobCreationMode 지연 시간이 짧은 쿼리 경로를 사용 설정할 수 있습니다. 다음 중 하나를 선택합니다.
  • 1: 드라이버가 모든 쿼리에 대해 작업을 생성합니다 (JOB_CREATION_REQUIRED).
  • 2: 드라이버가 작업 (JOB_CREATION_OPTIONAL) 없이 쿼리를 실행합니다.
2 정수 아니요
KeyFilePath 서비스 계정 인증을 사용하는 경우 서비스 계정 키의 경로입니다. 해당 사항 없음 문자열 OAuthMechanism=0인 경우에만
KMSKeyName 데이터를 암호화하고 복호화할 때 사용할 KMS 키의 이름을 지정합니다. 해당 사항 없음 문자열 아니요
LargeResultsDataSetId 크기가 큰 쿼리 결과를 저장할 대상 데이터 세트를 지정합니다. 해당 사항 없음 문자열 아니요
LargeResultsDatasetExpirationTime 대규모 결과 데이터 세트의 모든 테이블의 수명을 밀리초 단위로 지정합니다. 3600000 길이 아니요
Location 드라이버가 데이터 세트를 만들거나 쿼리하는 위치를 지정합니다. 해당 사항 없음 문자열 아니요
LogLevel 상호작용 중에 드라이버가 로깅하는 세부정보를 제한합니다. 다음 중 하나를 선택합니다.
  • 0: OFF
  • 1: ERROR
  • 2: WARNING
  • 3: INFO
0 정수 아니요
LogPath 드라이버가 로그 파일을 쓰는 디렉터리를 지정합니다. 해당 사항 없음 문자열 아니요
LogFileCount 보관할 최대 로그 파일 수를 지정합니다. 0 정수 아니요
LogFileSize 각 로그 파일의 최대 크기를 바이트 단위로 지정합니다. 0 길이 아니요
MaxResults BigQuery API 결과의 페이지당 결과 수를 지정합니다. 10000 길이 아니요
MaxThreads 커넥터가 스레드 풀에서 동시 처리에 사용할 수 있는 최대 스레드 수를 정의합니다. 이 속성을 비 Windows 커넥터의 커넥터 전체 설정으로 구성하려면 googlebigqueryodbc.ini 파일에 지정하세요. 8 정수 아니요
OAuthMechanism 인증 유형입니다. 다음 중 하나를 선택합니다.
  • 0: 서비스 계정 인증
  • 3: 애플리케이션 기본 사용자 인증 정보 인증
  • 4: 워크로드 아이덴티티 제휴 또는 직원 ID 제휴 인증
해당 사항 없음 정수
ProjectId 드라이버의 기본 프로젝트 ID입니다. 드라이버는 이 프로젝트를 사용하여 쿼리를 실행하고 리소스 사용량에 대해 청구합니다. 해당 사항 없음 문자열
ProxyHost 프록시 서버의 호스트 이름 또는 IP 주소입니다. 해당 사항 없음 문자열 아니요
ProxyPort 프록시 서버가 수신 대기하는 포트 번호입니다. 해당 사항 없음 문자열 아니요
ProxyPwd 프록시 서버를 통해 연결할 때 인증에 사용되는 비밀번호입니다. 해당 사항 없음 문자열 아니요
ProxyUid 프록시 서버를 통해 연결할 때 인증에 사용되는 사용자 이름입니다. 해당 사항 없음 문자열 아니요
PrivateServiceConnectUris 기본 엔드포인트를 덮어쓰는 맞춤 엔드포인트입니다. 예시:
  • BIGQUERY=https://bigquery.us-east4.rep.googleapis.com/
  • READ_API=bigquerystorage.us-east4.rep.googleapis.com
  • OAUTH2=oauth2.us-east4.rep.googleapis.com
해당 사항 없음 쉼표로 구분된 문자열 아니요
QueryDialect 사용할 쿼리 언어를 지정합니다. GoogleSQL (권장)에는 SQL을 사용하고 legacy SQL에는 BIG_QUERY을 사용합니다. SQL 문자열 아니요
QueryProperties 쿼리 동작을 수정할 수 있는 속성을 구성합니다. 해당 사항 없음 Map<String, String> 아니요
UniverseDomain 조직의 유니버스 도메인을 지정합니다. googleapis.com 문자열 아니요
UseQueryCache BigQuery에서 쿼리 캐싱 기능을 사용 설정합니다. true 불리언 아니요

데이터 유형 매핑

BigQuery용 ODBC 드라이버를 통해 쿼리를 실행하면 다음 데이터 유형 매핑이 발생합니다.

GoogleSQL 유형 ODBC SQL 유형
INT64SQL_BIGINT
BOOLSQL_BIT
DATESQL_TYPE_DATE
FLOAT64SQL_DOUBLE
TIMESQL_TYPE_TIME
TIMESTAMPSQL_TYPE_TIMESTAMP
DATETIMESQL_TYPE_TIMESTAMP
BYTESSQL_VARBINARY
STRINGSQL_VARCHAR
ARRAYSQL_VARCHAR
STRUCTSQL_VARCHAR
INTERVALSQL_VARCHAR
JSONSQL_VARCHAR
GEOGRAPHYSQL_VARCHAR
RANGESQL_VARCHAR
NUMERICSQL_NUMERIC
BIGNUMERICSQL_NUMERIC

예시

다음 예에서는 ODBC 드라이버를 사용하여 매개변수화된 쿼리와 다중 문 스크립트를 사용하는 방법을 보여줍니다.

매개변수화된 쿼리

// 1. Prepare statement
std::string insert_stmt = "INSERT INTO MyTable VALUES (?, ?, ?)";
status = SQLPrepare(hstmt, (SQLCHAR*)insert_stmt.c_str(), SQL_NTS);

// 2. Bind parameters
std::string str_val = "example_string";
long long int_val = 12345;
double float_val = 1.2345;

// Bind string field
status = SQLBindParameter(
    hstmt, 1, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_VARCHAR, 50, 0,
    (SQLPOINTER)str_val.c_str(), str_val.size(), NULL);

// Bind integer field
status = SQLBindParameter(
    hstmt, 2, SQL_PARAM_INPUT, SQL_C_UBIGINT, SQL_BIGINT, 0, 0,
    &int_val, 0, NULL);

// Bind float field
status = SQLBindParameter(
    hstmt, 3, SQL_PARAM_INPUT, SQL_C_DOUBLE, SQL_DOUBLE, 0, 0,
    &float_val, 0, NULL);

// 3. Execute statement
status = SQLExecute(hstmt);

멀티 문 스크립트

// 1. Prepare and execute the multi-statement script
std::string query =
    "CREATE OR REPLACE TABLE MyTable (StringField STRING, IntegerField INTEGER); "
    "INSERT INTO MyTable VALUES ('example', 123); "
    "SELECT * FROM MyTable;";

status = SQLExecDirect(hstmt, (SQLCHAR*)query.c_str(), SQL_NTS);

// 2. Process results for each statement using SQLMoreResults
do {
    SQLSMALLINT num_cols;
    status = SQLNumResultCols(hstmt, &num_cols);

    if (num_cols > 0) {
        // This is a result-returning statement (e.g., SELECT)
        while (SQLFetch(hstmt) == SQL_SUCCESS) {
            // Process rows...
        }
    } else {
        // This is a non-result statement (e.g., CREATE, INSERT)
        SQLLEN row_count;
        SQLRowCount(hstmt, &row_count);
        // Process affected rows...
    }
} while (SQLMoreResults(hstmt) == SQL_SUCCESS);

가격 책정

BigQuery용 ODBC 드라이버는 무료로 다운로드할 수 있습니다. 하지만 드라이버를 사용하는 경우 표준 BigQuery 분석 가격 책정이 적용됩니다.

다음 단계