Oracle 페더레이션 쿼리 실행

데이터 분석가는 데이터를 복사하거나 이동하지 않고도 BigQuery에서 직접 Oracle에 있는 관계형 데이터를 실시간으로 쿼리할 수 있습니다.

BigQuery Oracle 제휴는 BigQuery Connection API를 사용하여 Oracle 데이터베이스 엔진에 연결합니다. 그런 다음 EXTERNAL_QUERY 함수를 사용하여 SQL 쿼리를 Oracle에 직접 전송하여 실행하고 결과를 직접 다시 스트리밍할 수 있습니다.

제한사항

Oracle 페더레이션 쿼리에는 다음과 같은 제한사항이 적용됩니다.

  • EXTERNAL_QUERY 함수를 통해서는 읽기 전용 쿼리만 실행할 수 있습니다. 데이터 정의 언어(DDL) 및 데이터 조작 언어(DML) 문은 지원되지 않습니다.
  • 제휴는 EXTERNAL_QUERY 함수를 통해서만 액세스할 수 있습니다. Oracle 테이블에 직접 매핑되는 BigQuery 외부 테이블 또는 영구 데이터 세트를 만드는 것은 지원되지 않습니다.
  • 페더레이션 쿼리 지연 시간은 Oracle에서 직접 쿼리를 실행하는 것보다 훨씬 더 길 수 있습니다.
  • 기본 연결 서비스는 비활성 연결을 최대 절전 모드로 전환할 수 있습니다. 비활성 기간 후 Oracle 연결을 사용하는 첫 번째 쿼리는 커넥터가 초기화되는 동안 실행하는 데 1분 이상 걸릴 수 있습니다.
  • DNS 피어링은 지원되지 않습니다. VPC 네트워크 내에서 IP 주소 또는 완전히 확인 가능한 호스트 이름을 사용하여 연결해야 합니다.
  • Oracle SQL 쿼리는 함수 결과 또는 표현식이 포함된 모든 열에 대해 명시적인 열 별칭을 지정해야 합니다(예: SELECT COUNT(*) AS total_count). 별칭이 지정되지 않은 표현식은 BigQuery 테이블 스키마 정의에서 유효하지 않은 특수문자가 포함된 열 이름을 생성합니다.
  • 쿼리 프로젝트에서 Compute Engine API 사용이 VPC 서비스 제어에 의해 제한되면 연결에서 네트워크 연결을 사용하는 경우 페더레이션 쿼리가 실패합니다. 적절한 VPC 서비스 제어 인그레스 및 이그레스 규칙이 구성되어 있는지 확인합니다.
  • Oracle에는 추가 SQL 푸시다운이 지원되지 않습니다. 외부 BigQuery 쿼리의 필터 및 집계는 EXTERNAL_QUERY 함수 내의 내부 쿼리로 푸시다운되지 않습니다. 네트워크를 통해 전송되는 행과 열을 제한하려면 내부 Oracle SQL 문 내에 조건자 및 열 프로젝션을 직접 지정해야 합니다.

  • Oracle 데이터베이스 사용자 이름 및 비밀번호 인증만 지원됩니다. 서드 파티 ID 공급업체, Kerberos, RADIUS, Oracle Cloud Infrastructure(OCI) IAM 인증은 지원되지 않습니다.

  • 사용자 정의 유형(UDT), 공간 유형(SDO_GEOMETRY), 컬렉션 유형(VARRAY, 중첩 테이블), SYS.ANYDATA, REF, BFILE, 바이너리 JSON(OSON) 열과 같은 복잡하거나 독점적인 Oracle 유형은 지원되지 않습니다. 바이너리 JSON 열을 쿼리하려면 쿼리에서 텍스트로 직렬화합니다(예: JSON_SERIALIZE(column_name) 또는 JSON_QUERY 사용).

  • 제약 조건이 없는 NUMBER 열과 계산된 숫자 표현식은 BigQuery STRING에 매핑되어 잘림이나 오버플로 없이 전체 정밀도를 유지합니다. 제약 조건이 있는 NUMBER(p, s) 열은 NUMERIC(정밀도가 38 이하이고 소수 자릿수가 9 이하인 경우) 또는 BIGNUMERIC(소수 자릿수가 9보다 크거나 정수 자릿수가 29보다 큰 경우)에 매핑됩니다.

  • 고정 길이 CHAR(n) 및 NCHAR(n) 열은 BigQuery STRING에 매핑될 때 최대 길이 n까지 후행 공백 패딩을 유지합니다.

  • 1582년 10월 15일 이전의 날짜 및 타임스탬프는 역사적인 그레고리력 전환으로 인해 10일의 달력 이동이 발생할 수 있습니다. 1582년 이전의 정확한 과거 날짜를 보존하려면 EXTERNAL_QUERY 문에서 VARCHAR2로 변환합니다.

지원되는 Oracle 환경 및 버전

쿼리 통합은 다음 배포 환경에서 Oracle 데이터베이스를 지원합니다.

  • Oracle Database@Google Cloud
  • Oracle Exadata Database Service
  • Cloud VPN, Cloud Interconnect 또는 인터넷을 통한 공개 IP를 통해 Google Cloud 에 연결된 온프레미스 Oracle 인스턴스

쿼리 통합은 다음 Oracle 버전을 지원합니다.

  • Oracle Database 23.x (23ai)
  • Oracle Database 21.x
  • Oracle Database 19.x (19c)

시작하기 전에

BigQuery 관리자가 Oracle 연결을 만들고 사용자와 공유했는지 확인합니다.

필요한 역할

Oracle을 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 BigQuery 연결 사용자(roles/bigquery.connectionUser) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.

커스텀 역할이나 다른 사전 정의된 역할을 통해 필요한 권한을 얻을 수도 있습니다.

데이터 쿼리

GoogleSQL 쿼리에서 Oracle로 페더레이션 쿼리를 보내려면 EXTERNAL_QUERY 함수를 사용합니다.

다음 예시는 mydataset.customers라는 BigQuery의 고객 레코드를 Oracle 데이터베이스의 실시간 주문 레코드와 조인하는 페더레이션 쿼리입니다.

SELECT
  bq_cust.customer_id,
  bq_cust.customer_name,
  oracle_orders.order_id,
  oracle_orders.order_status,
  oracle_orders.order_total
FROM
  mydataset.customers AS bq_cust
JOIN
  EXTERNAL_QUERY(
    'projects/my-project/locations/us-central1/connections/oracle_prod_conn',
    '''SELECT customer_id, order_id, order_status, order_total
       FROM orders
       WHERE order_date >= SYSDATE - 1''') AS oracle_orders
  ON bq_cust.customer_id = oracle_orders.customer_id;

Oracle 테이블 스키마 보기

EXTERNAL_QUERY를 통해 Oracle 데이터 사전 뷰를 쿼리하여 분석을 실행하기 전에 데이터베이스 메타데이터를 검사하고, 테이블을 검색하고, 열 스키마를 검토할 수 있습니다.

액세스 가능한 모든 테이블 나열

SELECT *
FROM EXTERNAL_QUERY(
  'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID',
  '''SELECT owner, table_name, tablespace_name, status
     FROM all_tables
     ORDER BY owner, table_name''');

테이블의 열 및 데이터 유형 보기

SELECT *
FROM EXTERNAL_QUERY(
  'projects/PROJECT_ID/locations/LOCATION/connections/CONNECTION_ID',
  '''SELECT column_name, data_type, data_length, data_precision, data_scale, nullable
     FROM all_tab_columns
     WHERE owner = 'SCHEMA_NAME' AND table_name = 'TABLE_NAME'
     ORDER BY column_id''');

데이터 유형 매핑

페더레이션 쿼리를 실행하면 BigQuery는 다음 표에 따라 Oracle의 데이터를 GoogleSQL 데이터 유형으로 변환합니다.

Oracle 데이터 유형 BigQuery 데이터 유형
숫자 유형
NUMBER(p, s) (p ≤ 38, s ≤ 9) NUMERIC
NUMBER(p, s)(s > 9 또는 p > 38) BIGNUMERIC
NUMBER(제한 없는 배율 또는 부동 배율) STRING
FLOAT, FLOAT(p) FLOAT64
BINARY_FLOAT FLOAT64
BINARY_DOUBLE FLOAT64
문자 및 문자열 유형
CHAR(n) STRING
NCHAR(n) STRING
VARCHAR2(n) STRING
NVARCHAR2(n) STRING
CLOB STRING
NCLOB STRING
LONG STRING
바이너리 유형
RAW(n) BYTES
BLOB BYTES
LONG RAW BYTES
날짜, 시간, 간격 유형
DATE DATETIME
TIMESTAMP, TIMESTAMP(p) DATETIME
TIMESTAMP WITH TIME ZONE TIMESTAMP
TIMESTAMP WITH LOCAL TIME ZONE TIMESTAMP
INTERVAL YEAR TO MONTH STRING
INTERVAL DAY TO SECOND STRING
행 식별 유형
ROWID STRING
UROWID STRING
반정형, 벡터, XML 유형
JSON(텍스트 직렬화가 포함된 텍스트/OSON) STRING
VECTOR STRING
XMLTYPE STRING

가격 책정

통합 쿼리 실행 비용은 다음 세 가지 요소를 기반으로 합니다.

  • Oracle에서 쿼리를 실행하는 컴퓨팅 비용(Oracle 데이터베이스 제공업체 또는 호스팅 환경에서 청구)
  • Oracle에서 BigQuery로 쿼리 결과를 전송하는 대역폭 비용(데이터베이스 호스팅 제공업체의 이그레스 네트워크 요금)
  • BigQuery에서 쿼리를 실행하는 데 드는 컴퓨팅 비용

Oracle 관련 비용은 사용하는 Oracle 서비스 및 호스팅 환경 유형에 따라 다릅니다. 대역폭 비용을 제한하려면 최종 결과를 계산하는 데 필요하지 않은 모든 열과 행을 제외하도록 EXTERNAL_QUERY 문에 쿼리를 작성하는 것이 좋습니다.

BigQuery에서 페더레이션 쿼리를 실행하는 데 추가 비용이 들지 않습니다. BigQuery 가격에 대한 자세한 내용은 가격 책정을 참조하세요.

연결에서 Google Cloud 네트워킹 구성요소를 사용하는 경우 다음 가격 책정이 적용될 수도 있습니다.

다음 단계