AlloyDB 통합 쿼리
데이터 분석가는 통합 쿼리를 사용하여 BigQuery에서 PostgreSQL용 AlloyDB의 데이터를 쿼리할 수 있습니다.
BigQuery AlloyDB 통합을 사용하면 BigQuery에서 데이터 복사 또는 이동 없이 AlloyDB에 위치한 데이터를 실시간으로 쿼리할 수 있습니다.
시작하기 전에
- BigQuery 관리자가 AlloyDB 연결을 만들어 사용자와 공유했는지 확인합니다.
-
AlloyDB 인스턴스를 쿼리하는 데 필요한 권한을 얻으려면 관리자에게 프로젝트에 대한 BigQuery 연결 사용자(
roles/bigquery.connectionUser
) IAM 역할을 부여해 달라고 요청하세요. 역할 부여에 대한 자세한 내용은 프로젝트, 폴더, 조직에 대한 액세스 관리를 참조하세요.
데이터 쿼리
GoogleSQL 쿼리에서 통합 쿼리를 AlloyDB로 보내려면 EXTERNAL_QUERY
함수를 사용합니다.
고객 테이블은 BigQuery에, 판매 테이블은 AlloyDB에 저장되어 있는 상황에서 하나의 쿼리로 두 테이블을 조인하려는 경우가 있습니다. 다음 예시에서는 orders
라는 AlloyDB 테이블에 통합 쿼리를 만들고 결과를 mydataset.customers
라는 BigQuery 테이블과 조인합니다.
예시 쿼리는 다음과 같은 세 개의 부분으로 구성됩니다.
AlloyDB 데이터베이스에서 외부 쿼리
SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id
를 실행하여EXTERNAL_QUERY
함수를 통해 각 고객의 첫 주문 날짜를 구합니다.customer_id
를 기준으로 BigQuery에서 외부 쿼리 결과 테이블을 고객 테이블과 조인합니다.최종 결과 집합에서 고객 정보와 첫 주문 날짜를 선택합니다.
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에서 수신되는 쿼리를 식별할 수 있습니다.
로그 탐색기 페이지로 이동합니다.
쿼리 탭에서 다음 쿼리를 입력합니다.
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"
쿼리 실행을 클릭합니다.
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
) 역할이 있는지 확인합니다.
자세한 내용은 서비스 계정에 액세스 권한 부여를 참조하세요.
다음 단계
- 통합 쿼리 알아보기
- PostgreSQL에서 BigQuery로의 데이터 유형 매핑 알아보기
- 지원되지 않는 데이터 유형 알아보기