BigQuery থেকে পড়ুন

এই পৃষ্ঠায় ee.FeatureCollection.loadBigQueryTable() এবং ee.FeatureCollection.runBigQuery() পদ্ধতি ব্যবহার করে ee.FeatureCollection অবজেক্ট হিসেবে Earth Engine ওয়ার্কফ্লোতে BigQuery টেবিলগুলিকে কীভাবে একীভূত করা যায় তা বর্ণনা করা হয়েছে।

BigQuery থেকে ডেটা লোড করুন

ee.FeatureCollection.loadBigQueryTable() ফাংশনটি নির্বিঘ্নে একটি BigQuery টেবিলকে একটি ee.FeatureCollection অবজেক্টে পাঠ করে। এটি একটি নির্দিষ্ট টেবিলের সাথে সংযোগ স্থাপন করে, সমস্ত ডেটা টাইপ রূপান্তর করে, প্রয়োজনীয় ফিল্টার এবং নির্বাচক প্রয়োগ করে এবং প্রয়োজনে সংগ্রহে সূচীকরণ যোগ করে। ফাংশনটি আর্থ ইঞ্জিনের ইন্টারেক্টিভ পরিবেশ ব্যবহার করে, ফলাফলগুলি সরাসরি ক্লায়েন্টের কাছে ফেরত পাঠায় যা একটি বৃহত্তর বিশ্লেষণের উপাদান হিসাবে দেখা বা ব্যবহার করা হয়।

জাভাস্ক্রিপ্ট

// 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-ঘন্টার খরচ অন্য যেকোনো আর্থ ইঞ্জিন পদ্ধতির মতোই কলকারীকে বিল করা হয় ( EECU-এর সারসংক্ষেপ দেখুন)।

আর্থ ইঞ্জিনে ডেটা স্থানান্তর করার জন্য BigQuery-এর কোনও অতিরিক্ত খরচ নেই। ব্যবহৃত প্রকল্পের Google ক্লাউড API ড্যাশবোর্ডে ( এপিআই ব্যবহার পর্যবেক্ষণ দেখুন) BigQuery-এর সংশ্লিষ্ট ব্যবহার দৃশ্যমান হবে, তবে এইভাবে 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 কোয়েরি কাজ শুরু করে ( Run a query documentation এ কোয়েরি সম্পর্কে আরও দেখুন), যা আপনাকে মূল BigQuery ক্ষমতাগুলি ব্যবহার করার অনুমতি দেয়:

  • চাকরির ইতিহাস : আপনার প্রকল্পের ক্যোয়ারী সম্পাদনের ছয় মাসের ইতিহাস অ্যাক্সেস করুন ( লিস্ট জবস দেখুন)।
  • কোয়েরি ক্যাশিং : সম্ভব হলে BigQuery স্বয়ংক্রিয়ভাবে কোয়েরি ফলাফল ক্যাশ করে। পরবর্তী একই ধরণের কোয়েরিগুলি ক্যাশ থেকে ডেটা পুনরুদ্ধার করে, অপ্রয়োজনীয় চার্জ প্রতিরোধ করে ( ক্যাশেড কোয়েরি ফলাফল ব্যবহার করে আরও দেখুন)

প্রশ্ন সম্পর্কে জানতে অথবা BigQuery-তে কীভাবে সেগুলি ব্যবহার করবেন তা জানতে BigQuery ডকুমেন্টেশন দেখুন।

বিলিং

অনুরোধ প্রক্রিয়াকরণের সময় ব্যবহৃত EECU-এর খরচ অন্য যেকোনো আর্থ ইঞ্জিন পদ্ধতির মতোই কলকারীকে বিল করা হয় ( EECU-এর ওভারভিউ দেখুন)। এছাড়াও, BigQuery বিলিং মডেল অনুসারে একটি কোয়েরি চালানোর জন্য কলকারীকে বিল করা হয়

আর্থ ইঞ্জিনে ডেটা স্থানান্তর করার জন্য BigQuery-এর কোনও অতিরিক্ত খরচ নেই। ব্যবহৃত প্রকল্পের Google ক্লাউড API ড্যাশবোর্ডে ( এপিআই ব্যবহার পর্যবেক্ষণ দেখুন) BigQuery-এর সংশ্লিষ্ট ব্যবহার দৃশ্যমান হবে, তবে এইভাবে BigQuery ডেটা পড়ার জন্য কোনও খরচ হবে না।

ee.FeatureCollection.runBigQuery() এর সাথে সম্পর্কিত সম্ভাব্য খরচ নিয়ন্ত্রণ করতে, maxBytesBilled প্যারামিটার একটি সুরক্ষা হিসাবে কাজ করে। এই সীমা অতিক্রম করলে যেকোনো BigQuery কাজ ব্যর্থ হবে এবং বিল করা হবে না। maxBytesBilled এর ডিফল্ট মান হল 100 GB। যদি এই সীমা অতিক্রম করে আপনার কল ব্লক করা হয়, তাহলে আপনি আপনার স্ক্রিপ্টে একটি ভিন্ন মান নির্দিষ্ট করতে পারেন।

পূর্বশর্ত এবং অনুমতি

এই বৈশিষ্ট্যটি ব্যবহার করার জন্য, কলারের ক্লাউড প্রজেক্টে BigQuery API এবং BigQuery স্টোরেজ API সক্ষম থাকা প্রয়োজন। উপযুক্ত API সক্ষম করতে Enable API পৃষ্ঠার নির্দেশাবলী অনুসরণ করুন।

স্ট্যান্ডার্ড আর্থ ইঞ্জিনের ভূমিকা এবং অনুমতি ছাড়াও, আপনার উল্লেখিত 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 স্ট্যাকে স্থানান্তর করে, তবে এটি দুটি সীমাবদ্ধতার সাপেক্ষেও:

  1. BigQuery-এর অন্যান্য কোয়েরির মতো ( BigQuery quotas দেখুন) এই অনুরোধটিও ১০ মেগাবাইটের মধ্যে সীমাবদ্ধ। এর অর্থ হল পাস করা ফিল্টারগুলি খুব বেশি জটিল হতে পারে না। ১০ মেগাবাইটের সীমা অতিক্রম করলে নিম্নলিখিত ত্রুটি দেখা দেয়:

    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() ব্যবহার করার কথা বিবেচনা করুন।

  2. কিছু জটিল আর্থ ইঞ্জিন ফিল্টার তাদের BigQuery সমতুল্যগুলিতে রূপান্তর করা যায় না। উদাহরণস্বরূপ, BigQuery ARRAY সমতা পরীক্ষা সমর্থন করে না। এই ধরনের ক্ষেত্রে, আমরা ফিল্টারটি অনুবাদ করি না এবং ডেটা পড়ার পরে এটি Earth Engine-এ প্রয়োগ করি।

ডেটা ইনডেক্সিং

আর্থ ইঞ্জিন সংগ্রহগুলি অভ্যন্তরীণ সূচীকরণের উপর নির্ভর করে, যেখানে 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() পদ্ধতিতে কোয়েরি ফলাফলের আকারের উপর ১০ গিগাবাইট সীমা আরোপ করা হয়েছে। যদিও সোর্স টেবিলগুলি ইচ্ছামত আকারের হতে পারে, বৃহত্তর ডেটা ভলিউম প্রক্রিয়াকরণের ফলে কোয়েরি খরচ বেড়ে যাবে।

  • অনুবাদিত ফিল্টারের আকার ১০ এমবি পর্যন্ত সীমাবদ্ধ। বিস্তারিত জানার জন্য ডেটা ফিল্টারিং বিভাগটি দেখুন।

  • Earth Engine অ্যাপের সাথে 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')
          
  • স্বয়ংক্রিয়ভাবে তৈরি আইডি ব্যবহার করে BigQuery টেবিলের জন্য system:index এ যোগদান করলে অপ্রত্যাশিত আচরণ ঘটতে পারে। এটি যাতে না ঘটে তার জন্য, BigQuery টেবিলে system:index ম্যানুয়ালি যোগ করার কথা বিবেচনা করুন অথবা অন্য কোনও প্রপার্টিতে টেবিলটি যোগ করার কথা বিবেচনা করুন। ডেটা ইনডেক্সিং বিভাগে ইনডেক্সিং সম্পর্কে আরও পড়ুন।

  • ee.FeatureCollection.randomColumn() পদ্ধতিটি BigQuery-এর স্বয়ংক্রিয়ভাবে তৈরি আইডিগুলির সাথে কাজ করে না। ee.FeatureCollection.randomColumn() পদ্ধতিতে rowKeys প্যারামিটার ব্যবহার করে একটি বিকল্প কী নির্দিষ্ট করার কথা বিবেচনা করুন। আপনি BigQuery সোর্স টেবিলে ম্যানুয়ালি random বা system:index কলাম যোগ করতে পারেন। ডেটা ইনডেক্সিং বিভাগে ইনডেক্সিং সম্পর্কে আরও পড়ুন।