Tài liệu này cung cấp hướng dẫn về cách tích hợp Google Earth Engine (EE) với BigQuery (BQ) để phân tích không gian địa lý một cách hiệu quả. Tài liệu này đề cập đến việc chuyển dữ liệu giữa hai nền tảng, các vấn đề cần cân nhắc về hiệu suất, các giới hạn và tác động về chi phí.
BigQuery là gì?
BigQuery là kho dữ liệu không máy chủ, do Google toàn quyền quản lý, cho phép phân tích có thể mở rộng trên hàng petabyte dữ liệu. Lớp này xuất sắc trong các truy vấn SQL tốc độ cao và hỗ trợ dữ liệu không gian địa lý.
Khi nào tôi nên sử dụng BigQuery hoặc Earth Engine?
| BigQuery | Earth Engine | |
|---|---|---|
| Loại dữ liệu | Chủ yếu là dữ liệu vectơ phân tích có cấu trúc. Hỗ trợ các thao tác không gian địa lý trên dữ liệu GEOGRAPHY. |
Chủ yếu là dữ liệu đường quét, nhưng cũng hỗ trợ dữ liệu vectơ. |
| Đang xử lý | Các truy vấn dựa trên SQL, được tối ưu hoá cho các phép tổng hợp và nối trên quy mô lớn. Tích hợp sâu với tính năng Học máy của BQ. | API JavaScript và Python để xử lý và phân tích raster, bao gồm cả các thuật toán không gian địa lý nâng cao và công nghệ học máy. |
| Tỷ lệ | Lưu trữ và phân tích ở quy mô petabyte. Tập trung vào việc xử lý dữ liệu dạng bảng. | Lưu trữ và phân tích ở quy mô petabyte. Tập trung vào phân tích không gian địa lý, với các giới hạn về quy mô xử lý dữ liệu vectơ. |
| Trường hợp sử dụng | Lưu trữ dữ liệu, thông tin nghiệp vụ, phân tích không gian địa lý trên các tập dữ liệu vectơ lớn. | Phân tích không gian địa lý, cảm biến từ xa, giám sát môi trường, học máy trên dữ liệu đường quét. |
Dữ liệu vectơ và đường quét
Dữ liệu vectơ là các điểm, đường thẳng và đa giác trên bề mặt trái đất. Trong BigQuery, dữ liệu vectơ được lưu trữ bằng loại dữ liệu GEOGRAPHY; trong Earth Engine, đây là các đối tượng ee.Geometry.
Dữ liệu đường quét là các lưới được chiếu của pixel. Earth Engine được tối ưu hoá để xử lý và xử lý các tập dữ liệu đường quét lớn.
Lợi ích của việc sử dụng cả hai hệ thống
Khả năng mở rộng của BigQuery cho phép bạn xử lý các tập dữ liệu dạng bảng khổng lồ mà có thể bạn sẽ gặp khó khăn khi chỉ xử lý trong Earth Engine. Ngoài ra, Earth Engine có thể hỗ trợ việc làm phong phú dữ liệu trên quy mô lớn và xử lý vectơ sang đường quét mà không thể thực hiện được trong BigQuery.
Earth Engine hỗ trợ nhiều hàm và dữ liệu không gian địa lý hơn BigQuery, nhưng BigQuery tích hợp nhiều công cụ và dịch vụ khác hơn.
Chuyển dữ liệu Earth Engine sang BigQuery
Earth Engine có thể xuất dữ liệu trực tiếp sang BigQuery để phân tích sâu hơn và tích hợp với các tập dữ liệu khác.
Export.table.toBigQuery()
Sử dụng hàm Export.table.toBigQuery() để kích hoạt các công việc xuất không đồng bộ ghi kết quả tính toán của Earth Engine vào BigQuery. Bạn có thể xem và kiểm soát các tác vụ Earth Engine này trong Chế độ xem tác vụ trong Cloud Console hoặc trong Trình chỉnh sửa mã Earth Engine.
JavaScript
// 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()
Hãy xem tài liệu đầy đủ về hàm để biết thêm thông tin.
API đồng bộ
Không có trình kết nối trực tiếp nào trong Earth Engine để ghi đồng bộ dữ liệu trực tiếp vào BigQuery. Bạn có thể sử dụng thư viện ứng dụng BigQuery cho ngôn ngữ bạn muốn (Python, Java, Go, v.v.) để truyền trực tuyến dữ liệu vào BigQuery hoặc sử dụng RPC Storage API để chuyển dữ liệu theo thời gian thực hoặc gần như theo thời gian thực.
| Chủ đề | Thông tin chi tiết |
|---|---|
| Điều kiện tiên quyết | Dự án phải bật BigQuery API và BigQuery Storage API. |
| Quyền | Bạn cần có quyền ghi trên tập dữ liệu BigQuery mục tiêu và quyền tạo công việc trong dự án mục tiêu. Hãy xem danh sách các quyền cần thiết để biết thông tin chi tiết. Hãy tham khảo tài liệu về tính năng kiểm soát quyền truy cập của BigQuery để biết thông tin chi tiết về cách quản lý quyền. |
| Giá | Bạn sẽ phải trả phí khi sử dụng BigQuery, bao gồm cả việc lưu trữ và phân tích mọi dữ liệu Earth Engine mà bạn xuất sang BigQuery. Để biết thông tin chi tiết, hãy xem bài viết Giá của tính năng xuất dữ liệu từ Earth Engine sang BigQuery. |
| Giới hạn | Dữ liệu thu được phải phù hợp với mô hình bảng của BigQuery với giới hạn bổ sung là 8 MB mỗi hàng. Ngoài ra, hãy xem tập hợp các vấn đề đã biết khi xuất dữ liệu Earth Engine sang BigQuery. |
Tải dữ liệu trực tiếp từ BigQuery
Hàm ee.FeatureCollection.loadBigQueryTable() tải dữ liệu trực tiếp từ bảng BigQuery mà không cần chuyển đổi dữ liệu đó trong BigQuery.
JavaScript
// 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())
| Chủ đề | Thông tin chi tiết |
|---|---|
| Điều kiện tiên quyết | Dự án phải bật BigQuery API và BigQuery Storage API. |
| Quyền | Ngoài các vai trò và quyền tiêu chuẩn, bạn cần có quyền đọc trên bảng BigQuery mục tiêu và quyền tạo phiên đọc trong dự án mục tiêu. Các quyền cụ thể đối với BigQuery cần thiết là: - bigquery.tables.get - bigquery.tables.getData - bigquery.readSession.create - bigquery.jobs.create Hãy tham khảo tài liệu về kiểm soát quyền truy cập vào BigQuery để biết thông tin chi tiết về cách quản lý quyền. |
| Giá | Nếu đang sử dụng một dự án được đăng ký để sử dụng Earth Engine cho mục đích thương mại, bạn sẽ không phải trả thêm chi phí Earth Engine liên quan đến việc đọc bảng BigQuery, nhưng bạn sẽ phải trả chi phí theo thời gian EECU liên quan đến việc xử lý dữ liệu trong Earth Engine. Chương trình giá chính xác sẽ được xác định theo gói Earth Engine của bạn. Nếu đang sử dụng một dự án được đăng ký cho mục đích sử dụng phi thương mại, bạn sẽ không phải trả phí khi đọc dữ liệu từ BigQuery vào Earth Engine. Mặc dù bạn sẽ không phải trả phí để sử dụng BigQuery, nhưng BigQuery là một sản phẩm thương mại nên dự án của bạn phải có một tài khoản thanh toán được liên kết. Để tìm hiểu thêm về tài khoản thanh toán, hãy tham khảo tài liệu về cách bật, tắt hoặc thay đổi thông tin thanh toán. LƯU Ý: Trong Bản dùng thử riêng tư, bạn cũng có thể phải trả phí cho việc truyền dữ liệu BigQuery. |
| Giới hạn | Bộ lọc tập hợp tính năng được gửi đến BigQuery và áp dụng tại đó. BigQuery có giới hạn kích thước đối với mệnh đề bộ lọc đã nhận. Nếu bạn thấy thông báo lỗi "bộ lọc quá lớn", hãy cân nhắc việc đơn giản hoá bộ lọc. Một nguyên nhân phổ biến dẫn đến việc đạt đến giới hạn này có thể là một hình học phức tạp được sử dụng trong lệnh gọi .filterBounds() trong Earth Engine. |
Chạy truy vấn BigQuery từ Earth Engine
Hàm ee.FeatureCollection.runBigQuery() kích hoạt tính toán BigQuery để đánh giá truy vấn SQL trực tiếp trên các bảng BigQuery và truy xuất kết quả dưới dạng FeatureCollection của Earth Engine.
JavaScript
// 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())
Chi phí
Bạn cần có tài khoản thanh toán để sử dụng hàm này.
Earth Engine
Nếu đang sử dụng một dự án đã đăng ký để sử dụng Earth Engine cho mục đích thương mại, thì bạn sẽ không phải trả thêm chi phí Earth Engine liên quan đến việc chạy bảng BigQuery, nhưng bạn sẽ phải trả chi phí theo thời gian EECU liên quan đến việc xử lý dữ liệu trong Earth Engine. Chương trình giá chính xác sẽ do gói Earth Engine của bạn xác định.
Nếu đang sử dụng một dự án được đăng ký để sử dụng phi thương mại, bạn sẽ không phải trả phí khi đọc dữ liệu từ BigQuery vào Earth Engine.
BigQuery
Phương thức này sẽ tính phí BigQuery dựa trên gói giá của bạn (theo yêu cầu hoặc theo khung giờ). Nếu bạn đã đặt chỗ BigQuery, việc sử dụng phương thức này sẽ không tạo thêm khoản phí theo yêu cầu.
| Chủ đề | Thông tin chi tiết |
|---|---|
| Điều kiện tiên quyết | Bạn cần có tài khoản thanh toán để sử dụng hàm này và phải bật BigQuery API. |
| Quyền | Đảm bảo tài khoản dịch vụ Earth Engine có các quyền cần thiết để sử dụng cả BigQuery và Earth Engine.
Thông tin xác thực của người dùng dùng để xác thực cần có quyền bigquery.jobs.create và bigquery.jobs.get.
Hãy tham khảo tài liệu về tính năng kiểm soát quyền truy cập của BigQuery để biết thông tin chi tiết về cách quản lý quyền. |
| Giá | Phương thức này sẽ tính phí BigQuery dựa trên gói giá của bạn (theo yêu cầu hoặc theo khung giờ). Nếu bạn đã đặt trước BigQuery, việc sử dụng phương thức này sẽ không tạo thêm khoản phí theo yêu cầu. Nếu đang sử dụng một dự án đã đăng ký để sử dụng Earth Engine cho mục đích thương mại, thì bạn sẽ không phải trả thêm chi phí Earth Engine liên quan đến việc chạy bảng BigQuery, nhưng bạn sẽ phải trả chi phí theo thời gian EECU liên quan đến việc xử lý dữ liệu trong Earth Engine. Chương trình giá chính xác sẽ do gói Earth Engine của bạn xác định. Nếu đang sử dụng một dự án được đăng ký để sử dụng không vì mục đích thương mại, bạn sẽ không phải trả phí để đọc dữ liệu từ BigQuery vào Earth Engine. |
Hiệu suất
Ngoài việc tối ưu hoá truy vấn trong BigQuery, hiệu suất trả về kết quả cho Earth Engine còn phụ thuộc vào kích thước của kết quả (tức là số byte đọc được từ BigQuery) và độ phức tạp của hình học thu được.
Bộ lọc
Dưới đây là các phương pháp hay nhất để lọc:
- lọc sớm và thường xuyên: Áp dụng bộ lọc càng sớm càng tốt trong quy trình xử lý dữ liệu, tốt nhất là trong các truy vấn SQL BigQuery. Điều này giúp giảm lượng dữ liệu được Earth Engine chuyển và xử lý.
- Tăng tính chọn lọc: Tạo bộ lọc chọn một tập hợp con dữ liệu nhỏ hơn, cụ thể hơn. Tránh sử dụng bộ lọc quá rộng để truy xuất dữ liệu không cần thiết.
- Kết hợp bộ lọc: Sử dụng nhiều điều kiện bộ lọc cùng lúc để thu hẹp kết quả một cách hiệu quả.
- Đơn giản hoá: Khi có thể, hãy chia nhỏ các bộ lọc phức tạp thành các điều kiện đơn giản hơn để tránh vượt quá giới hạn 1 MB đối với kích thước chuỗi bộ lọc.
- Nhóm: Các truy vấn không gian địa lý có thể hoạt động hiệu quả hơn trên các cột được nhóm.
- Ưu tiên lọc trong BigQuery: Để giảm kích thước dữ liệu, bạn nên thực hiện bước lọc ban đầu trong BigQuery trước khi xử lý thêm trong Earth Engine. Nếu không thể, hãy áp dụng các bộ lọc bổ sung dưới dạng bộ lọc sau trong tập lệnh Earth Engine sau khi tải dữ liệu từ BigQuery.
Giới hạn trên toàn hệ thống
- Giới hạn kích thước bảng 400 GB
- Earth Engine không cho phép đọc các bảng lớn hơn 400 GB.
- Kích thước bảng trung gian 10 GB
- Mỗi kết quả truy vấn có giới hạn là 10 GB. Tăng tính chọn lọc cho truy vấn bằng cách chỉ chọn các cột cần thiết, chẳng hạn như thêm mệnh đề
LIMITvàWHERE. - Earth Engine đặt ra giới hạn về lượng dữ liệu được quét trong BigQuery.
- Mỗi kết quả truy vấn có giới hạn là 10 GB. Tăng tính chọn lọc cho truy vấn bằng cách chỉ chọn các cột cần thiết, chẳng hạn như thêm mệnh đề
- Giới hạn 1 MB cho kích thước chuỗi bộ lọc sau khi biến đổi
- Các bộ lọc phức tạp có thể dẫn đến chuỗi bộ lọc lớn vượt quá giới hạn.
- Thời gian chờ
- Earth Engine áp dụng thời gian chờ cho các truy vấn, thời gian chờ này có thể khác nhau tuỳ thuộc vào phạm vi (ví dụ: hàng loạt, trực tuyến).
- Hạn mức BigQuery
- Hãy tham khảo tài liệu về hạn mức BigQuery để biết thông tin chi tiết về các giới hạn đối với công việc truy vấn.
Chế độ kiểm soát chi phí
Việc di chuyển dữ liệu giữa BigQuery và Earth Engine thường không phát sinh chi phí trực tiếp. Tuy nhiên, kích thước của dữ liệu được chuyển có thể ảnh hưởng đến chi phí xử lý trong cả BigQuery và Earth Engine.
Nếu một truy vấn liên quan đến việc xử lý ở phía BigQuery, thì truy vấn đó sẽ phải chịu các khoản phí của BigQuery theo cấu hình BigQuery của bạn.
Nếu một truy vấn liên quan đến việc xử lý trong Earth Engine và dự án của bạn được đăng ký để sử dụng cho mục đích thương mại, thì bạn sẽ phải trả phí theo thời gian EECU của Earth Engine theo cấu hình thanh toán Earth Engine của bạn.
Nhật ký và gỡ lỗi
Thao tác đọc
Khi đọc dữ liệu từ BigQuery bằng ee.FeatureCollection.loadBigQueryTable(), thao tác tương ứng sẽ không được ghi lại rõ ràng dưới dạng công việc trong BigQuery. Điều này có nghĩa là bạn có thể thấy các chi tiết ghi nhật ký khác (chẳng hạn như nhật ký kiểm tra trên đám mây) không có công việc đọc BigQuery tương ứng.
Nhật ký truy vấn
Các truy vấn được thực thi bằng ee.FeatureCollection.runBigQuery() sẽ được ghi lại trong nhật ký truy vấn BigQuery của dự án. Bạn có thể truy cập vào nhật ký truy vấn thông qua giao diện người dùng BigQuery trong bảng điều khiển Cloud.