Earth Engine وBigQuery

يوفّر هذا المستند إرشادات حول دمج Google Earth Engine‏ (EE) مع BigQuery‏ (BQ) لإجراء تحليل جغرافي مكاني فعّال. ويتناول هذا التقرير نقل البيانات بين المَنصتَين، والاعتبارات المتعلّقة بالأداء والقيود والآثار المتعلّقة بالتكلفة.

ما هي خدمة BigQuery؟

‫BigQuery هو مستودع بيانات مُدار بالكامل من Google ويعمل بدون خادم، ويتيح تحليلاً قابلاً للتوسّع على نطاق بيتابايت من البيانات. وهي تُبرِز في طلبات البحث بتنسيق SQL بسرعة عالية وتتوافق مع البيانات الجغرافية المكانية.

متى يجب استخدام BigQuery أو Earth Engine؟

BigQuery Earth Engine
نوع البيانات بيانات تحليلية مصفوفية منظَّمة في الأساس تتيح تنفيذ العمليات الجغرافية المكانية على بيانات GEOGRAPHY. بيانات مصفوفة نقطية في الأساس، ولكن يمكن أيضًا استخدام بيانات متّجهة.
قيد المعالجة الاستعلامات المستندة إلى لغة الاستعلامات البنيوية (SQL)، والمحسَّنة لعمليات جمع وعمليات دمج على نطاق واسع دمج عميق مع BQ التعلم الآلي واجهات برمجة التطبيقات JavaScript وPython لمعالجة ملفّات raster وتحليلها، بما في ذلك معالجة ملفّات raster المتقدّمة وخوارزميات معالجة البيانات المكانية والتعلم الآلي
مقياس تخزين وتحليل على مستوى بيتابايت التركيز على معالجة البيانات الجداولية تخزين وتحليل على مستوى بيتابايت التركيز على التحليل المكاني الجغرافي، مع فرض قيود على اتّساع نطاق معالجة البيانات المتّجه
حالات الاستخدام تخزين البيانات، وذكاء الأعمال، وتحليلات المكانية الجغرافية على مجموعات بيانات متّجهة كبيرة التحليل الجغرافي المكاني، والرصد عن بُعد، والمراقبة البيئية، وتعلُّم الآلة على البيانات النقطية

البيانات المتجهّة والبيانات المركّبة

البيانات المتجهّة هي النقاط والخطوط والأشكال المتعددة الأضلاع على سطح الأرض. في 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 أو في محرر رموز 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()
      

اطّلِع على مستندات الدالة الكاملة لمزيد من المعلومات.

واجهات برمجة التطبيقات المتزامنة

لا يتوفّر موصِّل مباشر في Earth Engine لكتابة البيانات بشكل متزامن في BigQuery مباشرةً. يمكنك استخدام مكتبة عملاء BigQuery للغة المفضّلة لديك (Python أو Java أو Go أو غير ذلك) لبث البيانات إلى BigQuery، أو استخدام واجهة برمجة التطبيقات RPC Storage API لنقل البيانات في الوقت الفعلي أو بالقرب من الوقت الفعلي.

الموضوع التفاصيل
المتطلبات الأساسية يجب أن يكون المشروع مزوّدًا بواجهتَي برمجة التطبيقات 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);
      

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 للحصول على معلومات مفصّلة عن إدارة الأذونات.
التسعير إذا كنت تستخدم مشروعًا مسجَّلاً لقراءة جدول BigQuery في Earth Engine لأغراض تجارية، لن يتم تحصيل تكاليف إضافية منك مقابل استخدام Earth Engine، ولكن ستتحمل تكاليف وقت وحدة معالجة البيانات الإلكترونية (EECU) المرتبطة بمعالجة البيانات في Earth Engine. يتم تحديد مخطط الأسعار الدقيق حسب خطة Earth Engine. إذا كنت تستخدم مشروعًا مسجَّلاً للاستخدام غير التجاري، لن يتم تحصيل أي رسوم منك لقراءة البيانات من BigQuery إلى Earth Engine. على الرغم من أنّه لن يتم تحصيل رسوم منك مقابل استخدام BigQuery، فإنّه يُشترط أن يكون لمشروعك حساب فوترة مرتبط به، لأنّ BigQuery منتج تجاري. لمزيد من المعلومات عن حسابات الفوترة، يُرجى الرجوع إلى المستندات المتعلقة بموضوع تفعيل الفوترة أو إيقافها أو تغييرها. ملاحظة: في "الإصدار التجريبي الخاص"، قد يتم أيضًا تحصيل رسوم منك مقابل بث بيانات 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());
      

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 لأغراض تجارية، لن تُفرض عليك أي تكاليف إضافية في Earth Engine مرتبطة بتشغيل جدول BigQuery، ولكن ستتحمل تكاليف وقت وحدة معالجة البيانات الإلكترونية (EECU) المرتبطة بمعالجة البيانات في Earth Engine. يتم تحديد مخطط الأسعار الدقيق حسب خطة 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، ولكن ستتحمل تكاليف وقت وحدة معالجة البيانات الإلكترونية (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.
  • الحد الأقصى المسموح به لحجم سلسلة الفلتر هو 1 ميغابايت بعد التحويل
    • يمكن أن تؤدي الفلاتر المعقدة إلى سلاسل فلاتر كبيرة تتجاوز الحدّ الأقصى.
  • المُهلات
    • تطبّق Earth Engine أوقات الاستراحة على طلبات البحث، والتي يمكن أن تختلف حسب النطاق (مثل الحِزم أو الإنترنت).
  • حدود BigQuery
    • راجِع مستندات حصة BigQuery للحصول على تفاصيل عن القيود المفروضة على مهام طلبات البحث.

عناصر التحكّم في التكلفة

لا يؤدي نقل البيانات بين BigQuery وEarth Engine عادةً إلى تحمُّل تكاليف مباشرة. ومع ذلك، يمكن أن يؤثّر حجم البيانات المنقولة في تكاليف المعالجة في كلّ من BigQuery وEarth Engine.

إذا كان طلب البحث يتضمن معالجة من جانب BigQuery، سيتم تحصيل رسوم منك على BigQuery وفقًا لإعدادات BigQuery.

إذا كان الطلب يتضمن معالجة داخل Earth Engine وتم تسجيل مشروعك للاستخدام التجاري، ستتحمل رسومًا مقابل الوقت المستغرَق في معالجة طلبك في Earth Engine وفقًا لإعدادات الفوترة في Earth Engine.

السجلّات وتصحيح الأخطاء

قراءة العمليات

عند قراءة البيانات من BigQuery باستخدام ee.FeatureCollection.loadBigQueryTable()، لا يتم تسجيل العملية المقابلة بشكل صريح كطلب في BigQuery. وهذا يعني أنّه قد تظهر لك تفاصيل تسجيل أخرى (مثل سجلّات تدقيق Cloud) لا تتضمّن مهام قراءة مماثلة في BigQuery.

سجلّ طلبات البحث

يتم تسجيل طلبات البحث التي يتم تنفيذها باستخدام ee.FeatureCollection.runBigQuery() في سجلّ طلبات البحث في BigQuery الخاص بمشروعك. يمكنك الوصول إلى سجلّ طلبات البحث من خلال واجهة مستخدم BigQuery في وحدة تحكّم Cloud.