이 문서에서는 효율적인 지리 정보 분석을 위해 Google Earth Engine (EE)을 BigQuery (BQ)와 통합하는 방법을 안내합니다. 이 문서에서는 두 플랫폼 간의 데이터 전송, 성능 고려사항, 제한사항, 비용 영향을 다룹니다.
BigQuery란 무엇인가요?
BigQuery는 페타바이트 규모의 데이터에 대한 확장 가능한 분석을 지원하는 Google의 완전 관리형 서버리스 데이터 웨어하우스입니다. 고속 SQL 쿼리에 능하며 지리 공간 데이터를 지원합니다.
BigQuery와 Earth Engine은 언제 사용해야 하나요?
| BigQuery | Earth Engine | |
|---|---|---|
| 데이터 유형 | 주로 구조화된 분석 벡터 데이터입니다. GEOGRAPHY 데이터에 대한 지리 정보 작업을 지원합니다. |
주로 래스터 데이터이지만 벡터 데이터도 지원합니다. |
| 처리 중 | 대규모 집계 및 조인에 최적화된 SQL 기반 쿼리입니다. BQ 머신러닝과의 긴밀한 통합 | 고급 지리정보 알고리즘 및 머신러닝을 비롯한 래스터 처리 및 분석을 위한 JavaScript 및 Python API입니다. |
| 확장 | 페타바이트급 스토리지 및 분석 테이블 형식 데이터 처리에 중점을 둡니다. | 페타바이트급 스토리지 및 분석 벡터 데이터 처리 규모에 제한이 있는 지리 정보 분석에 중점을 둡니다. |
| 사용 사례 | 대규모 벡터 데이터 세트에 대한 데이터 웨어하우징, 비즈니스 인텔리전스, 지리 공간 분석 | 지리 정보 분석, 원격 감지, 환경 모니터링, 래스터 데이터에 관한 머신러닝 |
벡터 및 래스터 데이터
벡터 데이터는 지구 표면의 점, 선, 다각형입니다. BigQuery에서는 벡터 데이터가 GEOGRAPHY 데이터 유형을 사용하여 저장됩니다. Earth Engine에서는 ee.Geometry 객체입니다.
래스터 데이터는 투영된 픽셀 그리드입니다. Earth Engine은 대규모 래스터 데이터 세트를 처리하는 데 최적화되어 있습니다.
두 시스템을 모두 사용하는 이점
BigQuery의 확장성을 사용하면 Earth Engine에서만 처리하기 어려운 대규모 테이블 형식 데이터 세트를 사용할 수 있으며, Earth Engine은 BigQuery에서 불가능한 대규모 보강 및 벡터-래스터 처리를 지원할 수 있습니다.
Earth Engine은 BigQuery보다 더 광범위한 지리공간 함수와 데이터를 지원하지만 BigQuery는 다른 도구 및 서비스와 훨씬 더 풍부하게 통합됩니다.
Earth Engine 데이터를 BigQuery로 이동
Earth Engine은 추가 분석 및 다른 데이터 세트와의 통합을 위해 데이터를 BigQuery로 직접 내보낼 수 있습니다.
Export.table.toBigQuery()
Export.table.toBigQuery() 함수를 사용하여 Earth Engine 계산 결과를 BigQuery에 쓰는 비동기 내보내기 작업을 트리거합니다. 이러한 Earth Engine 작업은 Cloud Console의 작업 보기 또는 Earth Engine 코드 편집기에서 보고 제어할 수 있습니다.
자바스크립트
// Define an Earth Engine feature collection. var features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017'); // Export the feature collection to BigQuery. Export.table.toBigQuery({ collection: features, description: 'export_to_bigquery', table: 'my_project.my_dataset.my_table', append: true, overwrite: false });
Python
# Define an Earth Engine feature collection. features = ee.FeatureCollection('USDOS/LSIB_SIMPLE/2017') # Export the feature collection to BigQuery. task = ee.batch.Export.table.toBigQuery( collection=features, description='export_to_bigquery', table='my_project.my_dataset.my_table', append=True, overwrite=False ) task.start()
자세한 내용은 전체 함수 문서를 참고하세요.
동기식 API
BigQuery에 데이터를 동기식으로 직접 쓰는 직접 커넥터는 Earth Engine 내에 없습니다. 선호하는 언어 (Python, Java, Go 등)의 BigQuery 클라이언트 라이브러리를 사용하여 BigQuery로 데이터를 스트리밍하거나 RPC Storage API를 사용하여 실시간 또는 거의 실시간 데이터 전송을 실행할 수 있습니다.
| 주제 | 세부정보 |
|---|---|
| 기본 요건 | 프로젝트에 BigQuery API 및 BigQuery Storage API가 사용 설정되어 있어야 합니다. |
| 권한 | 대상 BigQuery 데이터 세트에 대한 쓰기 액세스 권한과 대상 프로젝트에서 작업을 만들 권한이 있어야 합니다. 자세한 내용은 필요한 권한 목록을 참고하세요. 권한 관리에 관한 자세한 내용은 BigQuery 액세스 제어 문서를 참고하세요. |
| 가격 책정 | BigQuery로 내보내는 Earth Engine 데이터의 스토리지 및 분석을 비롯한 BigQuery 사용에 대한 요금이 청구됩니다. 자세한 내용은 Earth Engine에서 BigQuery로 내보내기 가격 책정을 참고하세요. |
| 한도 | 결과 데이터는 행당 8MB의 추가 제한이 있는 BigQuery의 테이블 모델에 적합해야 합니다. Earth Engine 데이터를 BigQuery로 내보내는 알려진 문제도 참고하세요. |
BigQuery에서 직접 데이터 로드
ee.FeatureCollection.loadBigQueryTable() 함수는 BigQuery 내에서 변환하지 않고 BigQuery 테이블에서 데이터를 직접 로드합니다.
자바스크립트
// Load the BigQuery table with a specified geometry column. var features = ee.FeatureCollection.loadBigQueryTable({ tablePath: 'my_project.my_dataset.my_table', geometryColumn: 'geo' }); // Map features on the map Map.addLayer(features);
Python
# Load the BigQuery table with a specified geometry column. features = ee.FeatureCollection.loadBigQueryTable( tablePath='my_project.my_dataset.my_table', geometryColumn='geo') print(features.first())
| 주제 | 세부정보 |
|---|---|
| 기본 요건 | 프로젝트에 BigQuery API 및 BigQuery Storage API가 사용 설정되어 있어야 합니다. |
| 권한 | 표준 역할 및 권한 외에도 대상 BigQuery 테이블에 대한 읽기 액세스 권한과 대상 프로젝트에서 읽기 세션을 만들 권한이 있어야 합니다. 필요한 특정 BigQuery 권한은 다음과 같습니다. - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create 권한 관리에 관한 자세한 내용은 BigQuery 액세스 제어 문서를 참고하세요. |
| 가격 책정 | 상용 Earth Engine 사용을 위해 등록된 프로젝트를 사용하는 경우 BigQuery 테이블 읽기와 관련된 추가 Earth Engine 비용은 없지만 Earth Engine에서 데이터를 처리하는 것과 관련된 EECU 시간 비용이 발생합니다. 정확한 가격 책정 체계는 Earth Engine 요금제에 따라 결정됩니다. 비상업적 사용을 위해 등록된 프로젝트를 사용하는 경우 BigQuery에서 Earth Engine으로 데이터를 읽는 데 비용이 청구되지 않습니다. BigQuery 사용에 대한 비용을 지불하지 않더라도 상용 제품인 BigQuery를 사용하려면 프로젝트에 연결된 결제 계정이 있어야 합니다. 결제 계정에 대해 자세히 알아보려면 결제 사용 설정, 사용 중지 또는 변경에 관한 문서를 참고하세요. 참고: 비공개 미리보기에서는 BigQuery 데이터 스트리밍에 대한 요금이 청구될 수도 있습니다. |
| 한도 | 지형지물 컬렉션 필터가 BigQuery로 전송되어 거기에서 적용됩니다. BigQuery에는 수신된 필터 절의 크기 제한이 있습니다. '필터가 너무 큼' 오류 메시지가 표시되면 필터를 단순화해 보세요. 이 제한을 초과하는 일반적인 원인은 Earth Engine의 .filterBounds() 호출에 사용되는 복잡한 도형일 수 있습니다. |
Earth Engine에서 BigQuery 쿼리 실행
ee.FeatureCollection.runBigQuery() 함수는 BigQuery 계산을 트리거하여 BigQuery 테이블에 대해 SQL 쿼리를 직접 평가하고 결과를 Earth Engine FeatureCollection로 가져옵니다.
자바스크립트
// Construct a BigQuery query. var query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000'; // Run the query and retrieve the results as a FeatureCollection. var features = ee.FeatureCollection.runBigQuery(query); // Print the first feature. print(features.first());
Python
# Construct a BigQuery query. query = 'SELECT * FROM my_project.my_dataset.my_table WHERE area > 1000' # Run the query and retrieve the results as a FeatureCollection. features = ee.FeatureCollection.runBigQuery(query) # Print the first feature. print(features.first())
비용
이 기능을 사용하려면 결제 계정이 필요합니다.
Earth Engine
상업용 Earth Engine 사용을 위해 등록된 프로젝트를 사용하는 경우 BigQuery 테이블 실행과 관련된 추가 Earth Engine 비용은 없지만 Earth Engine에서 데이터를 처리하는 것과 관련된 EECU 시간 비용이 발생합니다. 정확한 가격 책정 체계는 Earth Engine 요금제에 따라 결정됩니다.
비상업용으로 등록된 프로젝트를 사용하는 경우 BigQuery에서 Earth Engine으로 데이터를 읽는 데 비용이 청구되지 않습니다.
BigQuery
이 방법을 사용하면 가격 요금제 (주문형 또는 슬롯 포함)에 따라 BigQuery 요금이 청구됩니다. BigQuery 예약이 있는 경우 이 방법을 사용해도 추가 주문형 요금이 발생하지 않습니다.
| 주제 | 세부정보 |
|---|---|
| 기본 요건 | 이 함수를 사용하려면 결제 계정이 필요하며 BigQuery API가 사용 설정되어 있어야 합니다. |
| 권한 | Earth Engine 서비스 계정에 BigQuery와 Earth Engine을 모두 사용할 수 있는 필요한 권한이 있는지 확인합니다.
인증에 사용되는 사용자 인증 정보에는 bigquery.jobs.create 및 bigquery.jobs.get 권한이 있어야 합니다.
권한 관리에 관한 자세한 내용은 BigQuery 액세스 제어 문서를 참고하세요. |
| 가격 책정 | 이 방법을 사용하면 가격 요금제 (주문형 또는 슬롯 포함)에 따라 BigQuery 요금이 청구됩니다. BigQuery 예약이 있는 경우 이 메서드를 사용해도 추가 주문형 요금이 청구되지 않습니다. 상업용 Earth Engine 사용을 위해 등록된 프로젝트를 사용하는 경우 BigQuery 테이블을 실행하는 것과 관련된 추가 Earth Engine 비용은 없지만 Earth Engine에서 데이터를 처리하는 것과 관련된 EECU 시간 비용이 발생합니다. 정확한 가격 책정 체계는 Earth Engine 요금제에 따라 결정됩니다. 비상업용으로 등록된 프로젝트를 사용하는 경우 BigQuery에서 Earth Engine으로 데이터를 읽는 데 비용이 청구되지 않습니다. |
성능
BigQuery의 쿼리 최적화 외에도 결과를 Earth Engine에 반환하는 성능은 결과 크기 (즉, BigQuery에서 읽은 바이트 수)와 결과 도형의 복잡도에 따라 달라집니다.
필터
필터링 권장사항은 다음과 같습니다.
- 조기에 자주 필터링: 데이터 처리 파이프라인에서 최대한 빨리 필터를 적용합니다(가급적 BigQuery SQL 쿼리 내에서 적용). 이렇게 하면 Earth Engine에서 전송하고 처리하는 데이터 양이 줄어듭니다.
- 선택성 향상: 더 작고 구체적인 데이터 하위 집합을 선택하는 필터를 만듭니다. 불필요한 데이터를 검색하는 지나치게 광범위한 필터는 사용하지 마세요.
- 필터 결합: 여러 필터 조건을 함께 사용하여 결과 범위를 효과적으로 좁힙니다.
- 단순화: 가능하면 필터 문자열 크기의 1MB 제한을 초과하지 않도록 복잡한 필터를 더 간단한 조건으로 분류합니다.
- 클러스터링: 클러스터링된 열을 사용하면 지리적 쿼리의 성능이 향상될 수 있습니다.
- BigQuery에서 필터링 사용: 데이터 크기를 줄이려면 Earth Engine에서 추가로 처리하기 전에 항상 BigQuery에서 초기 필터링을 실행하는 것이 좋습니다. 불가능하다면 BigQuery에서 데이터를 로드한 후 Earth Engine 스크립트 내에서 필터를 후처리 필터로 추가합니다.
시스템 전체 한도
- 400GB 테이블 크기 제한
- Earth Engine에서는 400GB를 초과하는 테이블을 읽을 수 없습니다.
- 10GB 중간 테이블 크기
- 각 쿼리 결과는 10GB로 제한됩니다.
LIMIT및WHERE절을 추가하는 등 필요한 열만 선택하여 쿼리를 더 선택적으로 만듭니다. - Earth Engine은 BigQuery에서 스캔되는 데이터 양에 제한을 적용합니다.
- 각 쿼리 결과는 10GB로 제한됩니다.
- 변환 후 필터 문자열 크기의 1MB 제한
- 복잡한 필터는 큰 필터 문자열로 인해 한도를 초과할 수 있습니다.
- 제한 시간
- Earth Engine은 쿼리에 제한 시간을 적용하며 이는 영역 (예: 일괄 처리, 온라인)에 따라 다를 수 있습니다.
- BigQuery 한도
- 쿼리 작업 제한에 관한 자세한 내용은 BigQuery 할당량 문서를 참고하세요.
비용 관리
BigQuery와 Earth Engine 간에 데이터를 이동하는 데 일반적으로 직접적인 비용이 발생하지 않습니다. 그러나 전송되는 데이터의 크기는 BigQuery와 Earth Engine 모두에서 처리 비용에 영향을 미칠 수 있습니다.
쿼리에 BigQuery 측에서 처리가 포함되는 경우 BigQuery 구성에 따라 BigQuery 요금이 청구됩니다.
쿼리에 Earth Engine 내에서 처리가 포함되어 있으며 프로젝트가 상업용으로 등록된 경우 Earth Engine 결제 구성에 따라 Earth Engine EECU 시간 요금이 청구됩니다.
로그 및 디버깅
읽기 작업
ee.FeatureCollection.loadBigQueryTable()를 사용하여 BigQuery에서 데이터를 읽을 때 상응하는 작업은 BigQuery에서 작업으로 명시적으로 로깅되지 않습니다. 즉, 상응하는 BigQuery 읽기 작업이 없는 다른 로깅 세부정보 (예: Cloud 감사 로그)가 표시될 수 있습니다.
쿼리 기록
ee.FeatureCollection.runBigQuery()를 사용하여 실행된 쿼리는 프로젝트의 BigQuery 쿼리 기록에 로깅됩니다. Cloud 콘솔의 BigQuery UI를 통해 쿼리 기록에 액세스할 수 있습니다.