BQ ব্যবহার করে স্নোফ্লেক থেকে স্প্যানারে ETL বিপরীত করুন

১. গুগল ক্লাউড স্টোরেজ এবং বিগকুয়েরি ব্যবহার করে স্নোফ্লেক থেকে স্প্যানার পর্যন্ত একটি বিপরীত ETL পাইপলাইন তৈরি করুন।

ভূমিকা

এই কোডল্যাবে, স্নোফ্লেক থেকে স্প্যানার পর্যন্ত একটি রিভার্স ইটিএল পাইপলাইন তৈরি করা হয়। ঐতিহ্যগতভাবে, ইটিএল (এক্সট্র্যাক্ট, ট্রান্সফর্ম, লোড) পাইপলাইনগুলি অপারেশনাল ডাটাবেস থেকে ডেটা বিশ্লেষণের জন্য স্নোফ্লেকের মতো ডেটা গুদামে স্থানান্তর করে। একটি রিভার্স ইটিএল পাইপলাইন বিপরীত কাজ করে: এটি ডেটা গুদাম থেকে কিউরেটেড, প্রক্রিয়াজাত ডেটা আবার অপারেশনাল সিস্টেমে স্থানান্তর করে যেখানে এটি অ্যাপ্লিকেশনগুলিকে শক্তি দিতে পারে, ব্যবহারকারী-মুখী বৈশিষ্ট্যগুলি পরিবেশন করতে পারে, অথবা রিয়েল-টাইম সিদ্ধান্ত গ্রহণের জন্য ব্যবহার করা যেতে পারে।

লক্ষ্য হল একটি স্নোফ্লেক আইসবার্গ টেবিল থেকে একটি সমষ্টিগত ডেটাসেট স্প্যানারে স্থানান্তর করা, যা উচ্চ-প্রাপ্যতা অ্যাপ্লিকেশনের জন্য আদর্শ একটি বিশ্বব্যাপী বিতরণকৃত রিলেশনাল ডাটাবেস।

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

  1. আইসবার্গ ফর্ম্যাটে স্নোফ্লেক থেকে গুগল ক্লাউড স্টোরেজ (GCS):
  • প্রথম ধাপ হল স্নোফ্লেক থেকে একটি খোলা, সুনির্দিষ্ট বিন্যাসে ডেটা বের করা। টেবিলটি অ্যাপাচি আইসবার্গ ফর্ম্যাটে রপ্তানি করা হয়। এই প্রক্রিয়াটি অন্তর্নিহিত ডেটাকে Parquet ফাইলের একটি সেট হিসাবে এবং টেবিলের মেটাডেটা (স্কিমা, পার্টিশন, ফাইলের অবস্থান) JSON এবং Avro ফাইল হিসাবে লিখে। GCS-এ এই সম্পূর্ণ টেবিল কাঠামোটি স্টেজ করার ফলে ডেটা পোর্টেবল এবং আইসবার্গ ফর্ম্যাট বোঝে এমন যেকোনো সিস্টেমের কাছে অ্যাক্সেসযোগ্য হয়ে ওঠে।
  1. GCS-এ আইসবার্গ টেবিলগুলিকে BigQuery BigLake বহিরাগত টেবিলে রূপান্তর করুন:
  • GCS থেকে Spanner-এ সরাসরি ডেটা লোড করার পরিবর্তে, BigQuery একটি শক্তিশালী মধ্যস্থতাকারী হিসেবে ব্যবহৃত হয়। আপনি BigQuery-তে একটি BigLake বহিরাগত টেবিল তৈরি করবেন যা সরাসরি GCS-এ Iceberg মেটাডেটা ফাইলের দিকে নির্দেশ করবে। এই পদ্ধতির বেশ কয়েকটি সুবিধা রয়েছে:
  • কোনও ডেটা ডুপ্লিকেশন নেই: BigQuery মেটাডেটা থেকে টেবিলের কাঠামো পড়ে এবং Parquet ডেটা ফাইলগুলিকে সেগুলি গ্রহণ না করেই কোয়েরি করে, যা উল্লেখযোগ্য সময় এবং স্টোরেজ খরচ সাশ্রয় করে।
  • ফেডারেটেড কোয়েরি: এটি GCS ডেটাতে জটিল SQL কোয়েরি চালানোর অনুমতি দেয় যেন এটি একটি নেটিভ BigQuery টেবিল।
  1. স্প্যানারে BigQuery:
  • শেষ ধাপ হল BigQuery থেকে Spanner-এ ডেটা স্থানান্তর করা। আপনি BigQuery-তে একটি শক্তিশালী বৈশিষ্ট্য ব্যবহার করে এটি অর্জন করতে পারবেন যাকে EXPORT DATA query বলা হয়, যা "Reverse ETL" ধাপ।
  • অপারেশনাল রেডিনেস: স্প্যানার লেনদেনের কাজের চাপের জন্য ডিজাইন করা হয়েছে, যা অ্যাপ্লিকেশনগুলির জন্য শক্তিশালী ধারাবাহিকতা এবং উচ্চ প্রাপ্যতা প্রদান করে। স্প্যানারে ডেটা স্থানান্তরের মাধ্যমে, এটি ব্যবহারকারী-মুখী অ্যাপ্লিকেশন, API এবং অন্যান্য অপারেশনাল সিস্টেমগুলিতে অ্যাক্সেসযোগ্য করে তোলে যার জন্য কম-লেটেন্সি পয়েন্ট লুকআপ প্রয়োজন।
  • স্কেলেবিলিটি: এই প্যাটার্নটি BigQuery-এর বিশ্লেষণাত্মক ক্ষমতাকে কাজে লাগিয়ে বৃহৎ ডেটাসেট প্রক্রিয়াকরণ এবং তারপর স্প্যানারের বিশ্বব্যাপী স্কেলেবল অবকাঠামোর মাধ্যমে দক্ষতার সাথে ফলাফল পরিবেশন করার সুযোগ করে দেয়।

পরিষেবা এবং পরিভাষা

  • স্নোফ্লেক - একটি ক্লাউড ডেটা প্ল্যাটফর্ম যা একটি পরিষেবা হিসাবে ডেটা গুদাম সরবরাহ করে।
  • স্প্যানার - একটি সম্পূর্ণরূপে পরিচালিত, বিশ্বব্যাপী বিতরণ করা রিলেশনাল ডাটাবেস।
  • গুগল ক্লাউড স্টোরেজ - গুগল ক্লাউডের ব্লব স্টোরেজ অফার।
  • BigQuery - বিশ্লেষণের জন্য একটি সম্পূর্ণরূপে পরিচালিত, সার্ভারবিহীন ডেটা গুদাম।
  • আইসবার্গ - অ্যাপাচি দ্বারা সংজ্ঞায়িত একটি ওপেন টেবিল ফর্ম্যাট যা সাধারণ ওপেন-সোর্স ডেটা ফাইল ফর্ম্যাটের উপর বিমূর্ততা প্রদান করে।
  • Parquet - Apache-এর একটি ওপেন-সোর্স কলামার বাইনারি ডেটা ফাইল ফর্ম্যাট।

তুমি কি শিখবে

  • স্নোফ্লেকে ডেটা কীভাবে লোড করবেন
  • কিভাবে একটি GCS বাকেট তৈরি করবেন
  • আইসবার্গ ফর্ম্যাটে GCS-এ স্নোফ্লেক টেবিল কীভাবে রপ্তানি করবেন
  • কিভাবে একটি স্প্যানার ইনস্ট্যান্স সেট আপ করবেন
  • BigQuery-তে BigLake এক্সটার্নাল টেবিলগুলি Spanner-এ কীভাবে লোড করবেন

2. সেটআপ, প্রয়োজনীয়তা এবং সীমাবদ্ধতা

পূর্বশর্ত

  • একটি স্নোফ্লেক অ্যাকাউন্ট
  • BigQuery থেকে Spanner-এ রপ্তানি করার জন্য BigQuery এন্টারপ্রাইজ-স্তর বা উচ্চতর রিজার্ভেশন সহ একটি Google ক্লাউড অ্যাকাউন্ট প্রয়োজন।
  • একটি ওয়েব ব্রাউজারের মাধ্যমে গুগল ক্লাউড কনসোলে অ্যাক্সেস
  • গুগল ক্লাউড সিএলআই কমান্ড চালানোর জন্য একটি টার্মিনাল
  • যদি আপনার Google ক্লাউড প্রতিষ্ঠানে iam.allowedPolicyMemberDomains নীতি সক্রিয় থাকে, তাহলে একজন প্রশাসককে বহিরাগত ডোমেন থেকে পরিষেবা অ্যাকাউন্টগুলিকে অনুমতি দেওয়ার জন্য একটি ব্যতিক্রম মঞ্জুর করতে হতে পারে। প্রযোজ্য ক্ষেত্রে পরবর্তী ধাপে এটি কভার করা হবে।

সীমাবদ্ধতা

এই পাইপলাইনে কিছু সীমাবদ্ধতা এবং ডেটা টাইপের অসঙ্গতি সম্পর্কে সচেতন থাকা গুরুত্বপূর্ণ।

তুষারকণা থেকে আইসবার্গ পর্যন্ত

স্নোফ্লেক এবং আইসবার্গের মধ্যে কলামের ডেটা টাইপ ভিন্ন। তাদের মধ্যে অনুবাদ সম্পর্কে তথ্য স্নোফ্লেক ডকুমেন্টেশনে পাওয়া যাবে।

আইসবার্গ থেকে বিগকুয়েরি

Iceberg টেবিল কোয়েরি করার জন্য BigQuery ব্যবহার করার সময়, কিছু সীমাবদ্ধতা রয়েছে। সম্পূর্ণ তালিকার জন্য, BigQuery ডকুমেন্টেশন দেখুন। মনে রাখবেন যে BIGNUMERIC , INTERVAL , JSON , RANGE , অথবা GEOGRAPHY মতো প্রকারগুলি বর্তমানে সমর্থিত নয়।

BigQuery থেকে Spanner

BigQuery থেকে Spanner-এ EXPORT DATA কমান্ডটি সমস্ত BigQuery ডেটা টাইপ সমর্থন করে না। নিম্নলিখিত টাইপ সহ একটি টেবিল এক্সপোর্ট করলে একটি ত্রুটি দেখা দেবে:

  • STRUCT
  • GEOGRAPHY
  • DATETIME
  • RANGE
  • TIME

অতিরিক্তভাবে, যদি BigQuery প্রকল্পটি GoogleSQL উপভাষা ব্যবহার করে, তাহলে Spanner-এ রপ্তানির জন্য নিম্নলিখিত সংখ্যাসূচক প্রকারগুলিও সমর্থিত নয়:

  • BIGNUMERIC

সীমাবদ্ধতার একটি সম্পূর্ণ এবং হালনাগাদ তালিকার জন্য, অফিসিয়াল ডকুমেন্টেশন দেখুন: স্প্যানার সীমাবদ্ধতায় রপ্তানি করা

তুষারকণা

এই কোডল্যাবের জন্য, আপনি একটি বিদ্যমান স্নোফ্লেক অ্যাকাউন্ট ব্যবহার করতে পারেন, অথবা একটি বিনামূল্যে ট্রায়াল অ্যাকাউন্ট সেট আপ করতে পারেন।

গুগল ক্লাউড প্ল্যাটফর্ম আইএএম অনুমতি

এই কোডল্যাবের সমস্ত ধাপগুলি সম্পাদন করার জন্য গুগল অ্যাকাউন্টের নিম্নলিখিত অনুমতিগুলির প্রয়োজন হবে।

পরিষেবা অ্যাকাউন্ট

iam.serviceAccountKeys.create

পরিষেবা অ্যাকাউন্ট তৈরির অনুমতি দেয়।

স্প্যানার

spanner.instances.create

একটি নতুন স্প্যানার ইনস্ট্যান্স তৈরি করার অনুমতি দেয়।

spanner.databases.create

DDL স্টেটমেন্ট তৈরি করার অনুমতি দেয়

spanner.databases.updateDdl

ডাটাবেসে টেবিল তৈরি করতে DDL স্টেটমেন্ট চালানোর অনুমতি দেয়।

গুগল ক্লাউড স্টোরেজ

storage.buckets.create

এক্সপোর্ট করা Parquet ফাইলগুলি সংরক্ষণ করার জন্য একটি নতুন GCS বাকেট তৈরি করার অনুমতি দেয়।

storage.objects.create

এক্সপোর্ট করা Parquet ফাইলগুলিকে GCS বাকেটে লেখার অনুমতি দেয়।

storage.objects.get

BigQuery কে GCS বাকেট থেকে Parquet ফাইলগুলি পড়ার অনুমতি দেয়।

storage.objects.list

BigQuery কে GCS বাকেটে Parquet ফাইলগুলি তালিকাভুক্ত করার অনুমতি দেয়।

ডেটাফ্লো

Dataflow.workitems.lease

ডেটাফ্লো থেকে কাজের আইটেম দাবি করার অনুমতি দেয়।

Dataflow.workitems.sendMessage

ডেটাফ্লো কর্মীকে ডেটাফ্লো পরিষেবাতে বার্তা ফেরত পাঠাতে অনুমতি দেয়।

Logging.logEntries.create

ডেটাফ্লো কর্মীদের গুগল ক্লাউড লগিং-এ লগ এন্ট্রি লেখার অনুমতি দেয়।

সুবিধার জন্য, এই অনুমতিগুলি ধারণকারী পূর্বনির্ধারিত ভূমিকা ব্যবহার করা যেতে পারে।

roles/resourcemanager.projectIamAdmin

roles/iam.serviceAccountKeyAdmin

roles/spanner.instanceAdmin

roles/spanner.databaseAdmin

roles/storage.admin

roles/dataflow.serviceAgent

roles/dataflow.worker

roles/dataflow.serviceAgent

পুনঃব্যবহারযোগ্য বৈশিষ্ট্য সেটআপ করুন

এই ল্যাব জুড়ে বারবার কিছু মান প্রয়োজন হবে। এটি সহজ করার জন্য, আমরা এই মানগুলিকে পরবর্তীতে ব্যবহারের জন্য শেল ভেরিয়েবলে সেট করব।

  • GCP_REGION - নির্দিষ্ট অঞ্চল যেখানে GCP রিসোর্সগুলি অবস্থিত হবে। অঞ্চলগুলির তালিকা এখানে পাওয়া যাবে।
  • GCP_PROJECT - ব্যবহারের জন্য GCP প্রকল্প আইডি।
  • GCP_BUCKET_NAME - তৈরি করা GCS বাকেটের নাম, এবং যেখানে ডেটা ফাইলগুলি সংরক্ষণ করা হবে।
export GCP_REGION = <GCP REGION HERE> 
export GCP_PROJECT= <GCP PROJECT HERE>
export GCS_BUCKET_NAME = <GCS BUCKET NAME HERE>
export SPANNER_INSTANCE = <SPANNER INSTANCE ID HERE>
export SPANNER_DB = <SPANNER DATABASE ID HERE>

গুগল ক্লাউড প্রজেক্ট

গুগল ক্লাউডে একটি প্রকল্প হল সংগঠনের একটি মৌলিক একক। যদি কোনও প্রশাসক ব্যবহারের জন্য একটি প্রদান করে থাকেন, তাহলে এই ধাপটি এড়িয়ে যেতে পারে।

CLI ব্যবহার করে একটি প্রকল্প এভাবে তৈরি করা যেতে পারে:

gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT

প্রকল্প তৈরি এবং পরিচালনা সম্পর্কে আরও জানুন এখানে

স্প্যানার সেট আপ করুন

স্প্যানার ব্যবহার শুরু করার জন্য, আপনাকে একটি ইনস্ট্যান্স এবং একটি ডাটাবেস সরবরাহ করতে হবে। স্প্যানার ইনস্ট্যান্স কনফিগার এবং তৈরি করার বিশদ বিবরণ এখানে পাওয়া যাবে।

ইনস্ট্যান্স তৈরি করুন

gcloud spanner instances create $SPANNER_INSTANCE \
--config=regional-$GCP_REGION \
--description="Codelabs Snowflake RETL" \
--processing-units=100 \
--edition=ENTERPRISE

ডাটাবেস তৈরি করুন

gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE

৩. একটি গুগল ক্লাউড স্টোরেজ বাকেট তৈরি করুন

স্নোফ্লেক দ্বারা তৈরি পার্কেট ডেটা ফাইল এবং আইসবার্গ মেটাডেটা সংরক্ষণের জন্য গুগল ক্লাউড স্টোরেজ (GCS) ব্যবহার করা হবে। এটি করার জন্য, ফাইল গন্তব্য হিসাবে ব্যবহারের জন্য প্রথমে একটি নতুন বাকেট তৈরি করতে হবে। স্থানীয় মেশিনের টার্মিনাল উইন্ডো থেকে, এই পদক্ষেপগুলি অনুসরণ করুন।

বালতি তৈরি করুন

একটি নির্দিষ্ট অঞ্চলে (যেমন us-central1) একটি স্টোরেজ বাকেট তৈরি করতে নিম্নলিখিত কমান্ডটি ব্যবহার করুন।

gcloud storage buckets create gs://$GCS_BUCKET_NAME --location=$GCP_REGION

বাকেট তৈরি যাচাই করুন

একবার সেই কমান্ডটি সফল হয়ে গেলে, সমস্ত বাকেট তালিকাভুক্ত করে ফলাফলটি পরীক্ষা করুন। ফলাফলের তালিকায় নতুন বাকেটটি উপস্থিত হওয়া উচিত। বাকেট রেফারেন্সগুলি সাধারণত বাকেটের নামের সামনে gs:// উপসর্গ সহ প্রদর্শিত হয়।

gcloud storage ls | grep gs://$GCS_BUCKET_NAME

লেখার অনুমতি পরীক্ষা করুন

এই ধাপটি নিশ্চিত করে যে স্থানীয় পরিবেশ সঠিকভাবে প্রমাণিত হয়েছে এবং নতুন তৈরি বাকেটে ফাইল লেখার জন্য প্রয়োজনীয় অনুমতি রয়েছে।

echo "Hello, GCS" | gcloud storage cp - gs://$GCS_BUCKET_NAME/hello.txt

আপলোড করা ফাইলটি যাচাই করুন

বাকেটের মধ্যে থাকা বস্তুগুলির তালিকা তৈরি করুন। আপলোড করা ফাইলটির সম্পূর্ণ পথ প্রদর্শিত হবে।

gcloud storage ls gs://$GCS_BUCKET_NAME

আপনার নিম্নলিখিত আউটপুটটি দেখতে হবে:

gs://$GCS_BUCKET_NAME/hello.txt

বালতিতে থাকা কোনও বস্তুর বিষয়বস্তু দেখতে, gcloud storage cat ব্যবহার করা যেতে পারে।

gcloud storage cat gs://$GCS_BUCKET_NAME/hello.txt

ফাইলের বিষয়বস্তু দৃশ্যমান হওয়া উচিত:

Hello, GCS

পরীক্ষার ফাইল পরিষ্কার করুন

ক্লাউড স্টোরেজ বাকেট এখন সেট আপ করা হয়েছে। অস্থায়ী পরীক্ষার ফাইলটি এখন মুছে ফেলা যেতে পারে।

gcloud storage rm gs://$GCS_BUCKET_NAME/hello.txt

আউটপুটটি মুছে ফেলার বিষয়টি নিশ্চিত করবে:

Removing gs://$GCS_BUCKET_NAME/hello.txt...
/ [1 objects]
Operation completed over 1 objects.

৪. স্নোফ্লেক থেকে জিসিএসে রপ্তানি করা

এই ল্যাবের জন্য, আপনি TPC-H ডেটাসেট ব্যবহার করবেন, যা সিদ্ধান্ত সহায়তা সিস্টেমের জন্য একটি শিল্প-মানক মানদণ্ড। এর স্কিমা গ্রাহক, অর্ডার, সরবরাহকারী এবং যন্ত্রাংশ সহ একটি বাস্তবসম্মত ব্যবসায়িক পরিবেশের মডেল তৈরি করে, যা এটিকে বাস্তব-বিশ্ব বিশ্লেষণ এবং ডেটা চলাচলের দৃশ্যপট প্রদর্শনের জন্য নিখুঁত করে তোলে। এই ডেটাসেটটি সমস্ত স্নোফ্লেক অ্যাকাউন্টে ডিফল্টরূপে উপলব্ধ।

কাঁচা, স্বাভাবিক TPC-H টেবিল ব্যবহার করার পরিবর্তে, আপনি একটি নতুন, সমষ্টিগত টেবিল তৈরি করবেন। এই নতুন টেবিলটি orders , customer এবং nation টেবিল থেকে ডেটা একত্রিত করবে যাতে জাতীয় বিক্রয় মোটের একটি সাধারণ, সংক্ষিপ্ত দৃশ্য তৈরি করা যায়। এই প্রাক-সমষ্টিগত পদক্ষেপটি বিশ্লেষণে একটি সাধারণ অনুশীলন, কারণ এটি একটি নির্দিষ্ট ব্যবহারের ক্ষেত্রে ডেটা প্রস্তুত করে - এই পরিস্থিতিতে, একটি কার্যকরী অ্যাপ্লিকেশন দ্বারা ব্যবহারের জন্য।

স্নোফ্লেককে গুগল ক্লাউড স্টোরেজ অ্যাক্সেস করার অনুমতি দিন

স্নোফ্লেককে GCS বাকেটে ডেটা লেখার অনুমতি দেওয়ার জন্য, দুটি জিনিস তৈরি করতে হবে: একটি বহিরাগত ভলিউম এবং প্রয়োজনীয় অনুমতি

  • একটি বহিরাগত ভলিউম হল একটি স্নোফ্লেক অবজেক্ট যা একটি GCS বাকেটের একটি নির্দিষ্ট স্থানে একটি নিরাপদ লিঙ্ক প্রদান করে। এটি নিজে ডেটা সংরক্ষণ করে না, বরং স্নোফ্লেককে ক্লাউড স্টোরেজ অ্যাক্সেস করার জন্য প্রয়োজনীয় কনফিগারেশন ধারণ করে।
  • নিরাপত্তার জন্য, ক্লাউড স্টোরেজ বাকেটগুলি ডিফল্টরূপে ব্যক্তিগত থাকে। যখন একটি বহিরাগত ভলিউম তৈরি করা হয়, তখন স্নোফ্লেক একটি ডেডিকেটেড সার্ভিস অ্যাকাউন্ট তৈরি করে। এই সার্ভিস অ্যাকাউন্টটিকে বাকেট থেকে পড়ার এবং লেখার অনুমতি প্রদান করতে হবে।

একটি ডাটাবেস তৈরি করুন

  1. বাম দিকের মেনুতে, Horizon Catalog এর অধীনে, Catalog এর উপর কার্সার রাখুন, তারপর Database Explorer এ ক্লিক করুন।
  2. ডাটাবেস পৃষ্ঠায় একবার, উপরের ডানদিকে + ডাটাবেস বোতামে ক্লিক করুন।
  3. নতুন ডিবিটির নাম দিন codelabs_retl_db

একটি ওয়ার্কশিট তৈরি করুন

ডাটাবেসের বিপরীতে sql কমান্ড চালানোর জন্য, ওয়ার্কশীটের প্রয়োজন হবে।

একটি ওয়ার্কশিট তৈরি করতে:

  1. বাম দিকের মেনুতে, Work with data এর অধীনে, Projects এর উপর কার্সার রাখুন, তারপর Workspaces এ ক্লিক করুন।
  2. My Workspaces সাইড বারের অধীনে, + Add new বোতামে ক্লিক করুন এবং SQL File নির্বাচন করুন।

একটি বহিরাগত ভলিউম তৈরি করুন

ভলিউম তৈরি করতে একটি স্নোফ্লেক ওয়ার্কশিটে নিম্নলিখিত কমান্ডটি চালান।

CREATE EXTERNAL VOLUME codelabs_retl_ext_vol
STORAGE_LOCATIONS = 
(
  (
    NAME = 'codelabs_retl_ext_vol'
    STORAGE_PROVIDER = 'GCS'
    STORAGE_BASE_URL = 'gcs://<Your bucket name>/snowflake_extvol'
  )
); 

স্নোফ্লেক সার্ভিস অ্যাকাউন্ট পান

স্নোফ্লেক যে অনন্য পরিষেবা অ্যাকাউন্ট তৈরি করেছে তা পেতে নতুন তৈরি বহিরাগত ভলিউমটি DESC (বর্ণনা করুন)।

DESC EXTERNAL VOLUME codelabs_retl_ext_vol;
  1. ফলাফলের প্যানেলে, json প্রোপার্টিগুলি খুঁজুন। property_value এন্ট্রিটি খুঁজুন যাতে "NAME":"codelabs_retl_ext_vol"
  2. json অবজেক্টের মধ্যে STORAGE_GCP_SERVICE_ACCOUNT প্রপার্টিটি খুঁজুন এবং এর মানটি কপি করুন (এটি দেখতে একটি ইমেল ঠিকানার মতো হবে)। এটি হল পরিষেবা অ্যাকাউন্ট শনাক্তকারী যার GCS বাকেট অ্যাক্সেস প্রয়োজন।
  3. পরে পুনঃব্যবহারের জন্য আপনার শেল ইনস্ট্যান্সের একটি পরিবেশ ভেরিয়েবলে এই পরিষেবা অ্যাকাউন্টটি সংরক্ষণ করুন।
export GCP_SERVICE_ACCOUNT=<Your service account>

স্নোফ্লেকের জন্য GCS-কে অনুমতি দিন

এখন, স্নোফ্লেক পরিষেবা অ্যাকাউন্টকে GCS বাকেটে লেখার অনুমতি দিতে হবে।

gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
    --member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
    --role="roles/storage.objectAdmin"

gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
    --member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
    --role="roles/storage.legacyBucketReader"

স্নোফ্লেকে অ্যাক্সেস যাচাই করুন

স্নোফ্লেক ওয়ার্কশিটে ফিরে, স্নোফ্লেক এখন সফলভাবে GCS বাকেটের সাথে সংযোগ করতে পারে কিনা তা যাচাই করতে এই কমান্ডটি চালান।

SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('codelabs_retl_ext_vol');

ফলাফলটি "success":true ধারণকারী একটি JSON অবজেক্ট হওয়া উচিত।

স্নোফ্লেকের বহিরাগত ভলিউম সম্পর্কে আরও তথ্যের জন্য, অফিসিয়াল ডকুমেন্টেশন দেখুন।

নমুনা অর্ডার ডেটা রপ্তানি করুন

এখন আপনি স্নোফ্লেকে একটি আইসবার্গ টেবিল তৈরি করতে পারেন। নিম্নলিখিত কমান্ডটি স্নোফ্লেককে একটি কোয়েরি চালাতে এবং আইসবার্গ ফর্ম্যাট ব্যবহার করে ফলাফলগুলি GCS-এ সংরক্ষণ করতে বলে। ডেটা ফাইলগুলি Parquet হবে এবং মেটাডেটা Avro এবং JSON হবে, সমস্তই codelabs_retl_ext_vol এক্সটার্নাল ভলিউম দ্বারা নির্ধারিত স্থানে সংরক্ষণ করা হবে।

একটি ডাটাবেস তৈরি করুন

  1. বাম দিকের মেনুতে, Horizon Catalog এর অধীনে, Catalog এর উপর কার্সার রাখুন, তারপর Database Explorer এ ক্লিক করুন।
  2. ডাটাবেস পৃষ্ঠায় একবার, উপরের ডানদিকে + ডাটাবেস বোতামে ক্লিক করুন।
  3. নতুন ডিবিটির নাম দিন codelabs_retl_db
USE DATABASE codelabs_retl_db; 

CREATE ICEBERG TABLE REGIONAL_SALES_ICEBERG (
    NATION_NAME STRING,
    MARKET_SEGMENT STRING,
    ORDER_YEAR INTEGER,
    ORDER_PRIORITY STRING,
    TOTAL_ORDER_COUNT INTEGER,
    TOTAL_REVENUE NUMBER(24,2),
    UNIQUE_CUSTOMER_COUNT INTEGER
) 
EXTERNAL_VOLUME = 'codelabs_retl_ext_vol'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'regional_sales_iceberg'
AS (
    SELECT 
        n.n_name AS nation_name,
        c.c_mktsegment AS market_segment,
        YEAR(o.o_orderdate) AS order_year,
        o.o_orderpriority AS order_priority,
        COUNT(o.o_orderkey) AS total_order_count,
        ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
        COUNT(DISTINCT c.c_custkey) AS unique_customer_count
    FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.orders AS o
    INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.customer AS c 
        ON o.o_custkey = c.c_custkey
    INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.nation AS n
        ON c.c_nationkey = n.n_nationkey
    GROUP BY 
        n.n_name, 
        c.c_mktsegment, 
        YEAR(o.o_orderdate), 
        o.o_orderpriority
);

স্নোফ্লেক ব্যবহার করে আইসবার্গ টেবিল তৈরি এবং পরিচালনা সম্পর্কে আরও তথ্যের জন্য, অফিসিয়াল ডকুমেন্টেশন দেখুন।

GCP-তে ডেটা যাচাই করুন

এবার GCS বাকেটটি পরীক্ষা করুন। স্নোফ্লেক যে ফাইলগুলি তৈরি করেছে সেগুলি দৃশ্যমান হওয়া উচিত। এটি নিশ্চিত করে যে রপ্তানি সফল হয়েছে। আইসবার্গ মেটাডেটা metadata ফোল্ডারে এবং প্রকৃত ডেটা data ফোল্ডারে Parquet ফাইল হিসাবে পাওয়া যাবে।

gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**"

সঠিক ফাইলের নাম ভিন্ন হবে, তবে কাঠামোটি এইরকম হওয়া উচিত:

gs://$GCS_BUCKET_NAME/snowflake_extvol/
gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/data/snow_cbsKIRmdDmo_wLg128fugxg_0_2_009.parquet
...
gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/metadata/00001-62f831ff-6708-4494-94c5-c891b7ad447f.metadata.json
...

তথ্যটি এখন স্নোফ্লেক থেকে আইসবার্গ ফর্ম্যাটে গুগল ক্লাউড স্টোরেজে কপি করা হয়েছে।

এই তালিকাটি থাকাকালীন, metadata.json ফাইলটি একটি পরিবেশ ভেরিয়েবলে সংরক্ষণ করা যাক কারণ এটি আমাদের পরে প্রয়োজন হবে।

export GCS_METADATA_JSON=$(gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**" | grep .metadata.json)

৫. একটি BigQuery এক্সটার্নাল টেবিল কনফিগার করুন

এখন যেহেতু আইসবার্গ টেবিলটি গুগল ক্লাউড স্টোরেজে আছে, পরবর্তী ধাপ হল এটিকে BigQuery-তে অ্যাক্সেসযোগ্য করে তোলা। এটি একটি BigLake বহিরাগত টেবিল তৈরি করে করা যেতে পারে।

BigLake হল একটি স্টোরেজ ইঞ্জিন যা BigQuery-তে এমন টেবিল তৈরি করতে সাহায্য করে যা Google Cloud Storage-এর মতো বহিরাগত উৎস থেকে সরাসরি ডেটা পড়ে। এই ল্যাবের জন্য, এটিই মূল প্রযুক্তি যা BigQuery-কে ডেটা গ্রহণ না করেই রপ্তানি করা আইসবার্গ টেবিল বুঝতে সক্ষম করে।

এই কাজটি করার জন্য, দুটি উপাদানের প্রয়োজন:

  1. একটি ক্লাউড রিসোর্স সংযোগ: এটি BigQuery এবং GCS এর মধ্যে একটি নিরাপদ লিঙ্ক। এটি প্রমাণীকরণ পরিচালনা করার জন্য একটি বিশেষ পরিষেবা অ্যাকাউন্ট ব্যবহার করে, নিশ্চিত করে যে BigQuery-এর GCS বাকেট থেকে ফাইলগুলি পড়ার জন্য প্রয়োজনীয় অনুমতি রয়েছে।
  2. একটি বহিরাগত টেবিলের সংজ্ঞা: এটি BigQuery কে বলে যে GCS-এ Iceberg টেবিলের মেটাডেটা ফাইলটি কোথায় পাওয়া যাবে এবং এটি কীভাবে ব্যাখ্যা করা উচিত।

গুগল ক্লাউড স্টোরেজের সাথে একটি সংযোগ কনফিগার করুন

প্রথমে, BigQuery কে GCS অ্যাক্সেস করার অনুমতি দেয় এমন সংযোগ তৈরি করা হবে। এই কমান্ডটি BigQuery এর মধ্যে একটি সংযোগ সংস্থান তৈরি করে।

bq mk \
  --connection \
  --project_id=$GCP_PROJECT \
  --location=$GCP_REGION \
  --connection_type=CLOUD_RESOURCE \
  codelabs-retl-connection

সাফল্য দেখতে এরকম কিছু হবে:

Connection 12345678.region.codelabs-retl-connection successfully created

BigQuery-তে ক্লাউড রিসোর্স সংযোগ সম্পর্কে আরও তথ্য Google ক্লাউড ডকুমেন্টেশনে পাওয়া যাবে।

ডেটা পড়ার জন্য BigQuery সংযোগকে অনুমোদন করুন

নতুন BigQuery সংযোগটির নিজস্ব পরিষেবা অ্যাকাউন্ট রয়েছে যার Google Cloud Storage বাকেট থেকে ডেটা পড়ার জন্য অনুমতি প্রয়োজন।

১. সংযোগ পরিষেবা অ্যাকাউন্ট পান

প্রথমে, সদ্য তৈরি সংযোগ থেকে পরিষেবা অ্যাকাউন্ট আইডিটি পান:

bq show \
  --location $GCP_REGION \
  --connection codelabs-retl-connection

ফলাফলগুলি মিলিত সংযোগগুলির একটি সারণী দেখাবে।

serviceAccountId পরবর্তীতে ব্যবহারের জন্য একটি পরিবেশ ভেরিয়েবলে সেট করা যাক।

export GCP_BQ_SERVICE_ACCOUNT=<Your service account email>

2. অনুমতি প্রদান করুন

নিম্নলিখিত কমান্ডটি চালিয়ে GCS বাকেটে ডেটা দেখার জন্য পরিষেবা অ্যাকাউন্টকে অনুমোদন করুন।

gcloud storage buckets add-iam-policy-binding \
  gs://$GCS_BUCKET_NAME \
  --member serviceAccount:$GCP_BQ_SERVICE_ACCOUNT \
  --role roles/storage.objectViewer

বাহ্যিক টেবিল তৈরি করুন

এখন, BigQuery-তে BigLake এক্সটার্নাল টেবিল তৈরি করুন। এই কমান্ডটি কোনও ডেটা স্থানান্তর করে না। এটি কেবল GCS-এ বিদ্যমান ডেটার দিকে একটি পয়েন্টার তৈরি করে। Snowflake তৈরি করা .metadata.json ফাইলগুলির একটিতে যাওয়ার পথ প্রয়োজন হবে।

bq mk --dataset --location=$GCP_REGION codelabs_retl

bq mk \
    --table \
    --location=$GCP_REGION \
--external_table_definition=ICEBERG=$GCS_METADATA_JSON@projects/$GCP_PROJECT/locations/$GCP_REGION/connections/codelabs-retl-connection \
    codelabs_retl.regional_sales

BigQuery-তে ডেটা যাচাই করুন

এই টেবিলটি এখন স্ট্যান্ডার্ড SQL ব্যবহার করে জিজ্ঞাসা করা যেতে পারে, ঠিক যেমন অন্য যেকোনো BigQuery টেবিলের ক্ষেত্রে। BigQuery সংযোগটি ব্যবহার করে GCS থেকে Parquet ফাইলগুলি তাৎক্ষণিকভাবে পড়বে।

bq query \
  --location=$GCP_REGION \
  --nouse_legacy_sql "SELECT * FROM \`$GCP_PROJECT.codelabs_retl.regional_sales\` LIMIT 10;"

৬. BigQuery থেকে Spanner-এ ডেটা আমদানি করা: চূড়ান্ত ধাপ

পাইপলাইনের চূড়ান্ত এবং সবচেয়ে গুরুত্বপূর্ণ অংশে পৌঁছেছে: বিগলেক টেবিল থেকে স্প্যানারে ডেটা স্থানান্তর করা। এটি "রিভার্স ইটিএল" ধাপ, যেখানে ডেটা গুদামে প্রক্রিয়াজাতকরণ এবং কিউরেট করার পরে, অ্যাপ্লিকেশনগুলির ব্যবহারের জন্য একটি কার্যকরী সিস্টেমে লোড করা হয়।

স্প্যানার একটি সম্পূর্ণরূপে পরিচালিত, বিশ্বব্যাপী বিতরণকৃত রিলেশনাল ডাটাবেস। এটি একটি ঐতিহ্যবাহী রিলেশনাল ডাটাবেসের মতো লেনদেনের ধারাবাহিকতা প্রদান করে কিন্তু একটি NoSQL ডাটাবেসের অনুভূমিক স্কেলেবিলিটি প্রদান করে। এটি স্কেলেবল, অত্যন্ত উপলব্ধ অ্যাপ্লিকেশন তৈরির জন্য এটিকে একটি আদর্শ পছন্দ করে তোলে।

প্রক্রিয়াটি হবে:

  1. স্প্যানার ডাটাবেসে একটি টেবিল স্কিমা তৈরি করুন যা ডেটার কাঠামোর সাথে মেলে।
  2. BigLake টেবিল থেকে সরাসরি Spanner টেবিলে ডেটা লোড করতে একটি BigQuery EXPORT DATA কোয়েরি চালান।

স্প্যানার টেবিল তৈরি করুন

BigQuery থেকে ডেটা স্থানান্তর করার আগে, স্প্যানারে একটি সামঞ্জস্যপূর্ণ স্কিমা সহ একটি গন্তব্য টেবিল তৈরি করতে হবে।

gcloud spanner databases ddl update $SPANNER_DB \
  --instance=$SPANNER_INSTANCE \
  --ddl="$(cat <<EOF
CREATE TABLE regional_sales (
    nation_name STRING(MAX),
    market_segment STRING(MAX),
    order_year INT64,
    order_priority STRING(MAX),
    total_order_count INT64,
    total_revenue NUMERIC,
    unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
EOF
)"

BigQuery থেকে ডেটা রপ্তানি করুন

এটিই শেষ ধাপ। BigQuery BigLake টেবিলে সোর্স ডেটা প্রস্তুত এবং Spanner-এ তৈরি ডেস্টিনেশন টেবিলের মাধ্যমে, প্রকৃত ডেটা চলাচল আশ্চর্যজনকভাবে সহজ। একটি একক BigQuery SQL কোয়েরি ব্যবহার করা হবে: EXPORT DATA

এই কোয়েরিটি বিশেষভাবে এই ধরণের পরিস্থিতির জন্য তৈরি করা হয়েছে। এটি দক্ষতার সাথে একটি BigQuery টেবিল (BigLake টেবিলের মতো বহিরাগতগুলি সহ) থেকে একটি বহিরাগত গন্তব্যে ডেটা রপ্তানি করে। এই ক্ষেত্রে, গন্তব্য হল Spanner টেবিল।

bq query --location=$GCP_REGION --use_legacy_sql=false <<EOF
EXPORT DATA OPTIONS (
uri="https://spanner.googleapis.com/projects/${GCP_PROJECT}/instances/${SPANNER_INSTANCE}/databases/${SPANNER_DB}",
  format='CLOUD_SPANNER',
  spanner_options="""{ 
      "table": "regional_sales", 
      "priority": "HIGH" 
      }"""
) AS 
SELECT * FROM \`${PROJECT_ID}.codelabs_retl.regional_sales\`
EOF

কোয়েরি শেষ হলে, ফলাফল প্যানেলে "আপডেট সম্পন্ন হয়েছে" লেখা থাকা উচিত।

৭. স্প্যানারে ডেটা যাচাই করুন

অভিনন্দন! একটি সম্পূর্ণ রিভার্স ইটিএল পাইপলাইন সফলভাবে তৈরি এবং কার্যকর করা হয়েছে। চূড়ান্ত পদক্ষেপ হল যাচাই করা যে ডেটা প্রত্যাশা অনুযায়ী স্প্যানারে পৌঁছেছে।

gcloud spanner databases execute-sql \
  --instance=$SPANNER_INSTANCE \
  $SPANNER_DB \
  --sql='SELECT * FROM regional_sales LIMIT 10'

আমদানি করা নমুনা ডেটা অনুরোধ অনুসারে প্রদর্শিত হবে:

nation_name  market_segment  order_year  order_priority   total_order_count  total_revenue  unique_customer_count
ALGERIA      AUTOMOBILE      1992        1-URGENT         375                59232423.66    298
ALGERIA      AUTOMOBILE      1992        2-HIGH           328                47371891.08    269
ALGERIA      AUTOMOBILE      1992        3-MEDIUM         346                52823195.87    262
ALGERIA      AUTOMOBILE      1992        4-NOT SPECIFIED  365                52935998.34    288
ALGERIA      AUTOMOBILE      1992        5-LOW            380                54920263.68    293
ALGERIA      AUTOMOBILE      1993        1-URGENT         394                63145618.78    312
ALGERIA      AUTOMOBILE      1993        2-HIGH           340                50737488.4     277
ALGERIA      AUTOMOBILE      1993        3-MEDIUM         383                55871057.46    298
ALGERIA      AUTOMOBILE      1993        4-NOT SPECIFIED  365                56424662.05    291
ALGERIA      AUTOMOBILE      1993        5-LOW            363                54673249.06    283

বিশ্লেষণাত্মক এবং পরিচালনাগত তথ্য জগতের মধ্যে ব্যবধান সফলভাবে পূরণ করা হয়েছে।

৮. পরিষ্কার-পরিচ্ছন্নতা

স্প্যানার পরিষ্কার করুন

স্প্যানার ডাটাবেস এবং ইনস্ট্যান্স মুছে ফেলুন

gcloud spanner instances delete $SPANNER_INSTANCE

জিসিএস পরিষ্কার করুন

ডেটা হোস্ট করার জন্য তৈরি করা GCS বাকেটটি মুছে ফেলুন।

gcloud storage rm --recursive gs://$GCS_BUCKET_NAME

BigQuery পরিষ্কার করুন

bq rm -r codelabs_retl
bq rm --connection --location=$GCP_REGION codelabs-retl-connection

স্নোফ্লেক পরিষ্কার করুন

ডাটাবেস বাদ দিন

  1. বাম দিকের মেনুতে, Horizon Catalog এর অধীনে, Catalog এর উপর কার্সার রাখুন, তারপর Database Explorer এ ক্লিক করুন।
  2. বিকল্পগুলি প্রসারিত করতে CODELABS_RETL_DB ডাটাবেসের ডানদিকে ... এ ক্লিক করুন এবং ড্রপ নির্বাচন করুন
  3. পপ আপ হওয়া নিশ্চিতকরণ ডায়ালগে, Drop Database নির্বাচন করুন

ওয়ার্কবুক মুছে ফেলুন

  1. বাম দিকের মেনুতে, Work with data এর অধীনে, Projects এর উপর কার্সার রাখুন, তারপর Workspaces এ ক্লিক করুন।
  2. মাই ওয়ার্কস্পেস সাইড বারে, এই ল্যাবের জন্য ব্যবহৃত বিভিন্ন ওয়ার্কস্পেস ফাইলের উপর কার্সার রাখুন ... অতিরিক্ত বিকল্পগুলি দেখানোর জন্য এবং এটিতে ক্লিক করুন।
  3. পপ আপ হওয়া নিশ্চিতকরণ ডায়ালগে Delete নির্বাচন করুন এবং তারপর আবার Delete করুন
  4. এই ল্যাবের জন্য তৈরি করা সমস্ত sql ওয়ার্কস্পেস ফাইলের জন্য এটি করুন।

বহিরাগত ভলিউম মুছুন

  1. বাম দিকের মেনুতে, Horizon Catalog এর অধীনে, Catalog এর উপর কার্সর রাখুন, তারপর External Data এ ক্লিক করুন।
  2. ক্লিক করুন 227b3e306c3d609d.png সম্পর্কে CODELABS_RETL_EXT_VOL এর ডানদিকে, এবং Drop external volume নির্বাচন করুন, এবং তারপর আবার নিশ্চিতকরণ ডায়ালগে Drop external volume নির্বাচন করুন।

৯. অভিনন্দন

কোডল্যাবটি সম্পন্ন করার জন্য অভিনন্দন।

আমরা যা কভার করেছি

  • স্নোফ্লেকে ডেটা কীভাবে লোড করবেন
  • কিভাবে একটি GCS বাকেট তৈরি করবেন
  • CSV ফর্ম্যাটে GCS-এ স্নোফ্লেক টেবিল কীভাবে রপ্তানি করবেন
  • কিভাবে একটি স্প্যানার ইনস্ট্যান্স সেট আপ করবেন
  • ডেটাফ্লো ব্যবহার করে স্প্যানারে CSV টেবিল কীভাবে লোড করবেন