CSV ব্যবহার করে স্নোফ্লেক থেকে স্প্যানারে ETL উল্টে দিন

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

ভূমিকা

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

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

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

  1. CSV ফরম্যাটে স্নোফ্লেক থেকে গুগল ক্লাউড স্টোরেজ (GCS)-এ:
  • প্রথম ধাপ হলো স্নোফ্লেক থেকে ডেটাগুলোকে একটি উন্মুক্ত ও সার্বজনীন ফরম্যাটে বের করে আনা। বহনযোগ্য ডেটা ফাইল তৈরির জন্য CSV-তে এক্সপোর্ট করা একটি প্রচলিত ও সহজ পদ্ধতি। আমরা এই ফাইলগুলোকে GCS-এ স্টেজ করব, যা একটি স্কেলেবল ও টেকসই অবজেক্ট স্টোরেজ সমাধান প্রদান করে।
  1. GCS থেকে স্প্যানারে (ডেটাফ্লো-এর মাধ্যমে):
  • GCS থেকে ডেটা পড়া এবং স্প্যানারে লেখার জন্য কাস্টম স্ক্রিপ্ট লেখার পরিবর্তে, গুগল ডেটাফ্লো (Google Dataflow) নামক একটি সম্পূর্ণ পরিচালিত ডেটা প্রসেসিং পরিষেবা ব্যবহার করা হয়। ডেটাফ্লো বিশেষভাবে এই ধরনের কাজের জন্য আগে থেকে তৈরি টেমপ্লেট সরবরাহ করে। "GCS Text to Cloud Spanner" টেমপ্লেটটি ব্যবহার করে কোনো ডেটা প্রসেসিং কোড না লিখেই উচ্চ-ক্ষমতাসম্পন্ন ও সমান্তরালভাবে ডেটা ইম্পোর্ট করা যায়, যা ডেভেলপমেন্টের জন্য প্রয়োজনীয় সময় উল্লেখযোগ্যভাবে বাঁচায়।

আপনি যা শিখবেন

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

২. স্থাপন, প্রয়োজনীয়তা ও সীমাবদ্ধতা

পূর্বশর্ত

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

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

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

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

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

সীমাবদ্ধতা

সিস্টেমগুলোর মধ্যে ডেটা স্থানান্তর করার সময় ডেটা টাইপের পার্থক্য সম্পর্কে সচেতন থাকা গুরুত্বপূর্ণ।

  • Snowflake থেকে CSV: এক্সপোর্ট করার সময়, Snowflake ডেটা টাইপগুলোকে সাধারণ টেক্সট উপস্থাপনায় রূপান্তরিত করা হয়।
  • CSV থেকে স্প্যানার: ইম্পোর্ট করার সময়, এটা নিশ্চিত করা প্রয়োজন যে টার্গেট স্প্যানার ডেটা টাইপগুলো CSV ফাইলের স্ট্রিং রিপ্রেজেন্টেশনের সাথে সামঞ্জস্যপূর্ণ। এই ল্যাবটি এক সেট সাধারণ টাইপ ম্যাপিংয়ের মাধ্যমে নির্দেশনা প্রদান করে।

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

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

  • GCP_REGION - এটি সেই নির্দিষ্ট অঞ্চল যেখানে GCP রিসোর্সগুলো অবস্থিত হবে। অঞ্চলগুলোর তালিকা এখানে পাওয়া যাবে।
  • GCP_PROJECT - ব্যবহারযোগ্য GCP প্রজেক্ট আইডি।
  • GCP_BUCKET_NAME - যে GCS বাকেটটি তৈরি করা হবে তার নাম, এবং যেখানে ডেটা ফাইলগুলো সংরক্ষণ করা হবে।
  • SPANNER_INSTANCE - স্প্যানার ইনস্ট্যান্সের জন্য নির্ধারিত নাম
  • SPANNER_DB - স্প্যানার ইনস্ট্যান্সের মধ্যে ডাটাবেসের জন্য নির্ধারিত নাম।
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

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

স্প্যানারে ইম্পোর্ট করার আগে, স্নোফ্লেক দ্বারা তৈরি CSV ডেটা ফাইলগুলো সাময়িকভাবে সংরক্ষণের জন্য গুগল ক্লাউড স্টোরেজ (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 ডেটাসেটটি ব্যবহার করা হবে, যা ডিসিশন সাপোর্ট সিস্টেমের জন্য একটি ইন্ডাস্ট্রি-স্ট্যান্ডার্ড বেঞ্চমার্ক। এই ডেটাসেটটি সমস্ত Snowflake অ্যাকাউন্টে ডিফল্টভাবে উপলব্ধ।

Snowflake-এ ডেটা প্রস্তুত করুন

Snowflake অ্যাকাউন্টে লগ ইন করুন এবং একটি নতুন ওয়ার্কশিট তৈরি করুন।

অনুমতির অভাবে স্নোফ্লেক কর্তৃক প্রদত্ত নমুনা TPC-H ডেটা তার শেয়ার করা অবস্থান থেকে সরাসরি এক্সপোর্ট করা যায় না। প্রথমে, ORDERS টেবিলটি একটি পৃথক ডেটাবেস এবং স্কিমাতে কপি করতে হবে।

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

  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 নির্বাচন করুন।
USE DATABASE codelabs_retl_db;

CREATE SCHEMA codelabs_retl_export;

CREATE TABLE codelabs_retl_export.regional_sales_csv 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;

SELECT COUNT(*) FROM regional_sales_csv;

আউটপুটে উল্লেখ থাকবে যে 4375 সারি কপি করা হয়েছে।

GCS অ্যাক্সেস করার জন্য Snowflake কনফিগার করুন

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

  • স্টোরেজ ইন্টিগ্রেশন: একটি স্নোফ্লেক অবজেক্ট যা আপনার এক্সটার্নাল ক্লাউড স্টোরেজের জন্য একটি জেনারেটেড সার্ভিস অ্যাকাউন্ট এবং অথেনটিকেশন তথ্য সংরক্ষণ করে।
  • স্টেজ: একটি নামযুক্ত অবজেক্ট যা একটি নির্দিষ্ট বাকেট এবং পাথকে নির্দেশ করে এবং অথেনটিকেশন পরিচালনার জন্য স্টোরেজ ইন্টিগ্রেশন ব্যবহার করে। এটি ডেটা লোডিং এবং আনলোডিং অপারেশনের জন্য একটি সুবিধাজনক ও নামযুক্ত স্থান প্রদান করে।

প্রথমে, স্টোরেজ ইন্টিগ্রেশন তৈরি করুন।

CREATE OR REPLACE STORAGE INTEGRATION gcs_int
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = 'GCS'
  ENABLED = TRUE
  -- Grant Snowflake permission to write to a specific path in your bucket.
  STORAGE_ALLOWED_LOCATIONS = ('gcs://<Your bucket name>/sample_orders');

এরপরে, Snowflake দ্বারা তৈরি করা সার্ভিস অ্যাকাউন্টটি পাওয়ার জন্য ইন্টিগ্রেশনটি বর্ণনা করুন।

DESC STORAGE INTEGRATION gcs_int; 

ফলাফল থেকে STORAGE_GCP_SERVICE_ACCOUNT এর মানটি কপি করুন। এটি দেখতে একটি ইমেল ঠিকানার মতো হবে।

পরবর্তীতে পুনরায় ব্যবহারের জন্য এই সার্ভিস অ্যাকাউন্টটি আপনার শেল ইনস্ট্যান্সের একটি এনভায়রনমেন্ট ভেরিয়েবলে সংরক্ষণ করুন।

export GCP_SERVICE_ACCOUNT=<Your service account>

স্নোফ্লেককে GCS অনুমতি প্রদান করুন

এখন, Snowflake সার্ভিস অ্যাকাউন্টকে 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"

একটি স্টেজ তৈরি করুন এবং ডেটা এক্সপোর্ট করুন

অনুমতিগুলো সেট করা হয়ে গেলে, Snowflake ওয়ার্কশিটে ফিরে যান। ইন্টিগ্রেশনটি ব্যবহার করে এমন একটি Stage তৈরি করুন, এবং তারপরে COPY INTO কমান্ড ব্যবহার করে SAMPLE_ORDERS টেবিলের ডেটা সেই Stage-এ এক্সপোর্ট করুন।

CREATE OR REPLACE STAGE retl_gcs_stage
    URL = 'gcs://<Your bucket name>/regional_sales_csv'
    STORAGE_INTEGRATION = gcs_int
    -- Define the output file format
    FILE_FORMAT = (TYPE = 'CSV');

COPY INTO @retl_gcs_stage/regional_sales_csv
FROM (SELECT * FROM codelabs_retl_export.regional_sales_csv)
FILE_FORMAT = (TYPE = CSV, COMPRESSION = NONE);

রেজাল্টস প্যানে, rows_unloaded এর মান 1500000 হিসেবে দৃশ্যমান থাকা উচিত।

GCS-এ ডেটা যাচাই করুন

Snowflake যে ফাইলগুলো তৈরি করেছে তা দেখতে GCS বাকেটটি পরীক্ষা করুন। এটি নিশ্চিত করে যে এক্সপোর্টটি সফল হয়েছে।

gcloud storage ls gs://$GCS_BUCKET_NAME/regional_sales_csv/

এক বা একাধিক ক্রমিক নম্বরযুক্ত CSV ফাইল দৃশ্যমান থাকা উচিত।

gs://your-bucket-name/regional_sales_csv/regional_sales_csv_0_0_0.csv
...

৬. ডেটাফ্লো ব্যবহার করে স্প্যানারে ডেটা লোড করুন

ডেটা এখন GCS-এ থাকায়, স্প্যানারে তা ইম্পোর্ট করার জন্য ডেটাফ্লো ব্যবহার করা হবে। ডেটাফ্লো হলো স্ট্রিম এবং ব্যাচ ডেটা প্রসেসিংয়ের জন্য গুগল ক্লাউডের একটি সম্পূর্ণ পরিচালিত পরিষেবা। একটি পূর্ব-নির্মিত গুগল টেমপ্লেট ব্যবহার করা হবে, যা বিশেষভাবে GCS থেকে স্প্যানারে টেক্সট ফাইল ইম্পোর্ট করার জন্য ডিজাইন করা হয়েছে।

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

প্রথমে, স্প্যানারে গন্তব্য টেবিলটি তৈরি করুন। স্কিমাটি অবশ্যই CSV ফাইলগুলোর ডেটার সাথে সামঞ্জস্যপূর্ণ হতে হবে।

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
)"

ডেটাফ্লো ম্যানিফেস্ট তৈরি করুন

ডেটাফ্লো টেমপ্লেটের জন্য একটি 'ম্যানিফেস্ট' ফাইল প্রয়োজন। এটি একটি JSON ফাইল যা টেমপ্লেটকে বলে দেয় সোর্স ডেটা ফাইলগুলো কোথায় খুঁজে পাওয়া যাবে এবং কোন স্প্যানার টেবিলে সেগুলো লোড করতে হবে।

GCS বাকেটে একটি নতুন regional_sales_manifest.json ফাইল সংজ্ঞায়িত করে আপলোড করুন:

cat <<EOF | gcloud storage cp - gs://$GCS_BUCKET_NAME/regional_sales_manifest.json 
{ 
  "tables": [
    {
       "table_name": "regional_sales", 
       "file_patterns": [ 
         "gs://$GCS_BUCKET_NAME/regional_sales_csv/*.csv"
       ] 
    } 
  ] 
} 
EOF

ডেটাফ্লো এপিআই সক্রিয় করুন

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

gcloud services enable dataflow.googleapis.com --project=$GCP_PROJECT

ডেটাফ্লো জব তৈরি করুন এবং চালান

ইম্পোর্ট জবটি এখন চালানোর জন্য প্রস্তুত। এই কমান্ডটি GCS_Text_to_Cloud_Spanner টেমপ্লেট ব্যবহার করে একটি ডেটাফ্লো জব চালু করে।

কমান্ডটি দীর্ঘ এবং এতে বেশ কয়েকটি প্যারামিটার রয়েছে। নিচে এর একটি বিশদ বিবরণ দেওয়া হলো:

–gcs-location

GCS-এ আগে থেকে তৈরি টেমপ্লেটটির পথ।

–region

যে অঞ্চলে ডেটাফ্লো জবটি চলবে।

–parameters

instanceId , databaseId

লক্ষ্য স্প্যানার ইনস্ট্যান্স এবং ডাটাবেস।

importManifest

এইমাত্র তৈরি করা ম্যানিফেস্ট ফাইলটির GCS পাথ।

gcloud dataflow jobs run spanner-import-from-gcs \
  --gcs-location=gs://dataflow-templates/latest/GCS_Text_to_Cloud_Spanner \
  --region=$GCP_REGION \
  --staging-location=gs://$GCS_BUCKET_NAME/staging \
  --parameters \
instanceId=$SPANNER_INSTANCE,\
databaseId=$SPANNER_DB,\
importManifest=gs://$GCS_BUCKET_NAME/regional_sales_manifest.json,escape='\'

নিম্নলিখিত কমান্ডের সাহায্যে ডেটাফ্লো জবের অবস্থা পরীক্ষা করা যেতে পারে।

gcloud dataflow jobs list \
    --filter="name:spanner-import-from-gcs" \
    --region="$GCP_REGION" \
    --sort-by="~creationTime" \
    --limit=1

কাজটি সম্পন্ন করতে প্রায় ৫ মিনিট সময় লাগা উচিত।

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

ডেটাফ্লো জবটি সফল হলে, স্প্যানারে ডেটা লোড হয়েছে কিনা তা যাচাই করুন।

প্রথমে, সারির সংখ্যা পরীক্ষা করুন। এটি ৪৩৭৫ হওয়া উচিত।

gcloud spanner databases execute-sql $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--sql='SELECT COUNT(*) FROM regional_sales;'

এরপর, ডেটা পরীক্ষা করার জন্য কয়েকটি সারি কোয়েরি করুন।

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

Snowflake টেবিল থেকে ইম্পোর্ট করা ডেটা দৃশ্যমান হওয়া উচিত।

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

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

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

gcloud spanner instances delete $SPANNER_INSTANCE

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

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

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

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

ডাটাবেসটি মুছে ফেলুন

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

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

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

৮. অভিনন্দন

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

আমরা যা আলোচনা করেছি

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