В этом документе представлены рекомендации по интеграции Google Earth Engine (EE) с BigQuery (BQ) для эффективного геопространственного анализа. В нем рассматривается передача данных между двумя платформами, вопросы производительности, ограничения и финансовые последствия.
Что такое BigQuery?
BigQuery – это полностью управляемое бессерверное хранилище данных Google, позволяющее масштабировать анализ петабайт данных. Он превосходно справляется с высокоскоростными SQL-запросами и поддерживает геопространственные данные.
Когда мне следует использовать BigQuery или Earth Engine?
| Большой запрос | Земляной двигатель | |
|---|---|---|
| Тип данных | В первую очередь структурированные аналитические векторные данные. Поддерживает геопространственные операции с данными GEOGRAPHY . | В основном растровые данные, но также поддерживаются векторные данные. |
| Обработка | Запросы на основе SQL, оптимизированные для крупномасштабных агрегаций и объединений. Глубокая интеграция с BQ Machine Learning. | API-интерфейсы JavaScript и Python для обработки и анализа растров, включая передовые геопространственные алгоритмы и машинное обучение. |
| Шкала | Хранение и анализ петабайтных данных. Сосредоточьтесь на обработке табличных данных. | Хранение и анализ петабайтных данных. Сосредоточьтесь на геопространственном анализе с ограничениями на масштаб обработки векторных данных. |
| Варианты использования | Хранилище данных, бизнес-аналитика, геопространственная аналитика больших наборов векторных данных. | Геопространственный анализ, дистанционное зондирование, мониторинг окружающей среды, машинное обучение на растровых данных. |
Векторные и растровые данные
Векторные данные — это точки, линии и многоугольники на поверхности земли. В 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 можно просматривать и контролировать из представления задач в облачной консоли или в редакторе кода 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 });
Питон
# 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
В Earth Engine не существует прямого соединителя для синхронной записи данных непосредственно в BigQuery. Вы можете использовать клиентскую библиотеку BigQuery для предпочитаемого вами языка (Python, Java, Go и т. д.) для потоковой передачи данных в BigQuery или использовать API хранилища RPC для передачи данных в реальном времени или почти в реальном времени.
| Тема | Подробности |
|---|---|
| Предварительные условия | В проекте должны быть включены BigQuery API и BigQuery Storage API. |
| Разрешения | Вам необходим доступ на запись в целевой набор данных BigQuery и разрешение на создание заданий в целевом проекте. Подробности смотрите в списке необходимых разрешений . Подробную информацию об управлении разрешениями см. в документации по управлению доступом BigQuery . |
| Цены | С вас будет взиматься плата за использование BigQuery, включая хранение и анализ любых данных Earth Engine, которые вы экспортируете в BigQuery. Подробную информацию см. в разделе «Цены на экспорт Earth Engine в BigQuery» . |
| Пределы | Полученные данные должны соответствовать табличной модели BigQuery с дополнительным ограничением в 8 МБ на строку. См. также список известных проблем при экспорте данных Earth Engine в BigQuery. |
Загружайте данные из BigQuery напрямую
Функция ee.FeatureCollection.loadBigQueryTable() загружает данные непосредственно из таблицы BigQuery, не преобразовывая их в 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);
Питон
# 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, дополнительные затраты Earth Engine, связанные с чтением таблицы BigQuery, не взимаются, но вы понесете затраты времени EECU, связанные с обработкой данных в Earth Engine. Точная схема ценообразования определяется вашим планом Earth Engine. Если вы используете проект, зарегистрированный для некоммерческого использования, с вас не будет взиматься плата за чтение данных из BigQuery в Earth Engine. Несмотря на то, что вы не будете платить за использование BigQuery, BigQuery как коммерческий продукт требует, чтобы у вашего проекта был связанный платежный аккаунт. Чтобы узнать больше о платежных аккаунтах, обратитесь к документации по включению, отключению или изменению выставления счетов . ПРИМЕЧАНИЕ. В режиме Private Preview с вас также может взиматься плата за потоковую передачу данных BigQuery. |
| Пределы | Фильтры коллекции функций отправляются в BigQuery и применяются там. BigQuery имеет ограничение на размер полученных предложений фильтра. Если вы видите сообщение об ошибке «Слишком большой фильтр», рассмотрите возможность упрощения фильтра. Одним из распространенных источников достижения этого предела может быть сложная геометрия, используемая в вызове .filterBounds() в Earth Engine. |
Запуск запросов BigQuery из Earth Engine
Функция ee.FeatureCollection.runBigQuery() запускает вычисления BigQuery для оценки SQL-запроса непосредственно по таблицам BigQuery и получения результатов в виде FeatureCollection 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());
Питон
# 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, не взимаются, но вы понесете затраты времени EECU, связанные с обработкой данных в Earth Engine. Точная схема ценообразования определяется вашим планом Earth Engine.
Если вы используете проект, зарегистрированный для некоммерческого использования, с вас не будет взиматься плата за чтение данных из BigQuery в Earth Engine.
Большой запрос
За этот метод взимается плата BigQuery в зависимости от вашего тарифного плана (по требованию или со слотами). Если у вас есть резервирование BigQuery, использование этого метода не приведет к дополнительным расходам по требованию.
| Тема | Подробности |
|---|---|
| Предварительные условия | Для использования этой функции необходим платежный аккаунт, а также должен быть включен BigQuery API. |
| Разрешения | Убедитесь, что у сервисного аккаунта Earth Engine есть необходимые разрешения для использования BigQuery и Earth Engine. Учетные данные пользователя, используемые для аутентификации, должны иметь разрешения bigquery.jobs.create и bigquery.jobs.get . Подробную информацию об управлении разрешениями см. в документации по управлению доступом BigQuery . |
| Цены | За этот метод взимается плата BigQuery в зависимости от вашего тарифного плана (по требованию или со слотами). Если у вас есть резервирование BigQuery, использование этого метода не приведет к дополнительным расходам по требованию. Если вы используете проект, зарегистрированный для коммерческого использования Earth Engine, дополнительные затраты Earth Engine, связанные с запуском таблицы BigQuery, не взимаются, но вы понесете затраты времени EECU, связанные с обработкой данных в Earth Engine. Точная схема ценообразования определяется вашим планом Earth Engine. Если вы используете проект, зарегистрированный для некоммерческого использования, с вас не будет взиматься плата за чтение данных из BigQuery в Earth Engine. |
Производительность
Помимо оптимизации запросов в BigQuery , производительность возврата результатов в Earth Engine зависит от размера результатов (то есть количества байтов, считанных из BigQuery) и сложности получаемой геометрии.
Фильтры
Лучшие практики фильтрации включают в себя:
- фильтрация как можно раньше и чаще. Применяйте фильтры как можно раньше в конвейере обработки данных, в идеале — в SQL-запросах BigQuery. Это уменьшает объем данных, передаваемых и обрабатываемых Earth Engine.
- Повысьте избирательность: создайте фильтры, которые отбирают меньший и более конкретный подмножество данных. Избегайте слишком широких фильтров, которые извлекают ненужные данные.
- Комбинируйте фильтры: используйте несколько условий фильтра вместе, чтобы эффективно сузить результаты.
- Упростите. Если возможно, разбейте сложные фильтры на более простые условия, чтобы не превысить ограничение размера строки фильтра в 1 МБ.
- Кластеризация. Геопространственные запросы могут быть более производительными по сравнению с кластеризованными столбцами.
- Предпочитайте фильтрацию в BigQuery. Чтобы уменьшить размер данных, всегда лучше выполнить первоначальную фильтрацию в BigQuery перед дальнейшей обработкой в Earth Engine. Если это невозможно, примените дополнительные фильтры в качестве пост-фильтров в скрипте Earth Engine после загрузки данных из BigQuery.
Общесистемные ограничения
- Ограничение размера таблицы 400 ГБ
- Earth Engine не позволяет читать таблицы размером более 400 ГБ.
- Размеры промежуточной таблицы 10 ГБ
- Каждый результат запроса ограничен 10 ГБ. Сделайте запрос более избирательным, выбрав только необходимые столбцы, например добавив предложения
LIMITиWHERE. - Earth Engine накладывает ограничение на объем данных, сканируемых в BigQuery.
- Каждый результат запроса ограничен 10 ГБ. Сделайте запрос более избирательным, выбрав только необходимые столбцы, например добавив предложения
- Ограничение в 1 МБ для размера строки фильтра после преобразования
- Сложные фильтры могут привести к тому, что большие строки фильтров превысят предел.
- Таймауты
- Earth Engine применяет к запросам таймауты, которые могут различаться в зависимости от области (например, пакетный, онлайн).
- Ограничения BigQuery
- Подробную информацию об ограничениях заданий запроса см. в документации по квотам BigQuery .
Контроль затрат
Перемещение данных между BigQuery и Earth Engine обычно не влечет за собой прямых затрат. Однако размер передаваемых данных может влиять на стоимость обработки как в BigQuery, так и в Earth Engine.
Если запрос включает обработку на стороне BigQuery, за него будет взиматься плата BigQuery в соответствии с вашей конфигурацией BigQuery.
Если запрос включает обработку в Earth Engine и ваш проект зарегистрирован для коммерческого использования, с вас будет взиматься плата за время Earth Engine EECU в соответствии с вашей конфигурацией выставления счетов Earth Engine.
Журналы и отладка
Операции чтения
При чтении данных из BigQuery с помощью ee.FeatureCollection.loadBigQueryTable() соответствующая операция не регистрируется явно как задание в BigQuery. Это означает, что вы можете увидеть другие данные журналов (например, журналы аудита Cloud), которым не соответствуют задания чтения BigQuery.
История запросов
Запросы, выполненные с помощью ee.FeatureCollection.runBigQuery() регистрируются в истории запросов BigQuery вашего проекта. Вы можете получить доступ к своей истории запросов через пользовательский интерфейс BigQuery в консоли Cloud.