Earth Engine और BigQuery

इस दस्तावेज़ में, बेहतर जियोस्पेशियल विश्लेषण के लिए, Google Earth Engine (EE) को BigQuery (BQ) के साथ इंटिग्रेट करने के बारे में दिशा-निर्देश दिए गए हैं. इसमें दोनों प्लैटफ़ॉर्म के बीच डेटा ट्रांसफ़र, परफ़ॉर्मेंस से जुड़ी बातें, सीमाएं, और लागत से जुड़े असर के बारे में बताया गया है.

BigQuery क्या है?

BigQuery, Google का बिना सर्वर वाला ऐसा डेटा वेयरहाउस है जिसे पूरी तरह से मैनेज किया जाता है. इसमें पेटाबाइट डेटा का विश्लेषण किया जा सकता है. यह तेज़ी से काम करने वाली एसक्यूएल क्वेरी के लिए बेहतर है और भौगोलिक डेटा के साथ काम करता है.

मुझे BigQuery या Earth Engine का इस्तेमाल कब करना चाहिए?

BigQuery Earth Engine
डेटा टाइप मुख्य रूप से स्ट्रक्चर्ड, विश्लेषण वाला वैक्टर डेटा. GEOGRAPHY डेटा पर जियोस्पेशियल ऑपरेशन की सुविधा देता है. मुख्य रूप से रेस्टर डेटा, लेकिन वेक्टर डेटा के साथ भी काम करता है.
प्रोसेस जारी है एसक्यूएल पर आधारित क्वेरी, जो बड़े पैमाने पर एग्रीगेशन और जॉइन के लिए ऑप्टिमाइज़ की गई हैं. 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 के कोड एडिटर में जाकर देखा और कंट्रोल किया जा सकता है.

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 का इस्तेमाल करने पर, आपको शुल्क चुकाने होंगे. इसमें, BigQuery में एक्सपोर्ट किए गए Earth Engine डेटा को स्टोर और विश्लेषण करने का शुल्क भी शामिल है. ज़्यादा जानकारी के लिए, 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 ऐक्सेस कंट्रोल से जुड़ा दस्तावेज़ पढ़ें.
कीमत अगर आपने Earth Engine का व्यावसायिक तौर पर इस्तेमाल करने के लिए रजिस्टर किया गया कोई प्रोजेक्ट इस्तेमाल किया है, तो BigQuery टेबल को पढ़ने के लिए, आपको Earth Engine के लिए कोई अतिरिक्त शुल्क नहीं देना होगा. हालांकि, Earth Engine में डेटा को प्रोसेस करने के लिए, आपको ईईसीयू के हिसाब से शुल्क देना होगा. कीमत की सटीक योजना, आपके Earth Engine प्लान के हिसाब से तय की जाती है. अगर आपने गैर-व्यावसायिक इस्तेमाल के लिए रजिस्टर किया गया प्रोजेक्ट इस्तेमाल किया है, तो BigQuery से Earth Engine में डेटा पढ़ने के लिए आपसे कोई शुल्क नहीं लिया जाएगा. BigQuery का इस्तेमाल करने के लिए आपको पैसे नहीं देने होंगे. हालांकि, कमर्शियल प्रॉडक्ट के तौर पर BigQuery का इस्तेमाल करने के लिए, आपके प्रोजेक्ट में बिलिंग खाता होना ज़रूरी है. बिलिंग खातों के बारे में ज़्यादा जानने के लिए, बिलिंग को चालू, बंद या बदलने के दस्तावेज़ देखें. ध्यान दें: निजी झलक में, BigQuery डेटा स्ट्रीमिंग के लिए भी आपसे शुल्क लिया जा सकता है.
सीमाएं सुविधा कलेक्शन के फ़िल्टर, BigQuery में भेजे जाते हैं और वहां लागू किए जाते हैं. BigQuery में, फ़िल्टर क्लॉज़ के साइज़ की सीमा होती है. अगर आपको "फ़िल्टर बहुत बड़ा है" गड़बड़ी का मैसेज दिखता है, तो फ़िल्टर को आसान बनाएं. इस सीमा को पार करने का एक सामान्य सोर्स, Earth Engine में .filterBounds() कॉल में इस्तेमाल की गई जटिल ज्यामिति हो सकती है.

Earth Engine से BigQuery क्वेरी चलाना

ee.FeatureCollection.runBigQuery() फ़ंक्शन, BigQuery टेबल के हिसाब से सीधे तौर पर एसक्यूएल क्वेरी का आकलन करने के लिए, BigQuery कैलकुलेशन को ट्रिगर करता है. साथ ही, Earth Engine FeatureCollection के तौर पर नतीजे दिखाता है.

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 के व्यावसायिक इस्तेमाल के लिए रजिस्टर किया गया है, तो BigQuery टेबल को चलाने के लिए, आपको Earth Engine के लिए कोई अतिरिक्त शुल्क नहीं देना होगा. हालांकि, 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 के लिए कोई अतिरिक्त शुल्क नहीं देना होगा. हालांकि, Earth Engine में डेटा को प्रोसेस करने के लिए, आपको ईईसीयू के हिसाब से शुल्क देना होगा. कीमत की सटीक योजना, आपके Earth Engine प्लान के हिसाब से तय होती है. अगर आपके पास ऐसे प्रोजेक्ट का ऐक्सेस है जिसे गैर-व्यावसायिक मकसद से रजिस्टर किया गया है, तो BigQuery से Earth Engine में डेटा पढ़ने पर आपसे कोई शुल्क नहीं लिया जाएगा.

परफ़ॉर्मेंस

BigQuery में क्वेरी ऑप्टिमाइज़ेशन के अलावा, Earth Engine में नतीजे दिखाने की परफ़ॉर्मेंस, नतीजों के साइज़ (यानी, BigQuery से पढ़े गए बाइट की संख्या) और नतीजों में मौजूद ज्यामिति की जटिलता पर निर्भर करती है.

फ़िल्टर

फ़िल्टर करने के सबसे सही तरीकों में ये शामिल हैं:

  • जल्द और बार-बार फ़िल्टर करना: डेटा प्रोसेस करने वाली लाइन में, फ़िल्टर को जल्द से जल्द लागू करें. आम तौर पर, BigQuery एसक्यूएल क्वेरी में फ़िल्टर लागू करें. इससे, Earth Engine के ज़रिए ट्रांसफ़र और प्रोसेस किए जाने वाले डेटा की मात्रा कम हो जाती है.
  • ज़्यादा चुनिंदा बनाएं: ऐसे फ़िल्टर बनाएं जो डेटा के छोटे और ज़्यादा सटीक सबसेट को चुनें. ज़रूरत से ज़्यादा बड़े फ़िल्टर इस्तेमाल करने से बचें, क्योंकि इससे ग़ैर-ज़रूरी डेटा मिलता है.
  • फ़िल्टर को आपस में जोड़ना: बेहतर नतीजे पाने के लिए, एक साथ कई फ़िल्टर की शर्तों का इस्तेमाल करें.
  • आसान बनाएं: जब भी हो सके, जटिल फ़िल्टर को आसान शर्तों में बांटें, ताकि फ़िल्टर स्ट्रिंग के साइज़ की 1 एमबी की सीमा से ज़्यादा न हो.
  • क्लस्टर करना: क्लस्टर किए गए कॉलम के मुकाबले, भौगोलिक क्वेरी बेहतर परफ़ॉर्म कर सकती हैं.
  • BigQuery में फ़िल्टर करने का सुझाव दें: डेटा का साइज़ कम करने के लिए, Earth Engine में आगे की प्रोसेसिंग से पहले, BigQuery में शुरुआती फ़िल्टर करना हमेशा बेहतर होता है. अगर ऐसा नहीं किया जा सकता, तो BigQuery से डेटा लोड करने के बाद, अपनी Earth Engine स्क्रिप्ट में पोस्ट-फ़िल्टर के तौर पर अतिरिक्त फ़िल्टर लागू करें.

सिस्टम-वाइड सीमाएं

  • टेबल का साइज़ 400 जीबी से ज़्यादा नहीं होना चाहिए
    • Earth Engine, 400 जीबी से बड़ी टेबल को पढ़ने की अनुमति नहीं देता.
  • 10 जीबी के इंटरमीडिएट टेबल साइज़
    • हर क्वेरी के नतीजे का साइज़ 10 जीबी तक सीमित है. सिर्फ़ ज़रूरी कॉलम चुनकर, अपनी क्वेरी को ज़्यादा चुनिंदा बनाएं. उदाहरण के लिए, LIMIT और WHERE क्लॉज़ जोड़कर.
    • Earth Engine, BigQuery में स्कैन किए जाने वाले डेटा की सीमा तय करता है.
  • ट्रांसफ़ॉर्मेशन के बाद, फ़िल्टर स्ट्रिंग का साइज़ 1 एमबी से ज़्यादा नहीं होना चाहिए
    • जटिल फ़िल्टर की वजह से, फ़िल्टर की बड़ी स्ट्रिंग बन सकती हैं, जो तय सीमा से ज़्यादा हो सकती हैं.
  • टाइम आउट
    • Earth Engine, क्वेरी पर टाइम आउट लागू करता है. यह टाइम आउट, रीएल्म (जैसे, बैच, ऑनलाइन) के हिसाब से अलग-अलग हो सकता है.
  • BigQuery की सीमाएं

लागत कंट्रोल

आम तौर पर, BigQuery और Earth Engine के बीच डेटा ट्रांसफ़र करने पर कोई सीधा शुल्क नहीं लिया जाता. हालांकि, ट्रांसफ़र किए गए डेटा के साइज़ से, BigQuery और Earth Engine, दोनों में डेटा प्रोसेस करने की लागत पर असर पड़ सकता है.

अगर किसी क्वेरी को प्रोसेस करने के लिए BigQuery का इस्तेमाल किया जाता है, तो आपके BigQuery कॉन्फ़िगरेशन के हिसाब से, आपको BigQuery के लिए शुल्क देना होगा.

अगर किसी क्वेरी को प्रोसेस करने के लिए Earth Engine का इस्तेमाल किया जाता है और आपका प्रोजेक्ट, व्यावसायिक इस्तेमाल के लिए रजिस्टर किया गया है, तो आपको Earth Engine के बिलिंग कॉन्फ़िगरेशन के हिसाब से, Earth Engine के ईईसीयू के हिसाब से शुल्क चुकाने होंगे.

लॉग और डीबग करना

कार्रवाइयों को पढ़ना

ee.FeatureCollection.loadBigQueryTable() का इस्तेमाल करके BigQuery से डेटा पढ़ते समय, उससे जुड़े ऑपरेशन को BigQuery में साफ़ तौर पर जॉब के तौर पर लॉग नहीं किया जाता. इसका मतलब है कि आपको लॉगिंग की अन्य जानकारी (जैसे, Cloud ऑडिट लॉग) दिख सकती है, जिनके लिए कोई BigQuery रीड जॉब नहीं है.

क्वेरी का इतिहास

ee.FeatureCollection.runBigQuery() का इस्तेमाल करके, जिन क्वेरी को चलाया जाता है उन्हें आपके प्रोजेक्ट के BigQuery क्वेरी इतिहास में लॉग किया जाता है. Cloud कंसोल में BigQuery यूज़र इंटरफ़ेस (यूआई) की मदद से, अपनी क्वेरी का इतिहास ऐक्सेस किया जा सकता है.