এই পৃষ্ঠাটি ee.FeatureCollection.loadBigQueryTable()
এবং ee.FeatureCollection.runBigQuery()
পদ্ধতি ব্যবহার করে আর্থ ইঞ্জিন ওয়ার্কফ্লোতে BigQuery টেবিলগুলিকে ee.FeatureCollection
অবজেক্ট হিসাবে সংহত করার বর্ণনা দেয়৷
BigQuery থেকে ডেটা লোড করুন
ee.FeatureCollection.loadBigQueryTable()
ফাংশনটি একটি ee.FeatureCollection
অবজেক্টে একটি BigQuery টেবিলকে নির্বিঘ্নে পাঠ করে। এটি একটি নির্দিষ্ট টেবিলের সাথে সংযোগ করে, সমস্ত ডেটা প্রকার রূপান্তর করে, প্রয়োজনীয় ফিল্টার এবং নির্বাচক প্রয়োগ করে এবং প্রয়োজনে সংগ্রহে সূচী যোগ করে। ফাংশনটি আর্থ ইঞ্জিনের ইন্টারেক্টিভ এনভায়রনমেন্ট ব্যবহার করে, ক্লায়েন্টের কাছে সরাসরি ফলাফল ফেরত দেয় যা একটি বৃহত্তর বিশ্লেষণের একটি উপাদান হিসেবে দেখা বা ব্যবহার করা হয়।
জাভাস্ক্রিপ্ট
// 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);
পাইথন
# 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())
বিলিং
অনুরোধের প্রক্রিয়াকরণের সময় ব্যবহৃত EECU-ঘন্টার খরচ অন্য যেকোনো আর্থ ইঞ্জিন পদ্ধতির মতো কলারের কাছে বিল করা হয় ( EECUs ওভারভিউ দেখুন)।
আর্থ ইঞ্জিনে ডেটা স্থানান্তর করার সাথে সম্পর্কিত কোনও অতিরিক্ত BigQuery খরচ নেই৷ অনুরূপ BigQuery ব্যবহার ব্যবহৃত প্রকল্পের Google ক্লাউড API ড্যাশবোর্ডে দৃশ্যমান হবে ( এপিআই ব্যবহার পর্যবেক্ষণ করুন), কিন্তু এইভাবে BigQuery ডেটা পড়ার জন্য কোনও খরচ হবে না।
BigQuery থেকে ডেটা জিজ্ঞাসা করুন
ee.FeatureCollection.runBigQuery()
পদ্ধতিটি একটি BigQuery SQL কোয়েরি চালায় এবং ফলাফলগুলিকে ee.FeatureCollection
অবজেক্ট হিসাবে প্রদান করে (কোয়েরি সম্পর্কে আরও জানতে একটি ক্যোয়ারী ডক চালান দেখুন)।
জাভাস্ক্রিপ্ট
// 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());
পাইথন
# 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 ডকুমেন্টেশন দেখুন।
বিলিং
অনুরোধের প্রক্রিয়াকরণের সময় ব্যবহৃত EECU-এর খরচ অন্য যেকোনো আর্থ ইঞ্জিন পদ্ধতির মতো কলারের কাছে বিল করা হয় ( EECUs ওভারভিউ দেখুন)। উপরন্তু BigQuery বিলিং মডেল অনুযায়ী কলারের কাছে একটি কোয়েরি চালানোর বিল করা হয় ।
আর্থ ইঞ্জিনে ডেটা স্থানান্তর করার সাথে সম্পর্কিত কোনও অতিরিক্ত BigQuery খরচ নেই৷ অনুরূপ BigQuery ব্যবহার ব্যবহৃত প্রকল্পের Google ক্লাউড API ড্যাশবোর্ডে দৃশ্যমান হবে ( এপিআই ব্যবহার পর্যবেক্ষণ করুন), কিন্তু এইভাবে BigQuery ডেটা পড়ার জন্য কোনও খরচ হবে না।
ee.FeatureCollection.runBigQuery()
এর সাথে যুক্ত সম্ভাব্য খরচ নিয়ন্ত্রণ করতে, maxBytesBilled
প্যারামিটার একটি সুরক্ষা হিসাবে কাজ করে। এই সীমা অতিক্রম করে এমন যেকোনো BigQuery কাজ ব্যর্থ হবে এবং বিল করা হবে না। maxBytesBilled
এর ডিফল্ট মান হল 100 GB৷ আপনার কল এই সীমা অতিক্রম করে ব্লক করা হলে, আপনি আপনার স্ক্রিপ্টে একটি ভিন্ন মান নির্দিষ্ট করতে পারেন।
পূর্বশর্ত এবং অনুমতি
এই বৈশিষ্ট্যটি ব্যবহার করার জন্য, কলারের ক্লাউড প্রকল্পে BigQuery API এবং BigQuery স্টোরেজ API সক্ষম থাকতে হবে৷ উপযুক্ত API সক্ষম করতে API সক্ষম করুন পৃষ্ঠায় নির্দেশাবলী অনুসরণ করুন৷
স্ট্যান্ডার্ড আর্থ ইঞ্জিনের ভূমিকা এবং অনুমতিগুলি ছাড়াও, আপনাকে উল্লেখ করা BigQuery টেবিলে পড়ার অ্যাক্সেস, লক্ষ্য প্রকল্পে পাঠের সেশন এবং চাকরি তৈরি করার অনুমতি থাকতে হবে। নির্দিষ্ট BigQuery অনুমতির প্রয়োজন হল:
-
bigquery.tables.get
(যে কোনো অ্যাক্সেস করা টেবিলে) -
bigquery.tables.getData
(যে কোনো অ্যাক্সেস করা টেবিলে) -
bigquery.readSession.create
-
bigquery.jobs.create
অনুমতি পরিচালনার বিষয়ে বিস্তারিত তথ্যের জন্য BigQuery অ্যাক্সেস কন্ট্রোল ডকুমেন্টেশন পড়ুন।
ডেটা ফিল্টারিং
প্রতিটি ee.FeatureCollection
.filter(Filter)
পদ্ধতি ব্যবহার করে ফিল্টার করা যেতে পারে। Google আর্থ ইঞ্জিন ব্যবহারকারীদের উচ্চ সমান্তরাল BigQuery ট্যাবুলার ডেটা প্রসেসিং থেকে উপকৃত হওয়ার অনুমতি দেওয়ার জন্য, আমরা আর্থ ইঞ্জিন ফিল্টারগুলিকে BigQuery দ্বারা বোধগম্য ভাষায় অনুবাদ করি এবং একটি পড়ার টেবিলের অনুরোধের সাথে সেগুলিকে একত্রে পাঠাই৷ এই পদ্ধতিটি আসলেই ফিল্টার প্রসেসিংকে BigQuery স্ট্যাকে নিয়ে যায়, কিন্তু এটি দুটি সীমাবদ্ধতারও সাপেক্ষে:
BigQuery-এর অন্যান্য কোয়েরির মতো ( BigQuery কোটা দেখুন) এই অনুরোধটি 10 MB আকারে সীমাবদ্ধ। এর অর্থ হল পাস করা ফিল্টারগুলি অত্যধিক জটিল হতে পারে না। 10 MB সীমাতে আঘাত করার ফলে নিম্নলিখিত ত্রুটি দেখা দেয়:
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() ব্যবহার করার কথা বিবেচনা করুন।
আরও কিছু জটিল আর্থ ইঞ্জিন ফিল্টারকে তাদের BigQuery সমতুল্যে রূপান্তর করা যাবে না। উদাহরণস্বরূপ, BigQuery ARRAY সমতা পরীক্ষা সমর্থন করে না। এই ধরনের ক্ষেত্রে, আমরা ফিল্টারটি অনুবাদ করি না এবং ডেটা পড়ার পরে এটিকে আর্থ ইঞ্জিনে প্রয়োগ করি।
ডেটা ইন্ডেক্সিং
আর্থ ইঞ্জিন সংগ্রহগুলি অভ্যন্তরীণ সূচীকরণের উপর নির্ভর করে, যেখানে BigQuery টেবিলগুলিকে সূচীবদ্ধ রাখতে নিরুৎসাহিত করে৷ এই দুটি সিস্টেম একসাথে কাজ করার জন্য আমরা নিম্নলিখিত উপায়ে সংগ্রহ সূচক তৈরি করি:
BigQuery টেবিলে
system:index
নামের একটি কলাম থাকলে, আমরা FeatureCollection সূচী করার জন্য এটি ব্যবহার করি।এই ধরনের ক্ষেত্রে সূচকগুলি অনন্য কিনা তা নিশ্চিত করার জন্য এটি কলারের উপর রয়েছে। অন্যথায় সংগ্রহ একটি অপ্রত্যাশিত পদ্ধতিতে খারাপ আচরণ করতে পারে. বৈশিষ্ট্য সূচী একটি অ-খালি স্ট্রিং হতে হবে, তাই একটি
system:index
কলামের জন্য একটি নন-স্ট্রিং বাnull
মান সহ BigQuery টেবিল লোড করা ব্যর্থ হবে।BigQuery টেবিলে
system:index
কলাম না থাকলে, এটি স্বয়ংক্রিয়ভাবে তৈরি হয়।দুটি পঠিত অনুরোধের মধ্যে সূচীগুলি স্থিতিশীল, তবে শুধুমাত্র অনুরোধগুলি ঠিক একই হলে, ফিল্টারগুলিকে বিবেচনায় নিয়ে। অন্যথায় আমরা একই বৈশিষ্ট্যগুলির সাথে সঙ্গতিপূর্ণ করার জন্য সূচকগুলির উপর নির্ভর করতে পারি না। তাই যদি অবিকল অনন্য ডেটা ইন্ডেক্সিং কলারের জন্য গুরুত্বপূর্ণ হয়, আমরা ম্যানুয়ালি BigQuery-এ
system:index
কলাম যোগ করার পরামর্শ দিই।
সীমাবদ্ধতা
একটি
ee.FeatureCollection.loadBigQueryTable()
কলে উল্লেখ করা টেবিলের সমস্ত নির্বাচিত কলামের আকার 400 GB-তে সীমাবদ্ধ৷ এই সীমাতে আঘাত করলে নিম্নলিখিত ত্রুটি দেখা দেবে: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 GB সীমা আরোপ করে। যদিও সোর্স টেবিলগুলি নির্বিচারে আকারের হতে পারে, বৃহত্তর ডেটা ভলিউম প্রক্রিয়াকরণ ক্যোয়ারী খরচ বৃদ্ধি করবে।অনুবাদিত ফিল্টারের আকার 10 এমবি পর্যন্ত সীমাবদ্ধ। বিস্তারিত জানার জন্য ডেটা ফিল্টারিং বিভাগটি দেখুন।
ee.FeatureCollection.loadBigQueryTable()
বাee.FeatureCollection.runBigQuery()
ব্যবহার করা আর্থ ইঞ্জিন অ্যাপগুলির সাথে উপলব্ধ নয়৷
সতর্কতা
ee.FeatureCollection.loadBigQueryTable()
লিঙ্কড ডেটাসেট থেকে সংস্থান সমর্থন করে না। এই জাতীয় টেবিল থেকে ডেটা লোড করার চেষ্টা করার ফলে "টেবিল পাওয়া যায়নি" ত্রুটি দেখা দেয়।একটি সমাধান হিসাবে,
ee.FeatureCollection.runBigQuery()
চালানোর কথা বিবেচনা করুন যাতে লিঙ্ক করা ডেটাসেট থেকে অনুরোধ করা সারণী উল্লেখ করা হয়। যেমন:জাভাস্ক্রিপ্ট
var features = ee.FeatureCollection.runBigQuery({ query: 'SELECT * FROM my_project.my_linked_dataset.my_table', geometryColumn: 'geo' });
পাইথন
features = ee.FeatureCollection.runBigQuery( query='SELECT * FROM my_project.my_linked_dataset.my_table', geometryColumn='geo')
system:index
অপ্রত্যাশিত আচরণের দিকে নিয়ে যেতে পারে। এটি যাতে না ঘটে তার জন্য, ম্যানুয়ালি BigQuery টেবিলেsystem:index
যোগ করার বা অন্য কোনো প্রপার্টিতে টেবিলে যোগ দেওয়ার কথা বিবেচনা করুন। ডেটা ইন্ডেক্সিং বিভাগে ইন্ডেক্সিং সম্পর্কে আরও পড়ুন।ee.FeatureCollection.randomColumn()
পদ্ধতি BigQuery স্বয়ংক্রিয়ভাবে তৈরি আইডিগুলির সাথে কাজ করে না।ee.FeatureCollection.randomColumn()
পদ্ধতিতেrowKeys
প্যারামিটার ব্যবহার করে একটি বিকল্প কী উল্লেখ করার কথা বিবেচনা করুন। এছাড়াও আপনি BigQuery সোর্স টেবিলেrandom
বাsystem:index
কলাম যোগ করতে পারেন। ডেটা ইন্ডেক্সিং বিভাগে ইন্ডেক্সিং সম্পর্কে আরও পড়ুন।