1. ভূমিকা
এই কোডল্যাবে, আপনি BigQuery স্টুডিওর পরিচিত ইন্টারফেসের মধ্যে ডেটা ট্রান্সফরমেশনের জন্য Apache Spark-এর শক্তি কীভাবে ব্যবহার করবেন তা শিখবেন। আপনি BigQuery থেকে ডেটা পড়বেন, PySpark ব্যবহার করে ডেটা পরিষ্কার এবং রূপান্তর করবেন এবং ফলাফলগুলি একটি নতুন BigQuery টেবিলে লিখবেন, সবই একটি একক নোটবুক থেকে৷
কোডল্যাবের মাধ্যমে, আপনি নিম্নলিখিত হিসাবে একটি ধাপে ধাপে পদ্ধতি ব্যবহার করবেন:
- আপনার Google ক্লাউড প্রকল্প প্রস্তুত করুন এবং এতে প্রয়োজনীয় সমস্ত API সক্ষম করুন৷
- অস্থায়ী ফোল্ডারের জন্য GCS বালতি তৈরি করুন
- অ্যাপাচি স্পার্ক চালানোর জন্য প্রয়োজনীয় লাইব্রেরি আমদানি করুন
- BigQuery সংযোগকারীর সাথে স্পার্ক সেশন শুরু করুন
- BigQuery পাবলিক ডেটাসেট থেকে ডেটা নমুনা Google Analytics পড়ুন
- ডিভাইস ব্রাউজার দ্বারা সামগ্রিক ডেটা সহ ডেটা রূপান্তর করুন (বেসিক মেট্রিক্স)
- রাজস্ব গণনার সাথে ট্রাফিক উৎস বিশ্লেষণের সাথে ডেটা রূপান্তর করুন
- ভৌগলিক বিশ্লেষণের সাথে ডেটা রূপান্তর করুন
- BigQuery টেবিলে রূপান্তরের পরে ডেটা লিখুন
আর্কিটেকচার ওভারভিউ
পূর্বশর্ত
- বিলিং সক্ষম সহ একটি Google ক্লাউড প্ল্যাটফর্ম (GCP) প্রকল্প৷
- আপনার GCP প্রোজেক্টে BigQuery API এবং BigQuery Connection API চালু করা আছে।
- SQL এবং Python এর প্রাথমিক জ্ঞান।
আপনি কি শিখবেন
- BigQuery স্টুডিও নোটবুকে অ্যাপাচি স্পার্ক ব্যবহার করে কীভাবে ডেটা বের করা যায়
- BigQuery স্টুডিও নোটবুকে অ্যাপাচি স্পার্ক ব্যবহার করে কীভাবে ডেটা রূপান্তর বা একত্রিত করবেন
- BigQuery স্টুডিও নোটবুকে অ্যাপাচি স্পার্ক ব্যবহার করে রূপান্তর বা একত্রিত ডেটার পরে কীভাবে ডেটা লিখবেন
আপনি কি প্রয়োজন হবে
- ক্রোম ওয়েব ব্রাউজার
- একটি জিমেইল অ্যাকাউন্ট
- বিলিং সক্ষম সহ একটি ক্লাউড প্রকল্প৷
2. মৌলিক সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।
- প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি সবসময় এটি আপডেট করতে পারেন.
- প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে আপনার প্রকল্প আইডি উল্লেখ করতে হবে (সাধারণত
PROJECT_ID
হিসাবে চিহ্নিত)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য একটি এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করতে পারেন, এবং এটি উপলব্ধ কিনা দেখতে পারেন। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকে। - আপনার তথ্যের জন্য, একটি তৃতীয় মান আছে, একটি প্রকল্প নম্বর, যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
- এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ হবে না, যদি কিছু হয়। এই টিউটোরিয়ালের বাইরে বিলিং এড়াতে সংস্থানগুলি বন্ধ করতে, আপনি আপনার তৈরি করা সংস্থানগুলি মুছতে বা প্রকল্প মুছতে পারেন। নতুন Google ক্লাউড ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
3. আপনি শুরু করার আগে
API সক্ষম করুন
BigQuery স্টুডিও নোটবুক ব্যবহার করার আগে, আমাদের অবশ্যই নিম্নলিখিত APIগুলি সক্ষম করতে হবে:
- কম্পিউট ইঞ্জিন এপিআই
- ডেটাফর্ম API
- Vertex AI API
ম্যানুয়াল সক্ষম করার জন্য, Bigquery-এ যান। সম্পাদক ফলকের ট্যাব বারে, + চিহ্নের পাশের তীর ড্রপ-ডাউনে ক্লিক করুন, নোটবুকের উপরে পয়েন্টার ধরে রাখুন এবং তারপর BigQuery টেমপ্লেট বা খালি নোটবুক বা স্পার্ক টেমপ্লেট নির্বাচন করুন
উইন্ডোতে মূল বৈশিষ্ট্য API সক্ষম করুন, BigQuery ইউনিফাইড API-এ সক্ষম করুন ক্লিক করুন
শেষ করার পরে, সক্ষম তারপর বন্ধ ক্লিক করুন. আরও বিশদ বিবরণের জন্য অনুগ্রহ করে সম্পদ ব্যবস্থাপনার জন্য BigQuery স্টুডিও সক্ষম করুন দেখুন
4. একটি পাবলিক ডেটাসেট পড়ুন
প্রথমে, BigQuery স্টুডিও নোটবুকে স্পার্ক চালানোর জন্য আমরা সাময়িক ব্যবহারের জন্য একটি GCS বালতি তৈরি করব।
- Google ক্লাউড কনসোলে, BigQuery-এ নেভিগেট করুন
- সম্পাদক ফলকের ট্যাব বারে, + চিহ্নের পাশের তীর ড্রপ-ডাউনে ক্লিক করুন, নোটবুকের উপরে পয়েন্টারটি ধরে রাখুন এবং তারপরে খালি নোটবুক নির্বাচন করুন।
- কোড সেলে ক্লিক করুন তারপর GCS বাকেট তৈরি করতে নিচে cli স্ক্রিপ্ট টাইপ করুন তারপর Run cell বাটনে ক্লিক করুন অথবা Shift + Enter চাপুন
!gsutil mb -p <your_project_id> -c STANDARD -l US gs://ioxid2025-<your_project_id>
Google ক্লাউড প্রজেক্ট তৈরি করার সময় আপনি যা বেছে নিয়েছেন সেই অনুযায়ী <your_project_id>-এর মান আপডেট করুন। GCS অনন্য বালতি নাম তৈরি করার জন্য আপনার প্রকল্প আইডি দিয়ে <your_project_id>-এর মান আপডেট করুন। তারপরে রান সেল বোতামে ক্লিক করুন বা কোড সেল চালাতে Shift + এন্টার টিপুন
তারপরে, আমরা একটি স্পার্ক সেশন শুরু করব। এই কোডল্যাবে, আমরা SparkSession
লাইব্রেরি ব্যবহার করব যদিও আমরা BigQuery স্টুডিও নোটবুকে স্পার্ক চালানোর জন্য ডেটাপ্রোক ক্ষমতার সুবিধা নিতে DataprocSession
ব্যবহার করতে পারি
- কোড সেলে ক্লিক করুন তারপর স্পার্ক সেশন শুরু করতে নিচের cli স্ক্রিপ্ট টাইপ করুন। Run cell বাটনে ক্লিক করুন অথবা Shift + Enter চাপুন।
# Import required libraries
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, countDistinct, when, expr, date_format
from pyspark.sql.types import DecimalType
# Initialize Spark session with BigQuery connector
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, sum, count, countDistinct, when, expr, date_format
from pyspark.sql.types import DecimalType
# Initialize Spark session with BigQuery connector
spark = SparkSession.builder \
.appName("Google Analytics ETL with Apache Spark") \
.config("spark.jars.packages", "com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.32.0") \
.getOrCreate()
spark
প্রত্যাশিত আউটপুট:
SparkSession - in-memory SparkContext Spark UI Version v3.5.4 Master local[*] AppName Google Analytics ETL with Apache Spark
- কোড সেলে ক্লিক করুন তারপর GCP প্রকল্প এবং GCS অস্থায়ী বালতি সেট করতে নীচে cli স্ক্রিপ্ট টাইপ করুন।
# Set GCP project and temporary bucket
project_id = "your-gcp-project-id" # Replace with your GCP project ID
bucket = "your-gcs-bucket" # Replace with your GCS bucket for temporary files spark.conf.set("temporaryGcsBucket", bucket)
Google Analytics নমুনা ডাটাবেস
Google ক্লাউডের পাবলিক ডেটাসেট প্রোগ্রামের মাধ্যমে BigQuery-এ Google Analytics নমুনা ডেটাবেস প্রদান করা হয়। ডেটাসেটটি Google Merchandise Store থেকে 12 মাসের (আগস্ট 2016 থেকে আগস্ট 2017) অস্পষ্ট Google Analytics 360 ডেটা সরবরাহ করে, একটি আসল ইকমার্স স্টোর যা BigQuery-এ Google-ব্র্যান্ডের পণ্যদ্রব্য বিক্রি করে। এটি ব্যবসার ডেটা বিশ্লেষণ করার একটি দুর্দান্ত উপায় এবং Analytics 360 ডেটা বিশ্লেষণ করতে BigQuery ব্যবহার করার সুবিধাগুলি জানুন ডেটা সম্পর্কে আরও জানুন
ডেটার মধ্যে রয়েছে একটি ইকমার্স ওয়েবসাইট যা দেখবে তা সাধারণত ডেটা এবং এতে নিম্নলিখিত তথ্য অন্তর্ভুক্ত থাকে:
- ট্রাফিক সোর্স ডেটা: জৈব ট্র্যাফিক, অর্থপ্রদানের অনুসন্ধান ট্র্যাফিক এবং প্রদর্শন ট্র্যাফিক সম্পর্কিত ডেটা সহ ওয়েবসাইট ভিজিটররা কোথা থেকে উদ্ভূত হয় সে সম্পর্কে তথ্য
- বিষয়বস্তু ডেটা: সাইটে ব্যবহারকারীদের আচরণ সম্পর্কে তথ্য, যেমন পৃষ্ঠাগুলির URL যা দর্শকরা দেখেন, তারা কীভাবে সামগ্রীর সাথে ইন্টারঅ্যাক্ট করেন ইত্যাদি।
- লেনদেন সংক্রান্ত ডেটা: Google মার্চেন্ডাইজ স্টোর ওয়েবসাইটে লেনদেন সম্পর্কে তথ্য।
অ্যাপাচি স্পার্কের নমুনা শীর্ষ 5 ডেটা প্রদর্শন করতে নীচের কোডটি চালান
# EXTRACT: Read data from BigQuery
print("Extracting data from BigQuery...")
ga_df = spark.read.format("bigquery") \
.option("table", "bigquery-public-data.google_analytics_sample.ga_sessions_20170801") \
.load()
# Show schema sample data
print("Sample data:")
ga_df.show(5, truncate=False)
প্রত্যাশিত আউটপুট:
Extracting data from BigQuery... Sample data: +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ |visitorId|visitNumber|visitId |visitStartTime|date |totals |trafficSource |device |geoNetwork |customDimensions |hits |fullVisitorId |userId|clientId|channelGrouping|socialEngagementType| +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ |NULL |1 |1501591568|1501591568 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{NULL, (not set), (direct), (none), NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL} |{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Europe, Southern Europe, Greece, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, tellas.gr, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[] |[{1, 0, 5, 46, NULL, true, true, true, https://www.google.gr/, {/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /bags/, /google+zipper+front+sports+bag.axd, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, shop.googlemerchandisestore.com/google+redesign/bags/google+zipper+front+sports+bag.axd, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Bags, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |3418334011779872055|NULL |NULL |Organic Search |Not Socially Engaged| |NULL |2 |1501589647|1501589647 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 1}|{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Asia, Southern Asia, India, Maharashtra, (not set), Mumbai, not available in demo dataset, unknown.unknown, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, APAC}] |[{1, 0, 5, 14, NULL, true, true, true, https://analytics.google.com/analytics/web/, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |2474397855041322408|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501616621|1501616621 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Europe, Northern Europe, United Kingdom, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, as9105.com, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, EMEA}] |[{1, 0, 12, 43, NULL, true, true, true, https://analytics.google.com/analytics/web/?utm_source=demoaccount&utm_medium=demoaccount&utm_campaign=demoaccount, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}]|5870462820713110108|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501601200|1501601200 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), analytics.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL}|{Firefox, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop}|{Americas, Northern America, United States, Texas, Dallas-Ft. Worth TX, Dallas, not available in demo dataset, h5colo.com, not available in demo dataset, not available in demo dataset, not available in demo dataset} |[{4, North America}]|[{1, 0, 8, 26, NULL, true, true, true, https://analytics.google.com/analytics/web/, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |9397809171349480379|NULL |NULL |Referral |Not Socially Engaged| |NULL |1 |1501615525|1501615525 |20170801|{1, 1, 1, NULL, 1, NULL, NULL, 1, NULL, NULL, NULL, NULL, 1} |{/analytics/web/, (not set), adwords.google.com, referral, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, not available in demo dataset, NULL, NULL, NULL, NULL, NULL}, NULL, NULL} |{Chrome, not available in demo dataset, not available in demo dataset, Windows, not available in demo dataset, false, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, NULL, not available in demo dataset, not available in demo dataset, not available in demo dataset, desktop} |{Americas, Northern America, United States, not available in demo dataset, not available in demo dataset, not available in demo dataset, not available in demo dataset, (not set), not available in demo dataset, not available in demo dataset, not available in demo dataset}|[{4, North America}]|[{1, 0, 12, 25, NULL, true, true, true, https://adwords.google.com/analytics/web/?__o=cues&authuser=0, {/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com, Page Unavailable, NULL, NULL, /google+redesign/, /shop+by+brand/, /youtube, }, NULL, NULL, NULL, {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, shop.googlemerchandisestore.com/google+redesign/shop+by+brand/youtube, 0}, {NULL, true, NULL, NULL}, NULL, [], [], NULL, NULL, {0, 1, NULL}, [], NULL, [], [], [], PAGE, {NULL, NULL, NULL, NULL, (not set), NULL, No, : }, NULL, NULL, {(not set), Brands, (not set), (not set), (not set), (entrance), (entrance), (entrance), (entrance), (entrance), NULL, 1, NULL, NULL, NULL}, web, []}] |6089902943184578335|NULL |NULL |Referral |Not Socially Engaged| +---------+-----------+----------+--------------+--------+---------------------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------+------+--------+---------------+--------------------+ only showing top 5 rows
5. ডিভাইস ব্রাউজার দ্বারা একত্রিত ডেটা (বেসিক মেট্রিক্স)
এই কোডটি ডিভাইস ব্রাউজার দ্বারা Google Analytics ডেটা একত্রিত করে, বিভিন্ন মেট্রিক্স যেমন মোট সেশন, ভিজিট, হিট, পেজভিউ, বাউন্স, সাইটে সময়, অনন্য দর্শক এবং ভিজিট প্রতি গড় সময় গণনা করে, তারপর একটি কলামের নাম পরিবর্তন করে এবং ফলাফলগুলি সাজায়৷
print("Transformation 1: Aggregating by device browser...")
device_agg = ga_df.groupBy("device.browser") \
.agg(
count("*").alias("total_sessions"),
sum("totals.visits").alias("total_visits"),
sum("totals.hits").alias("total_hits"),
sum("totals.pageviews").alias("total_pageviews"),
sum("totals.bounces").alias("total_bounces"),
sum("totals.timeOnSite").alias("total_time_on_site"),
countDistinct("fullVisitorId").alias("unique_visitors"),
(sum("totals.timeOnSite")/sum("totals.visits")).alias("avg_time_per_visit")
) \
.withColumnRenamed("browser", "device_browser") \
.orderBy("total_sessions", ascending=False)
# Show sample transformed data
print("\nDevice Aggregation Sample:")
device_agg.show(5)
প্রত্যাশিত আউটপুট:
Transformation 1: Aggregating by device browser... Device Aggregation Sample: +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ | device_browser|total_sessions|total_visits|total_hits|total_pageviews|total_bounces|total_time_on_site|unique_visitors|avg_time_per_visit| +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ | Chrome| 1900| 1900| 10896| 8956| 870| 354691| 1689|186.67947368421054| | Safari| 397| 397| 1260| 1137| 218| 43150| 364|108.69017632241814| | Firefox| 101| 101| 390| 343| 59| 10659| 95|105.53465346534654| |Internet Explorer| 54| 54| 107| 102| 36| 5589| 50| 103.5| | Edge| 23| 23| 63| 55| 12| 2623| 23|114.04347826086956| +-----------------+--------------+------------+----------+---------------+-------------+------------------+---------------+------------------+ only showing top 5 rows
6. রাজস্ব গণনার সাথে ট্রাফিক উৎস বিশ্লেষণ
এই কোডটি ট্রাফিক উত্স এবং মাধ্যম অনুসারে Google Analytics ডেটা বিশ্লেষণ করে, সেশন গণনা, লেনদেন, মোট রাজস্ব, প্রতি সেশনে রাজস্ব এবং অনন্য দর্শকের মতো মেট্রিকগুলি গণনা করে, তারপরে কলামগুলির নাম পরিবর্তন করে এবং মোট আয় অনুসারে ফলাফলগুলি সাজায়৷
print("Transformation 2: Analyzing traffic sources...")
traffic_source_agg = ga_df.groupBy("trafficSource.source", "trafficSource.medium") \
.agg(
count("*").alias("session_count"),
sum(when(col("totals.transactions").isNotNull(), 1).otherwise(0)).alias("transactions"),
sum("totals.totalTransactionRevenue").cast(DecimalType(20,2)).alias("total_revenue"),
(sum("totals.totalTransactionRevenue")/count("*")).cast(DecimalType(10,2)).alias("revenue_per_session"),
countDistinct("fullVisitorId").alias("unique_visitors")
) \
.withColumnRenamed("source", "traffic_source") \
.withColumnRenamed("medium", "traffic_medium") \
.orderBy("total_revenue", ascending=False)
print("\nTraffic Source Aggregation Sample:")
traffic_source_agg.show(5)
প্রত্যাশিত আউটপুট:
Transformation 2: Analyzing traffic sources... Traffic Source Aggregation Sample: +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ | traffic_source|traffic_medium|session_count|transactions|total_revenue|revenue_per_session|unique_visitors| +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ | (direct)| (none)| 2166| 42|8872040000.00| 4096048.01| 1943| | mail.google.com| referral| 2| 1| 17960000.00| 8980000.00| 2| | google.com.tw| referral| 1| 0| NULL| NULL| 1| |analytics.google.com| referral| 57| 0| NULL| NULL| 53| | quora.com| referral| 6| 0| NULL| NULL| 5| +--------------------+--------------+-------------+------------+-------------+-------------------+---------------+ only showing top 5 rows
7. ভৌগলিক বিশ্লেষণ
এই কোডটি দেশ এবং অঞ্চল অনুসারে Google Analytics ডেটাতে ভৌগলিক বিশ্লেষণ করে, সেশন গণনা, মোট পৃষ্ঠা দেখা, সাইটে মোট সময়, প্রতি সেশনের গড় সময় এবং অনন্য দর্শকদের গণনা করে, তারপর কলামের নাম পরিবর্তন করে এবং সেশন গণনা অনুসারে সাজায়।
print("Transformation 3: Geographic analysis...")
geo_agg = ga_df.groupBy("geoNetwork.country", "geoNetwork.region") \
.agg(
count("*").alias("session_count"),
sum("totals.pageviews").alias("total_pageviews"),
sum("totals.timeOnSite").alias("total_time_on_site"),
(sum("totals.timeOnSite")/count("*")).alias("avg_time_per_session"),
countDistinct("fullVisitorId").alias("unique_visitors")
) \
.withColumnRenamed("country", "country") \
.withColumnRenamed("region", "region") \
.orderBy("session_count", ascending=False)
print("\nGeographic Aggregation Sample:")
geo_agg.show(5)
প্রত্যাশিত আউটপুট:
Transformation 3: Geographic analysis... Geographic Aggregation Sample: +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ | country| region|session_count|total_pageviews|total_time_on_site|avg_time_per_session|unique_visitors| +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ | United States|not available in ...| 564| 2326| 97829| 173.45567375886526| 494| | United States| California| 420| 3102| 116563| 277.5309523809524| 347| | United States| New York| 109| 845| 39976| 366.7522935779817| 84| |United Kingdom|not available in ...| 82| 161| 7791| 95.01219512195122| 79| | India|not available in ...| 62| 139| 2869| 46.274193548387096| 61| +--------------+--------------------+-------------+---------------+------------------+--------------------+---------------+ only showing top 5 rows
8. সময়-ভিত্তিক বিশ্লেষণ
এই কোডটি visitStartTime
কলাম থেকে ঘন্টা বের করে সময়-ভিত্তিক বিশ্লেষণ করে, তারপর সেশন গণনা, লেনদেন, মোট রাজস্ব, এবং প্রতিটি ঘন্টার জন্য মোট পৃষ্ঠাদর্শন গণনা করতে ঘন্টা অনুসারে ডেটা গ্রুপ করে, অবশেষে ঘন্টা অনুসারে ফলাফলগুলিকে অর্ডার করে।
print("Transformation 4: Time-based analysis...")
hourly_agg = ga_df.withColumn("hour", date_format(col("visitStartTime").cast("timestamp"), "H")) \
.groupBy("hour") \
.agg(
count("*").alias("session_count"),
sum("totals.transactions").alias("transactions"),
sum("totals.totalTransactionRevenue").cast(DecimalType(20,2)).alias("total_revenue"),
sum("totals.pageviews").alias("total_pageviews")
) \
.orderBy("hour")
print("\nHourly Aggregation Sample:")
hourly_agg.show(5)
প্রত্যাশিত আউটপুট:
Transformation 4: Time-based analysis... Hourly Aggregation Sample: +----+-------------+------------+-------------+---------------+ |hour|session_count|transactions|total_revenue|total_pageviews| +----+-------------+------------+-------------+---------------+ | 0| 87| NULL| NULL| 372| | 1| 102| NULL| NULL| 494| | 10| 67| NULL| NULL| 149| | 11| 73| NULL| NULL| 167| | 12| 99| NULL| NULL| 313| +----+-------------+------------+-------------+---------------+ only showing top 5 rows
9. BigQuery টেবিলে ফলাফল লিখুন
এই কোডটি সরাসরি লেখার পদ্ধতি geo_agg
করে, Google BigQuery-তে পৃথক টেবিলে চারটি সমষ্টিগত ডেটাফ্রেম ( device_agg
, traffic_source_agg
, এবং hourly_agg
) রপ্তানি করে, বিদ্যমান সারণীগুলিকে ওভাররাইট করে, একটি সরাসরি লেখার পদ্ধতি ব্যবহার করে।
# Write to BigQuery tables
print("\nLoading data to BigQuery...")
# Set output tables
device_output_table = f"{project_id}.analytics_sample.device_aggregation"
traffic_output_table = f"{project_id}.analytics_sample.traffic_source_aggregation"
geo_output_table = f"{project_id}.analytics_sample.geo_aggregation"
hourly_output_table = f"{project_id}.analytics_sample.hourly_aggregation"
dataset_id = "demo" # Replace with your BigQuery dataset ID
# Set BigQuery output table
device_output_table = f"{project_id}.{dataset_id}.device_aggregation"
traffic_output_table = f"{project_id}.{dataset_id}.traffic_source_aggregation"
geo_output_table = f"{project_id}.{dataset_id}.geo_aggregation"
hourly_output_table = f"{project_id}.{dataset_id}.hourly_aggregation"
# Write each DataFrame to BigQuery
device_agg.write \
.format("bigquery") \
.option("table", device_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
traffic_source_agg.write \
.format("bigquery") \
.option("table", traffic_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
geo_agg.write \
.format("bigquery") \
.option("table", geo_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
hourly_agg.write \
.format("bigquery") \
.option("table", hourly_output_table) \
.option("writeMethod", "direct") \
.mode("overwrite") \
.save()
কিছু রূপান্তর করার পরে সফলভাবে ডেটা সংরক্ষণ করা হয়েছে তা নিশ্চিত করতে BigQuery-এ আউটপুট টেবিল দেখুন
ডিভাইস_একত্রীকরণ টেবিল
জিও_এগ্রিগেশন টেবিল
ঘন্টায়_সমষ্টি টেবিল
ট্রাফিক_সোর্স_এগ্রিগেশন
10. অর্কেস্ট্রেট BigQuery স্টুডিও নোটবুক কোড (ঐচ্ছিক)
আপনি নিম্নলিখিত উপায়ে BigQuery স্টুডিও নোটবুক কোড অর্কেস্ট্রেট করতে পারেন:
- Google ক্লাউড কনসোল থেকে নোটবুক কোড শিডিউল করুন ( নোটবুকের মূল্য প্রযোজ্য)।
- একটি Dataproc Serverless ব্যাচ ওয়ার্কলোড হিসাবে নোটবুক কোড চালান ( Dataproc সার্ভারহীন মূল্য প্রযোজ্য)।
এই কোডল্যাবে, আমরা Google ক্লাউড কনসোল থেকে নোটবুক কোড শিডিউল ব্যবহার করব।
- নোটবুক টুলবারে, সময়সূচীতে ক্লিক করুন।
- সময়সূচী নোটবুক ফলকে, সময়সূচীর নামের ক্ষেত্রে, সময়সূচীর জন্য একটি নাম লিখুন।
- প্রমাণীকরণ বিভাগে, আপনার Google অ্যাকাউন্ট ব্যবহারকারীর শংসাপত্র বা একটি পরিষেবা অ্যাকাউন্ট সহ নোটবুকটিকে অনুমোদন করুন৷
- আপনার Google অ্যাকাউন্ট ব্যবহারকারীর শংসাপত্র ( প্রিভিউ ) ব্যবহার করতে, আমার ব্যবহারকারীর শংসাপত্রের সাথে কার্যকর করুন নির্বাচন করুন।
- একটি পরিষেবা অ্যাকাউন্ট ব্যবহার করতে, নির্বাচিত পরিষেবা অ্যাকাউন্টের সাথে সম্পাদন নির্বাচন করুন, তারপর একটি পরিষেবা অ্যাকাউন্ট নির্বাচন করুন।
- নোটবুক বিকল্প বিভাগে, রানটাইম টেমপ্লেট ক্ষেত্রে, একটি Colab নোটবুক রানটাইম টেমপ্লেট বা ডিফল্ট রানটাইম স্পেসিফিকেশন নির্বাচন করুন। একটি Colab নোটবুক রানটাইম টেমপ্লেট তৈরি করার বিষয়ে বিস্তারিত জানতে, একটি রানটাইম টেমপ্লেট তৈরি করুন দেখুন।
- ক্লাউড স্টোরেজ বালতি ক্ষেত্রে, ব্রাউজ ক্লিক করুন এবং একটি ক্লাউড স্টোরেজ বালতি নির্বাচন বা তৈরি করুন। নির্বাচিত পরিষেবা অ্যাকাউন্টটিকে অবশ্যই নির্বাচিত বালতিতে স্টোরেজ অ্যাডমিন (
roles/storage.admin
) IAM ভূমিকা প্রদান করতে হবে৷ আরও তথ্যের জন্য, নোটবুক সময়সূচী সক্ষম করুন দেখুন। - সময়সূচী ফ্রিকোয়েন্সি বিভাগে, নিম্নলিখিতগুলি করুন:
- পুনরাবৃত্তি মেনুতে, নির্ধারিত নোটবুক রানের ফ্রিকোয়েন্সি নির্বাচন করুন।
- সময়ে ক্ষেত্রে, নির্ধারিত নোটবুক রানের জন্য সময় লিখুন।
- টাইমজোন মেনুতে, সময়সূচীর জন্য টাইমজোন নির্বাচন করুন।
- সময়সূচী তৈরি করুন ক্লিক করুন। আপনি যদি আপনার প্রমাণীকরণ পদ্ধতির জন্য আমার ব্যবহারকারীর শংসাপত্রের সাথে এক্সিকিউট নির্বাচন করেন, তাহলে আপনাকে অবশ্যই আপনার Google অ্যাকাউন্ট ( প্রিভিউ ) অনুমোদন করতে হবে।
11. পরিষ্কার করুন
এই কোডল্যাবে ব্যবহৃত সংস্থানগুলির জন্য আপনার Google ক্লাউড অ্যাকাউন্টে চার্জ এড়াতে, এই পদক্ষেপগুলি অনুসরণ করুন:
- Google ক্লাউড কনসোলে, সম্পদ পরিচালনা পৃষ্ঠাতে যান।
- প্রকল্প তালিকায়, আপনি যে প্রকল্পটি মুছতে চান সেটি নির্বাচন করুন এবং তারপরে মুছুন ক্লিক করুন।
- ডায়ালগে, প্রজেক্ট আইডি টাইপ করুন এবং তারপরে প্রোজেক্ট মুছে ফেলতে শাট ডাউন ক্লিক করুন।
12. অভিনন্দন
আপনি BigQuery স্টুডিও নোটবুক-এ অ্যাপাচি স্পার্ক সার্ভারহীন ব্যবহার করে ডেটা ট্রান্সফরমেশন এবং বিশ্লেষণ শেষ করেছেন। আপনি Google ক্লাউডের পাবলিক ডেটাসেটগুলি অন্বেষণ করার পথে, BigQuery স্টুডিও নোটবুক এবং অর্কেস্ট্রেটেড BigQuery স্টুডিও নোটবুকে অ্যাপাচি স্পার্ক সহ সার্ভারবিহীন ETL পারফর্ম করেছেন৷ চমত্কার কাজ!
পরবর্তী পদক্ষেপ:
- অটোমেশন উদ্দেশ্যে ব্যবহার পরিষেবা অ্যাকাউন্ট সহ অর্কেস্ট্রেট নোটবুক।
- ETL কাজ চালানোর সময় নিরীক্ষণের সময়কালের জন্য স্ক্রিপ্ট যোগ করুন।
- একটি নোটবুক স্থাপন করুন।
- BigQuery স্টুডিও নোটবুক-এ সার্ভারলেস ডেটাপ্রোক-এর সাথে প্রকৃত বিতরণ করা অ্যাপাচি স্পার্ক ক্ষমতার সুবিধার জন্য DataprocSparkSession ব্যবহার করুন।
- BigQuery স্টুডিওতে Apache Spark-এর জন্য সঞ্চিত পদ্ধতি তৈরি করুন। এইভাবে আরও ভাল সংগঠন, পুনঃব্যবহারযোগ্যতা এবং রক্ষণাবেক্ষণের জন্য আপনার PySpark কোড গঠন করতে OOP নীতিগুলি প্রয়োগ করতে পারে।
তথ্যসূত্র :