연결된 시트 사용

연결된 시트를 사용하면 익숙한 Google Sheets 인터페이스 내에서 BigQuery 데이터 세트를 직접 분석할 수 있습니다. 차트, 수식, 피벗 테이블을 사용하여 데이터를 탐색하고, 이해관계자와 공동작업하고, 수동 스프레드시트 내보내기에 의존하지 않고 단일 정보 소스를 유지할 수 있습니다.

연결형 시트는 요청 또는 정의된 일정에 따라 사용자 대신 BigQuery 쿼리를 실행합니다. 이러한 쿼리 결과는 분석 및 공유를 위해 스프레드시트에 저장됩니다.

사용 사례

다음은 SQL을 알 필요 없이 연결된 시트를 사용하여 시트 내에서 대량의 데이터를 분석하는 방법을 보여주는 몇 가지 사용 사례입니다.

  • 비즈니스 계획: 데이터 세트를 빌드하고 준비한 다음 다른 사람들이 데이터에서 유용한 정보를 찾을 수 있도록 합니다. 예를 들어 판매 데이터를 분석하여 여러 위치에서 더 많이 판매되는 제품을 확인합니다.

  • 고객 서비스: 고객 10,000명당 불만사항이 가장 많이 제기된 매장이 어느 곳인지 확인합니다.

  • 영업: 내부 재무 및 영업 보고서를 만들고 영업 담당자와 수익 보고서를 공유합니다.

액세스 제어

BigQuery 데이터 세트 및 테이블에 대한 직접 액세스는 BigQuery 내에서 제어됩니다. 사용자에게 Google Sheets 액세스 권한만 부여하려면 스프레드시트를 공유하고 BigQuery 액세스 권한을 부여하지 않습니다.

Google Sheets 전용 액세스 권한이 있는 사용자는 시트에서 분석을 수행하고 다른 Google Sheets 기능을 사용할 수 있지만, 사용자는 다음 작업을 수행할 수 없습니다.

  • 시트에서 BigQuery 데이터를 수동으로 새로고침합니다.
  • 시트에서 데이터 새로고침을 예약합니다.

연결된 시트에서 데이터를 필터링하면 선택한 프로젝트에 대해 BigQuery로 전송하는 쿼리가 새로고침됩니다. 관련 프로젝트에서 다음 로그 필터를 사용하여 실행된 쿼리를 볼 수 있습니다.

resource.type="bigquery_resource"
protoPayload.metadata.firstPartyAppMetadata.sheetsMetadata.docId != NULL_VALUE

VPC 서비스 제어

VPC 서비스 제어를 사용하여Google Cloud 리소스에 대한 액세스를 제한할 수 있습니다. VPC 서비스 제어 기능을 사용하면 Sheets가 지원되지 않으므로 VPC 서비스 제어에서 보호하는 BigQuery 데이터에 액세스하지 못할 수 있습니다. 필요한 허용 권한이 있고 VPC 서비스 제어 액세스 제한사항을 충족하는 경우 연결된 시트를 통해 실행된 쿼리를 허용하도록 VPC 서비스 제어 경계를 구성할 수 있습니다. 이렇게 하려면 다음을 사용하여 경계를 구성해야 합니다.

  • 경계 외부의 신뢰할 수 있는 IP 주소, ID, 신뢰할 수 있는 클라이언트 기기의 요청을 허용하는 액세스 수준 또는 인그레스 규칙
  • 쿼리 결과를 사용자의 스프레드시트에 복사할 수 있는 이그레스 규칙

규칙을 올바르게 구성하려면 인그레스 및 이그레스 정책 구성, 액세스 수준 구성을 알아보세요. 필요한 데이터 복사를 허용하도록 경계를 구성하려면 다음 YAML 파일을 사용합니다.

- egressTo:
    operations:
    - serviceName: 'bigquery.googleapis.com'
      methodSelectors:
      - permission: 'bigquery.vpcsc.importData'
    resources:
    - projects/628550087766 # Sheets-owned Google Cloud project
  egressFrom:
    identityType: ANY_USER_ACCOUNT

시작하기 전에

결제가 설정된 Google Cloud 프로젝트가 없으면 다음 단계를 따르세요.

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. BigQuery는 새 프로젝트에서 자동으로 사용 설정됩니다. 기존 프로젝트에서 BigQuery를 활성화하려면 다음으로 이동합니다.

    BigQuery API가 아직 사용 설정되지 않았으면 사용 설정합니다.

    API 사용 설정에 필요한 역할

    API를 사용 설정하려면 serviceusage.services.enable 권한이 필요합니다. 프로젝트를 만든 경우 소유자 역할 (roles/owner)을 통해 이 권한이 이미 있을 수 있습니다. 그렇지 않으면 서비스 사용량 관리자 역할 (roles/serviceusage.serviceUsageAdmin)을 통해 이 권한을 얻을 수 있습니다. 역할 부여 방법 알아보기

    API 사용 설정하기

요금이 계속 청구되지 않도록 하려면 만든 리소스를 삭제하면 됩니다. 자세한 내용은 삭제를 참조하세요.

연결된 시트에서 BigQuery 데이터 열기

연결된 시트에서 데이터 세트, 테이블, 저장된 쿼리를 열 수 있습니다.

개방 데이터 세트

다음 예시에서는 공개 데이터 세트를 사용하여 Google Sheets에서 BigQuery에 연결하는 방법을 보여줍니다.

  1. Google Sheets 스프레드시트를 만들거나 엽니다.

  2. 데이터를 클릭하고 데이터 커넥터를 클릭한 후 BigQuery에 연결을 클릭합니다.

  3. 결제가 사용 설정된 Google Cloud 프로젝트를 선택합니다.

  4. 공개 데이터 세트를 클릭합니다.

  5. 검색창에 chicago를 입력한 다음 chicago_taxi_trips 데이터 세트를 선택합니다.

  6. taxi_trips 테이블을 선택한 다음 연결을 클릭합니다.

    테이블에 연결

    스프레드시트는 다음과 유사하게 표시됩니다.

    택시 운행 데이터

스프레드시트 사용을 시작합니다. 익숙한 Google Sheets 기술을 사용하여 피벗 테이블, 수식, 차트, 계산된 열, 예약된 쿼리를 만들 수 있습니다 자세한 내용은 연결된 시트 튜토리얼을 참조하세요.

스프레드시트에는 미리보기 행이 500개만 표시되지만 모든 피벗 테이블, 수식, 차트에 전체 데이터 세트가 사용됩니다. 피벗 테이블에 반환되는 결과의 최대 행 수는 200,000개입니다.

데이터를 Google Sheets로 추출할 수도 있습니다. 데이터 추출에 반환되는 결과의 최대 행 및 셀 수는 다음 조건에 따라 달라집니다.

  • 행 수가 50,000개 이하인 경우 셀 한도가 없습니다.
  • 행 수가 50,000개 이상 500,000개 이하인 경우 셀 수는 5백만 개 이하여야 합니다.
  • 행 수가 500,000개보다 크면 데이터 가져오기가 지원되지 않습니다.

연결된 시트를 사용하여 데이터에서 차트, 피벗 테이블, 수식 또는 기타 계산된 셀을 만들면 연결된 시트가 사용자를 대신하여 BigQuery에서 쿼리를 실행합니다. 이 쿼리를 보려면 다음을 수행합니다.

  1. 만든 셀 또는 차트를 선택합니다.
  2. 새로고침 위에 마우스 포인터를 올려놓습니다.
  3. 선택사항: 연결된 시트에서 쿼리 결과를 새로고침하려면 새로고침을 클릭합니다.
  4. BigQuery에서 쿼리를 보려면 BigQuery의 쿼리 세부정보를 클릭합니다.

    Google Cloud 콘솔에서 쿼리가 열립니다.

테이블 열기

연결된 시트에서 테이블을 열려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 왼쪽 창에서 탐색기를 클릭합니다.

    강조 표시된 탐색기 창 버튼

    왼쪽 창이 표시되지 않으면 왼쪽 창 펼치기를 클릭하여 창을 엽니다.

  3. 탐색기 창에서 프로젝트를 펼치고 데이터 세트를 클릭한 후 Google Sheets에서 열려는 테이블이 포함된 데이터 세트를 클릭합니다.

  4. 개요 > 테이블을 클릭하고 테이블 이름 옆에 있는 작업 보기를 클릭한 후 연결 프로그램 > 연결된 시트를 선택합니다.

저장된 쿼리 열기

저장된 쿼리가 있는지 확인합니다. 자세한 내용은 저장된 쿼리 만들기를 참조하세요.

연결된 시트에서 저장된 쿼리를 열려면 다음 단계를 따르세요.

  1. Google Cloud 콘솔에서 BigQuery 페이지로 이동합니다.

    BigQuery로 이동

  2. 왼쪽 창에서 탐색기를 클릭합니다.

    강조 표시된 탐색기 창 버튼

  3. 탐색기 창에서 프로젝트를 펼치고 쿼리를 클릭합니다. 연결된 시트에서 열려는 저장된 쿼리를 찾습니다.

  4. 저장된 쿼리 옆에 있는 작업 열기를 클릭한 후 다음에서 열기 > 연결된 시트를 클릭합니다.

    또는 저장된 쿼리의 이름을 클릭하여 세부정보 창에서 연 다음 연결된 시트에서 열기 >를 클릭합니다.

연결된 시트에서 대화형 분석 사용하기

연결된 시트의 대화형 분석을 사용하여 자연어로 BigQuery 데이터에 관해 질문하고 분석할 수 있습니다. Gemini는 질문을 최적화된 SQL 쿼리로 변환하고, 이를 실행하고, 주요 추세를 요약하며, 새로고침 가능한 실시간 데이터베이스 객체를 통합 문서에 직접 드롭할 수 있게 해줍니다.

연결된 시트에서 데이터를 분석하고 데이터베이스 객체를 만들려면 다음 단계를 완료하세요.

  1. Gemini 측면 패널을 엽니다.

    대화형 분석을 처음 사용할 때 BigQuery 액세스를 승인하라는 메시지가 표시될 수 있습니다. 계속하려면 연결하기를 클릭합니다.

  2. 텍스트 입력란에 질문을 입력합니다. 여러 질문에서 컨텍스트를 유지할 수 있습니다.

  3. Gemini에게 실시간으로 업데이트 가능한 객체를 만들어 달라고 요청하세요.

  4. 스프레드시트에 결과를 바로 추가하려면 삽입을 클릭합니다. 언제든지 객체를 수동으로 새로고침하거나 새로고침을 예약할 수 있습니다.

데이터 분석 준비

Google Sheets에서 직접 수십억 행의 BigQuery 데이터를 정렬하고 필터링하여 더 쉽게 작업할 수 있습니다. 열 상단에 있는 필터 아이콘을 클릭하여 데이터를 정렬하거나 조건 및 값으로 필터를 적용합니다. 자세한 내용은 Google Sheets에서 BigQuery 데이터 정렬 및 필터링하기를 참조하세요.

기본 BigQuery 스키마를 수정하지 않고 데이터를 더 읽기 쉽게 만들려면 열 헤더에 커스텀 이름 (별칭)을 할당하면 됩니다. 별칭을 설정하려면 다음 단계를 따르세요.

  1. 이름을 바꾸려는 열의 상단에서 아래쪽 화살표를 클릭합니다.
  2. 별칭으로 열 이름 바꾸기를 선택합니다.
  3. 새 이름을 입력합니다.
  4. 저장을 클릭합니다.

계산된 열에는 별칭을 할당할 수 없으며, 사용자가 만드는 별칭은 단일 통합 문서의 단일 BigQuery 연결 내에서만 유지됩니다. 자세한 내용은 Google Sheets에서 BigQuery 데이터 시작하기를 참조하세요.

연결된 시트에서 데이터 분석하기

익숙한 Google Sheets 도구를 사용하여 BigQuery 데이터에 대한 심층 분석을 수행할 수 있습니다. 차트를 만들고, 최대 100,000개의 결과를 지원하는 피벗 테이블을 빌드하고, 지원되는 스프레드시트 함수를 적용하여 데이터 세트를 요약할 수 있습니다. 오프라인 분석을 위해 BigQuery 데이터에서 최대 500,000개의 행 또는 10MB를 추출할 수도 있습니다.

자세한 내용은 Google Sheets에서 BigQuery 데이터 분석 및 새로고침을 참조하세요.

연결된 시트에서 맞춤 쿼리 작성하기

여러 BigQuery 테이블의 데이터를 조인하는 등 더 복잡한 분석을 수행하려면 연결된 시트 내에서 직접 커스텀 GoogleSQL 쿼리를 작성하면 됩니다.

쿼리를 작성하려면 다음을 수행합니다.

  1. 저장된 쿼리 > 쿼리 편집기를 클릭합니다.
  2. 쿼리를 입력합니다. 쿼리 내에서 특정 스프레드시트 셀의 값을 사용하도록 매개변수를 구성할 수 있습니다.
  3. 결과 삽입을 클릭합니다.

자세한 내용과 예시 쿼리를 보려면 쿼리 작성 및 수정을 참고하세요.

연결된 시트에서 BigQuery 사용량 모니터링

BigQuery 관리자는 연결된 시트의 리소스 소비를 모니터링하고 감사하여 사용 패턴을 파악하고, 비용을 관리하고, 자주 사용되는 보고서를 식별할 수 있습니다. 다음 섹션에서는 조직 및 프로젝트 수준에서 이 사용량을 모니터링하는 데 도움이 되는 SQL 쿼리 예시를 제공합니다. 자세한 내용은 JOBS 뷰를 참조하세요.

연결된 시트에서 시작되는 모든 쿼리에는 고유한 작업 ID 프리픽스인 sheets_dataconnector가 할당됩니다. 이 프리픽스를 사용하여 INFORMATION_SCHEMA.JOBS 뷰에서 작업을 필터링할 수 있습니다.

조직 수준에서 사용자별 연결된 시트 사용량 집계

다음 쿼리는 지난 30일 동안 조직에서 가장 많이 사용된 연결된 시트 사용자의 요약을 총 청구 데이터 기준으로 순위를 매겨 제공합니다. 이 쿼리는 각 사용자의 총 쿼리 수, 청구된 총 바이트 수, 총 슬롯 밀리초를 집계합니다. 이 정보는 채택을 이해하고 리소스의 상위 소비자를 식별하는 데 유용합니다.

SELECT
  user_email,
  COUNT(*) AS total_queries,
  SUM(total_bytes_billed) AS total_bytes_billed,
  SUM(total_slot_ms) AS total_slot_ms
FROM
  `region-REGION_NAME.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION`
WHERE
  -- Filter for jobs created in the last 30 days
  creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  -- Filter for jobs originating from Connected Sheets
  AND job_id LIKE 'sheets_dataconnector%'
  -- Filter for completed jobs
  AND state = 'DONE'
  AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
GROUP BY
  1
ORDER BY
  total_bytes_billed DESC;

REGION_NAME을 프로젝트의 리전으로 바꿉니다. 예를 들면 region-us입니다.

결과는 다음과 유사합니다.

+---------------------+---------------+--------------------+-----------------+
| user_email          | total_queries | total_bytes_billed | total_slot_ms   |
+---------------------+---------------+--------------------+-----------------+
| alice@example.com   | 152           | 12000000000        | 3500000         |
| bob@example.com     | 45            | 8500000000         | 2100000         |
| charles@example.com | 210           | 1100000000         | 1800000         |
+---------------------+---------------+--------------------+-----------------+

조직 수준에서 연결된 시트 쿼리의 작업 로그 찾기

다음 쿼리는 연결된 시트에서 실행하는 모든 개별 작업의 세부 로그를 제공합니다. 이 정보는 특정 고비용 쿼리를 감사하고 식별하는 데 유용합니다.

SELECT
  job_id,
  creation_time,
  user_email,
  project_id,
  total_bytes_billed,
  total_slot_ms
FROM
  `region-REGION_NAME.INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION`
WHERE
  creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND job_id LIKE 'sheets_dataconnector%'
  AND state = 'DONE'
  AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
ORDER BY
  creation_time DESC;

REGION_NAME을 프로젝트의 리전으로 바꿉니다. 예를 들면 region-us입니다.

결과는 다음과 유사합니다.

+---------------------------------+---------------------------------+-----------------+------------+--------------------+---------------+
| job_id                          | creation_time                   | user_email      | project_id | total_bytes_billed | total_slot_ms |
+---------------------------------+---------------------------------+-----------------+------------+--------------------+---------------+
| sheets_dataconnector_bquxjob_1  | 2025-11-06 00:26:53.077000 UTC  | abc@example.com | my_project | 12000000000        | 3500000       |
| sheets_dataconnector_bquxjob_2  | 2025-11-06 00:24:04.294000 UTC  | xyz@example.com | my_project | 8500000000         | 2100000       |
| sheets_dataconnector_bquxjob_3  | 2025-11-03 23:17:25.975000 UTC  | bob@example.com | my_project | 1100000000         | 1800000       |
+---------------------------------+---------------------------------+-----------------+------------+--------------------+---------------+

### 프로젝트 수준에서 사용자별 연결된 시트 사용량 집계

조직 수준 권한이 없거나 특정 프로젝트만 모니터링해야 하는 경우 다음 쿼리를 실행하여 지난 30일 동안 프로젝트 내에서 상위 연결된 시트 사용자를 식별합니다. 이 쿼리는 각 사용자의 총 쿼리 수, 청구된 총 바이트 수, 총 슬롯 밀리초를 집계합니다. 이 정보는 채택을 이해하고 리소스의 상위 소비자를 식별하는 데 유용합니다.

SELECT
  user_email,
  COUNT(*) AS total_queries,
  SUM(total_bytes_billed) AS total_bytes_billed,
  SUM(total_slot_ms) AS total_slot_ms
FROM
  -- This view queries the project you are currently running the query in.
  `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
  -- Filter for jobs created in the last 30 days
  creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  -- Filter for jobs originating from Connected Sheets
  AND job_id LIKE 'sheets_dataconnector%'
  -- Filter for completed jobs
  AND state = 'DONE'
  AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
GROUP BY
  user_email
ORDER BY
  total_bytes_billed DESC
LIMIT
  10;

REGION_NAME을 프로젝트의 리전으로 바꿉니다. 예를 들면 region-us입니다.

결과는 다음과 유사합니다.

+---------------------+---------------+--------------------+-----------------+
| user_email          | total_queries | total_bytes_billed | total_slot_ms   |
+---------------------+---------------+--------------------+-----------------+
| alice@example.com   | 152           | 12000000000        | 3500000         |
| bob@example.com     | 45            | 8500000000         | 2100000         |
| charles@example.com | 210           | 1100000000         | 1800000         |
+---------------------+---------------+--------------------+-----------------+

### 프로젝트 수준에서 연결된 시트 쿼리의 작업 로그 찾기

조직 수준 권한이 없거나 특정 프로젝트만 모니터링해야 하는 경우 다음 쿼리를 실행하여 현재 프로젝트의 모든 연결된 시트 쿼리에 대한 자세한 로그를 확인합니다.

SELECT
  job_id,
  creation_time,
  user_email,
  total_bytes_billed,
  total_slot_ms,
  query
FROM
  -- This view queries the project you are currently running the query in.
  `region-REGION_NAME.INFORMATION_SCHEMA.JOBS_BY_PROJECT`
WHERE
  creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
  AND job_id LIKE 'sheets_dataconnector%'
  AND state = 'DONE'
  AND (statement_type IS NULL OR statement_type <> 'SCRIPT')
ORDER BY
  creation_time DESC;

REGION_NAME을 프로젝트의 리전으로 바꿉니다. 예를 들면 region-us입니다.

결과는 다음과 유사합니다.

+---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+
| job_id                          | creation_time                   | user_email       | total_bytes_billed | total_slot_ms   |  query                          |
+---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+
| sheets_dataconnector_bquxjob_1  | 2025-11-06 00:26:53.077000 UTC  | abc@example.com  | 12000000000        | 3500000         |  SELECT ... FROM dataset.table1 |
| sheets_dataconnector_bquxjob_2  | 2025-11-06 00:24:04.294000 UTC  | xyz@example.com  | 8500000000         | 2100000         |  SELECT ... FROM dataset.table2 |
| sheets_dataconnector_bquxjob_3  | 2025-11-03 23:17:25.975000 UTC  | bob@example.com  | 1100000000         | 1800000         |  SELECT ... FROM dataset.table3 |
+---------------------------------+---------------------------------+------------------+--------------------+-----------------+---------------------------------+

삭제

이 튜토리얼에서 사용한 리소스 비용이 Google Cloud 계정에 청구되지 않도록 하려면 다음 안내를 따르세요.

  1. Google Cloud 콘솔에서 리소스 관리 페이지로 이동합니다.

    리소스 관리로 이동

  2. 프로젝트 목록에서 삭제할 프로젝트를 선택하고 삭제를 클릭합니다.
  3. 대화상자에서 프로젝트 ID를 입력한 후 종료를 클릭하여 프로젝트를 삭제합니다.

다음 단계