इस पेज पर, ee.FeatureCollection
ऑब्जेक्ट के तौर पर BigQuery टेबल को Earth Engine वर्कफ़्लो में इंटिग्रेट करने का तरीका बताया गया है. इसके लिए, ee.FeatureCollection.loadBigQueryTable()
और ee.FeatureCollection.runBigQuery()
तरीकों का इस्��ेमाल किया जाता है.
BigQuery से डेटा लोड करना
ee.FeatureCollection.loadBigQueryTable()
फ़ंक्शन, BigQuery टेबल को ee.FeatureCollection
ऑब्जेक्ट में आसानी से पढ़ता है. यह किसी तय टेबल से कनेक्ट होता है, सभी डेटा टाइप को बदलता है, ज़रूरी फ़िल्टर और सिलेक्टर लागू करता है, और ज़रूरत पड़ने पर कलेक्शन में इंडेक्सिंग जोड़ता है. यह फ़ंक्शन, Earth Engine के इंटरैक्टिव
एनवायरमेंट का इस्तेमाल करता है. साथ ही, सीधे क्लाइंट को नतीजे दिखाता है, ताकि उन्हें बड़े विश्लेषण के कॉम्पोनेंट के तौर पर देखा या इस्तेमाल किया जा सके.
JavaScript
// Load the BigQuery table with a specified geometry column. var features = ee.FeatureCollection.loadBigQueryTable({ table: 'my_project.my_dataset.my_table', geometryColumn: 'geo' }); // Display features on the map. Map.addLayer(features);
Python
# Load the BigQuery table with a specified geometry column. features = ee.FeatureCollection.loadBigQueryTable( table='my_project.my_dataset.my_table', geometryColumn='geo') # Display the first feature. display(features.first().getInfo())
बिलिंग
अनुरोध को प्रोसेस करने के दौरान इस्तेमाल किए गए ईईसीयू-घंटों की कीमत, Earth Engine के किसी भी दूसरे तरीके की तरह ही कॉल करने वाले व्यक्ति से ली जाती है. ईईसीयू की खा�� जानकारी देखें.
Earth Engine में डेटा ट्रांसफ़र करने पर, BigQuery के लिए कोई अतिरिक्त शुल्क नहीं लिया जाता. BigQuery के इस्तेमाल से जुड़ी जानकारी, इस्तेमाल किए गए प्रोजेक्ट के Google Cloud API डैशबोर्ड में दिखेगी. इसके लिए, एपीआई के इस्तेमाल को मॉनिटर करना देखें. हालांकि, इस तरह से BigQuery डेटा पढ़ने पर कोई शुल्क नहीं लिया जाएगा.
BigQuery से डेटा क्वेरी करना
ee.FeatureCollection.runBigQuery()
तरीका, BigQuery एसक्यूएल क्वेरी चलाता है और नतीजों को ee.FeatureCollection
ऑब्जेक्ट के तौर पर दिखाता है. क्वेरी के बारे में ज़्यादा जानने के लिए, क्वेरी दस्तावेज़ चलाएं लेख पढ़ें.
JavaScript
// Construct a BigQuery query. var query = 'SELECT * FROM my_project.my_dataset.my_table WHERE column > 1000'; // Run the query and return 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 column > 1000' # Run the query and retrieve the results as a FeatureCollection. features = ee.FeatureCollection.runBigQuery(query) # Print the first feature. print(features.first().getInfo())
BigQuery क्वेरी
ee.FeatureCollection.runBigQuery()
पर किए गए हर कॉल से, एक अलग BigQuery क्वेरी जॉब शुरू होता है. क्वेरी चलाने के दस्तावेज़ में क्वेरी के बारे में ज़्यादा जानें. इससे, BigQuery की मुख्य सुविधाओं का इस्तेमाल किया जा सकता है:
- जॉब का इतिहास: अपने प्रोजेक्ट की क्वेरी के क्रियान्वयन का छह महीने का इतिहास ऐक्सेस करें. ज़्यादा जानकारी के लिए, जॉब की सूची पर जाएं.
- क्वेरी कैश मेमोरी में सेव करना: BigQuery, जब भी संभव हो, क्वेरी के नतीजों को अपने-आप कैश मेमोरी में सेव करता है. एक जैसी क्वेरी करने पर, कैश मेमोरी से डेटा वापस पाया जाता है. इससे, बार-बार शुल्क लगने से बचा जा सकता है. ज़्यादा जानकारी के लिए, कैश मेमोरी में सेव क��� गई क्वेरी के नतीजों का इस्तेमाल करना लेख पढ़ें
क्वेरी के बारे में जानने या BigQuery में उनका इस्तेमाल करने का तरीका जानने के लिए, BigQuery के दस्तावेज़ देखें.
बिलिंग
अनुरोध को प्रोसेस करने के दौरान इस्तेमाल किए गए ईईसीयू की लागत, कॉल करने वाले व्यक्ति से उसी तरह ली जाती है जिस तरह Earth Engine के किसी अन्य तरीके के लिए ली जाती है. ज़्यादा जानकारी के लिए, ईईसीयू की खास जानकारी देखें. इसके अलावा, BigQuery के बिलिंग मॉडल के हिसाब से, कॉल करने वाले व्यक्ति से क्वेरी चलाने का शुल्क लिया जाता है.
Earth Engine में डेटा ट्रांसफ़र करने पर, BigQuery के लिए कोई अतिरिक्त शुल्क नहीं लिया जाता. BigQuery के इस्तेमाल से जुड़ी जानकारी, इस्तेमाल किए गए प्रोजेक्ट के Google Cloud API डैशबोर्ड में दिखेगी. इसके लिए, एपीआई के इस्तेमाल को मॉनिटर करना देखें. हालांकि, इस तरह से BigQuery डेटा पढ़ने पर कोई शुल्क नहीं लिया जाएगा.
ee.FeatureCollection.runBigQuery()
से जुड़ी संभावित लागतों को कंट्रोल करने के लिए,
maxBytesBilled
पैरामीटर एक सुरक्षा के तौर पर काम करता है. इस सीमा से ज़्यादा समय लेने वाली कोई भी BigQuery जॉब पूरी नहीं होगी और उसका शुल्क नहीं लिया जाएगा. maxBytesBilled
की डिफ़ॉल्ट वैल्यू 100 जीबी होती है. अगर इस सीमा से ज़्यादा कॉल आने पर आपका कॉल ब्लॉक हो जाता है, तो अपनी स्क्रिप्ट में कोई दूसरी वैल्यू दी जा सकती है.
ज़रूरी शर्तें और अनुमतियां
इस सुविधा का इस्तेमाल करने के लिए, कॉल करने वाले के Cloud प्रोजेक्ट में BigQuery API और BigQuery Storage API चालू होने चाहिए. ज़रूरी एपीआई चालू करने के लिए, एपीआई चालू करें पेज पर दिए गए निर्देशों का पालन करें.
Earth Engine की स्टैंडर्ड भूमिकाओं और अनुमतियों के अलावा, आपके पास रेफ़र की गई BigQuery टेबल को पढ़ने का ऐक्सेस होना चाहिए. साथ ही, टारगेट प्रोजेक्ट में, पढ़ने के सेशन और जॉब बनाने की अनुमति भी होनी चाहिए. BigQuery में ये अनुमतियां ज़रूरी हैं:
bigquery.tables.get
(ऐक्सेस की गई किसी भी टेबल पर)bigquery.tables.getData
(ऐक्सेस की गई किसी भी टेबल पर)bigquery.readSession.create
bigquery.jobs.create
अनुमतियों को मैनेज करने के बारे में ज़्यादा जानकारी के लिए, BigQuery के ऐक्सेस कंट्रोल के दस्तावेज़ देखें.
डेटा को फ़िल्टर करना
हर ee.FeatureCollection
को .filter(Filter)
तरीके का इस्तेमाल करके फ़िल्टर क���या जा सकता है. Google Earth Engine के उपयोगकर्ताओं को, BigQuery के टेबल वाले डेटा को तेज़ी से प्रोसेस करने की सुविधा का फ़ायदा देने के लिए, हम Earth Engine फ़िल्टर को ऐसी भाषा में बदल देते हैं जिसे BigQuery समझ सके. साथ ही, हम उन्हें टेबल पढ़ने के अनुरोध के साथ भेजते हैं. इस तरीके से, फ़िल्टर प्रोसेसिंग को BigQuery स्टैक पर ले जाया जाता है. हालांकि, इसमें ये दो सीमाएं भी हैं:
BigQuery में मौजूद हर दूसरी क्वेरी की तरह (BigQuery के कोटा देखें), यह अनुरोध 10 एमबी तक का हो सकता है. इसका मतलब है कि पास किए गए फ़िल्टर बहुत जटिल नहीं होने चाहिए. 10 एमबी की सीमा पार करने पर, यह गड़बड़ी दिखती है:
Filter sent to BigQuery is too long. This error may be caused by too complicated geometry in geometry filters. Consider simplifying the filter and used values.
कई वर्टिसेस वाली ज्यामितियों के हिसाब से फ़िल्टर करने पर, आम तौर पर यह गड़बड़ी होती है. इस समस्या को हल करने के लिए, समस्या वाले ऑब्जेक्ट पर ee.Geometry.simplify() का इस्तेमाल करें.
Earth Engine के कुछ ज़्यादा जटिल फ़िल्टर, BigQuery के बराबर के फ़िल्टर में बदले नहीं जा सकते. उदाहरण के लिए, BigQuery में ARRAY के बराबर होने की जांच करने की सुविधा काम नहीं करती. ऐसे मामलों में, हम फ़िल्टर का अनुवाद नहीं करते. इसके बजाय, डेटा को पढ़ने के बाद, हम उसे Earth Engine में लागू करते हैं.
डेटा को इंडेक्स करना
Earth Engine कलेक्शन, इंटरनल इंडेक्सिंग पर निर्भर करते हैं. वहीं, BigQuery में टेबल को इंडेक्स करने का सुझाव नहीं दिया जाता. इन दोनों सिस्टम को एक साथ काम करने के लिए, हम इस तरह से कलेक्शन इंडेक्स बनाते हैं:
अगर BigQuery टेबल में
system:index
नाम का कॉलम है, तो हम इसका ��स्तेमाल, FeatureCollection को इंडेक्स करने के लिए करते हैं.ऐसे मामलों में, यह पक्का करना कॉलर की ज़िम्मेदारी है कि इंडेक्स यूनीक हों. ऐसा न करने पर, कलेक्शन अनचाहे तरीके से काम कर सकता है. फ़ीचर इंडेक्स, खाली स्ट्रिंग नहीं होनी चाहिए. इसलिए,
system:index
कॉलम के लिए स्ट्रिंग याnull
वैल्यू के बिना BigQuery टेबल लोड नहीं की जा सकती.अगर BigQuery टेबल में
system:index
कॉलम नहीं है, तो वह अपने-आप जनरेट हो जाता है.दो रीड रिक्वेस्ट के बीच के इंडेक्स स्थिर होते हैं. हालांकि, ऐसा सिर्फ़ तब होता है, जब फ़िल्टर को ध्यान में रखते हुए रिक्वेस्ट एक जैसे हों. ऐसा न करने पर, हम एक जैसी सुविधाओं के लिए इंडेक्स पर भरोसा नहीं कर सकते. इसलिए, अगर कॉलर के लिए यूनीक डेटा को इंडेक्स करना ज़रूरी है, तो हमारा सुझाव है कि आप BigQuery में
system:index
कॉलम को मैन्युअल तरीके से जोड़ें.
सीमाएं
ee.FeatureCollection.loadBigQueryTable()
कॉल में रेफ़र की गई टेबल के चुने गए सभी ��ॉलम ��ा साइज़ 400 जीबी तक सीमित है. इस सीमा को पार करने पर, आपको यह गड़बड़ी दिखेगी:Failed to read table from BigQuery: Requested data size is too large to read. Consider using selectors to specify only required columns.
ऐसे मामलों में, ज़रूरी कॉलम के लिए, रीड-ओनली के तौर पर सेट किए गए कॉलम के लिए ज़्यादा पाबंदी वाले सिलेक्टर चुनें. इसके अलावा, BigQuery में टेबल को प्री-प्रोसेस करने और फ़ेच किए गए डेटा की संख्या कम करने के लिए,
ee.FeatureCollection.runBigQuery()
का इस्तेमाल करें.ee.FeatureCollection.runBigQuery()
के तरीके से, क्वेरी के नतीजों के साइज़ पर 10 जीबी की सीमा लागू होती है. सोर्स टेबल का साइज़, अपनी पसंद के मुताबिक हो सकता है. हालांकि, ज़्यादा डेटा प्रोसेस करने पर, क्वेरी की लागत बढ़ जाएगी.अनुवाद किए गए फ़िल्टर का साइज़ 10 एमबी तक सीमित है. ज़्यादा जानकारी के लिए, डेटा फ़िल्टर करना सेक्शन देखें.
Earth Engine ऐप्लिकेशन में
ee.FeatureCollection.loadBigQueryTable()
याee.FeatureCollection.runBigQuery()
का इस्तेमाल नहीं किया जा सकता.
चेतावनियां
ee.FeatureCollection.loadBigQueryTable()
लिंक किए गए डेटासेट के संसाधनों के साथ काम नहीं करता. ऐसी टेबल से डेटा लोड करने पर, "टेबल नहीं मिली" गड़बड़ी का मैसेज मिलता है.इस समस्या को हल करने के लिए, लिंक किए गए डेटासेट से अनुरोध की गई टेबल की जानकारी देने वाली क्वेरी के साथ
ee.FeatureCollection.runBigQuery()
को चलाएं. उदाहरण के लिए:JavaScript
var features = ee.FeatureCollection.runBigQuery({ query: 'SELECT * FROM my_project.my_linked_dataset.my_table', geometryColumn: 'geo' });
Python
features = ee.FeatureCollection.runBigQuery( query='SELECT * FROM my_project.my_linked_dataset.my_table', geometryColumn='geo')
अपने-आप जनरेट हुए आईडी वाली BigQuery टेबल के लिए
system:index
से जॉइन करने पर, अचानक से गड़बड़ियां हो सकती हैं. ऐसा होने से रोकने के लिए,system:index
को मैन्युअल तरीके से BigQuery टेबल में जोड़ें या टेबल को किसी दूसरी प्रॉपर्टी से जॉइन कर���ं. इंडेक्स करने के बारे में ज़्यादा जानने के लिए, डेटा को इंडेक्स करने के बारे में जानकारी देने वाले सेक्शन पर जाएं.ee.FeatureCollection.randomColumn()
तरीका, BigQuery के अपने-आप जनरेट हुए आईडी के साथ काम नहीं करता.ee.FeatureCollection.randomColumn()
तरीके में,rowKeys
पैरामीटर का इस्तेमाल करके कोई अन्य कुंजी तय करें. BigQuery सोर्स टेबल में, मैन्युअल तरीके से भीrandom
याsystem:index
कॉलम जोड़े जा सकते हैं. इंडेक्स करने के बारे में ज़्यादा जानने के लिए, डेटा को इंडेक्स करने के बारे में जानकारी देने वाले सेक्शन पर जाएं.