AlloyDB 통합 쿼리

데이터 분석가는 통합 쿼리를 사용하여 BigQuery에서 PostgreSQL용 AlloyDB의 데이터를 쿼리할 수 있습니다.

BigQuery AlloyDB 통합을 사용하면 BigQuery에서 데이터 복사 또는 이동 없이 AlloyDB에 위치한 데이터를 실시간으로 쿼리할 수 있습니다.

시작하기 전에

데이터 쿼리

GoogleSQL 쿼리에서 통합 쿼리를 AlloyDB로 보내려면 EXTERNAL_QUERY 함수를 사용합니다.

고객 테이블은 BigQuery에, 판매 테이블은 AlloyDB에 저장되어 있는 상황에서 하나의 쿼리로 두 테이블을 조인하려는 경우가 있습니다. 다음 예시에서는 orders라는 AlloyDB 테이블에 통합 쿼리를 만들고 결과를 mydataset.customers라는 BigQuery 테이블과 조인합니다.

예시 쿼리는 다음과 같은 세 개의 부분으로 구성됩니다.

  1. AlloyDB 데이터베이스에서 외부 쿼리 SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id를 실행하여 EXTERNAL_QUERY 함수를 통해 각 고객의 첫 주문 날짜를 구합니다.

  2. customer_id를 기준으로 BigQuery에서 외부 쿼리 결과 테이블을 고객 테이블과 조인합니다.

  3. 최종 결과 집합에서 고객 정보와 첫 주문 날짜를 선택합니다.

SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
  'us.connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

AlloyDB 테이블 스키마 보기

EXTERNAL_QUERY 함수를 사용하여 information_schema 테이블을 쿼리하여 데이터베이스 메타데이터에 액세스할 수 있습니다. 예를 들어 데이터베이스의 모든 테이블을 나열하거나 테이블 스키마를 볼 수 있습니다. 자세한 내용은 PostgreSQL information_schema 테이블을 참조하세요.

-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.columns where table_name='x';");

BigQuery 통합 쿼리 추적

AlloyDB에 대해 통합 쿼리를 실행하면 BigQuery는 다음과 유사한 주석으로 쿼리에 주석을 추가합니다.

/* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID. */

다음 주석을 사용하면 로그의 쿼리 사용량을 모니터링할 때 BigQuery에서 수신되는 쿼리를 식별할 수 있습니다.

  1. 로그 탐색기 페이지로 이동합니다.

    로그 탐색기로 이동

  2. 쿼리 탭에서 다음 쿼리를 입력합니다.

    resource.type="alloydb.googleapis.com/Instance"
    textPayload=~"Federated query from BigQuery"
    
  3. 쿼리 실행을 클릭합니다.

    BigQuery 통합 쿼리에 사용할 수 있는 레코드가 있는 경우 쿼리 결과에 다음과 유사한 레코드 목록이 표시됩니다.

    YYYY-MM-DD hh:mm:ss.millis UTC [3210064]: [4-1]
    db=DATABASE, user=USER_ACCOUNT
    STATEMENT: SELECT 1 FROM (SELECT FROM company_name_table) t;
    /* Federated query from BigQuery.
    Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID
    */
    
    YYYY-MM-DD hh:mm:ss.millis UTC [3210532]: [2-1]
    db=DATABASE, user=USER_ACCOUNT
    STATEMENT: SELECT "company_id", "company type_id" FROM
    (SELECT FROM company_name_table) t;
    /* Federated query from BigQuery.
    Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID
    */
    

    Cloud Logging에 대한 자세한 내용은 Cloud Logging을 참조하세요.

문제 해결

이 섹션에서는 통합 쿼리를 AlloyDB에 전송할 때 발생할 수 있는 잠재적 오류를 설명하고 가능한 문제 해결 방법을 제공합니다.

문제: 다음 오류로 데이터베이스 서버에 연결할 수 없음: Invalid table-valued function EXTERNAL_QUERY Connect to PostgreSQL server failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request.

해결 방법: AlloyDB에 대한 연결을 만드는 동안 유효한 사용자 인증 정보를 사용하고 모든 기본 요건을 따랐는지 확인합니다. AlloyDB에 연결할 때 자동으로 생성되는 서비스 계정에 AlloyDB 클라이언트(roles/alloydb.client) 역할이 있는지 확인합니다. 자세한 내용은 서비스 계정에 액세스 권한 부여를 참조하세요.

다음 단계