ক্লাউড বিগটেবলের ভূমিকা

১. ভূমিকা

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

আপনি শিখবেন কিভাবে

  • স্কিমা ডিজাইনে সাধারণ ভুলগুলো এড়িয়ে চলুন
  • একটি সিকোয়েন্স ফাইলে ডেটা ইম্পোর্ট করুন
  • আপনার ডেটা অনুসন্ধান করুন

কাজটি শেষ হলে, আপনার কাছে নিউ ইয়র্ক সিটির বাসের তথ্য সম্বলিত বেশ কয়েকটি মানচিত্র থাকবে। উদাহরণস্বরূপ, আপনি ম্যানহাটনে বাস ভ্রমণের এই হিটম্যাপটি তৈরি করবেন:

7349d94f7d41f1d1.png

গুগল ক্লাউড প্ল্যাটফর্ম ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?

শুধু পুরোটা পড়ুন এটি পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

২. ডেটাসেট সম্পর্কে

আপনি নিউ ইয়র্ক শহরের বাস সম্পর্কিত একটি ডেটাসেট দেখবেন। এখানে ৩০০টিরও বেশি বাস রুট এবং সেই রুটগুলো অনুসরণকারী ৫,৮০০টি যানবাহন রয়েছে। আমাদের ডেটাসেটটি একটি লগ, যাতে গন্তব্যের নাম, গাড়ির আইডি, অক্ষাংশ, দ্রাঘিমাংশ, প্রত্যাশিত পৌঁছানোর সময় এবং নির্ধারিত পৌঁছানোর সময় অন্তর্ভুক্ত রয়েছে। ডেটাসেটটি ২০১৭ সালের জুন মাসে প্রায় প্রতি ১০ মিনিট অন্তর নেওয়া স্ন্যাপশট দিয়ে গঠিত।

৩. স্কিমা ডিজাইন

ক্লাউড বিগটেবল থেকে সেরা পারফরম্যান্স পেতে হলে, আপনার স্কিমা ডিজাইন করার সময় আপনাকে চিন্তাভাবনা করে কাজ করতে হবে। ক্লাউড বিগটেবলে ডেটা স্বয়ংক্রিয়ভাবে লেক্সিকোগ্রাফিকভাবে সাজানো থাকে, তাই আপনি যদি আপনার স্কিমা ভালোভাবে ডিজাইন করেন, তবে সম্পর্কিত ডেটার জন্য কোয়েরি করা খুব কার্যকর হয়। ক্লাউড বিগটেবল রো কী (row key) দ্বারা পয়েন্ট লুকআপ (point lookup) অথবা রো-রেঞ্জ স্ক্যান (row-range scan) ব্যবহার করে কোয়েরি করার সুযোগ দেয়, যা পরপর কয়েকটি সারি (row) ফেরত দেয়। তবে, আপনার স্কিমা যদি ভালোভাবে চিন্তা করে তৈরি না হয়, তাহলে আপনাকে হয়তো একাধিক সারি লুকআপ (row lookup) একত্রিত করতে হতে পারে, অথবা আরও খারাপভাবে, সম্পূর্ণ টেবিল স্ক্যান (full table scan) করতে হতে পারে, যা অত্যন্ত ধীরগতির প্রক্রিয়া।

প্রশ্নগুলো পরিকল্পনা করুন

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

সেই তথ্যের সাহায্যে, আপনি এই কোয়েরিগুলো সম্পাদন করতে পারেন:

  • একটি নির্দিষ্ট ঘণ্টার মধ্যে একটিমাত্র বাসের অবস্থান জানুন।
  • একটি বাস লাইন বা নির্দিষ্ট বাসের জন্য একদিনের তথ্য পান।
  • মানচিত্রে একটি আয়তক্ষেত্রের মধ্যে থাকা সমস্ত বাস খুঁজুন।
  • সমস্ত বাসের বর্তমান অবস্থানগুলো জানুন (যদি আপনি এই ডেটা রিয়েল টাইমে গ্রহণ করে থাকেন)।

এই কোয়েরিগুলোর সবগুলো একসাথে সর্বোত্তমভাবে করা যায় না। উদাহরণস্বরূপ, আপনি যদি সময় অনুসারে সাজাতে চান, তাহলে সম্পূর্ণ টেবিল স্ক্যান না করে কোনো একটি অবস্থানের উপর ভিত্তি করে স্ক্যান করতে পারবেন না। আপনি সবচেয়ে বেশি যে কোয়েরিগুলো চালান, তার উপর ভিত্তি করে আপনাকে অগ্রাধিকার দিতে হবে।

এই কোডল্যাবে, আপনি নিম্নলিখিত কোয়েরিগুলো অপ্টিমাইজ এবং এক্সিকিউট করার উপর মনোযোগ দেবেন:

  • এক ঘণ্টার মধ্যে একটি নির্দিষ্ট গাড়ির অবস্থানগুলো জানুন।
  • এক ঘণ্টার বেশি সময় ধরে চলা একটি সম্পূর্ণ বাস লাইনের অবস্থানগুলো জানুন।
  • এক ঘণ্টার মধ্যে ম্যানহাটনের সমস্ত বাসের অবস্থান জেনে নিন।
  • এক ঘণ্টার মধ্যে ম্যানহাটনের সমস্ত বাসের সর্বশেষ অবস্থান জানুন।
  • পুরো মাস জুড়ে একটি সম্পূর্ণ বাস লাইনের অবস্থানগুলো জেনে নিন।
  • এক ঘণ্টার মধ্যে একটি নির্দিষ্ট গন্তব্যে পৌঁছানো যায় এমন পুরো বাস লাইনের অবস্থানগুলো জানুন।

সারি কী ডিজাইন করুন

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

রো কী-এর জন্য প্রস্তাবিত স্কিমাটি নিচে দেওয়া হলো:

[বাস কোম্পানি/বাস লাইন/ঘন্টায় পূর্ণসংখ্যায় রূপান্তরিত সময়/গাড়ির আইডি]। প্রতিটি সারিতে এক ঘন্টার ডেটা থাকে এবং প্রতিটি সেলে ডেটার একাধিক সময়-চিহ্নিত সংস্করণ থাকে।

এই কোডল্যাবের জন্য, বিষয়টিকে সহজ রাখতে আপনি একটি কলাম ফ্যামিলি ব্যবহার করবেন। ডেটা দেখতে কেমন তার একটি উদাহরণ নিচে দেওয়া হলো। ডেটাটি রো কী (row key) অনুযায়ী সাজানো আছে।

সারি চাবি

cf:যানবাহনের অবস্থান.অক্ষাংশ

cf:যানবাহনের অবস্থান.দ্রাঘিমাংশ

...

MTA/M86-SBS/1496275200000/NYCT_5824

৪০.৭৮১২১২ @২০:৫২:৫৪.০০ ৪০.৭৭৬১৬৩ @২০:৪৩:১৯.০০ ৪০.৭৭৮৭১৪ @২০:৩৩:৪৬.০০

-৭৩.৯৬১৯৪২ @২০:৫২:৫৪.০০ -৭৩.৯৪৬৯৪৯ @২০:৪৩:১৯.০০ -৭৩.৯৫৩৭৩১ @২০:৩৩:৪৬.০০

...

MTA/M86-SBS/1496275200000/NYCT_5840

৪০.৭৮০৬৬৪ @২০:১৩:৫১.০০ ৪০.৭৮৮৪১৬ @২০:০৩:৪০.০০

-৭৩.৯৫৮৩৫৭ @২০:১৩:৫১.০০ -৭৩.৯৭৬৭৪৮ @২০:০৩:৪০.০০

...

MTA/M86-SBS/1496275200000/NYCT_5867

৪০.৭৮০২৮১ @২০:৫১:৪৫.০০ ৪০.৭৭৯৯৬১ @২০:৪৩:১৫.০০ ৪০.৭৮৮৪১৬ @২০:৩৩:৪৪.০০

-৭৩.৯৪৬৮৯০ @২০:৫১:৪৫.০০ -৭৩.৯৫৯৪৬৫ @২০:৪৩:১৫.০০ -৭৩.৯৭৬৭৪৮ @২০:৩৩:৪৪.০০

...

...

...

...

...

৪. ইনস্ট্যান্স, টেবিল এবং ফ্যামিলি তৈরি করুন

এরপর, আপনি একটি ক্লাউড বিগটেবল টেবিল তৈরি করবেন।

প্রথমে, একটি নতুন প্রজেক্ট তৈরি করুন। বিল্ট-ইন ক্লাউড শেল ব্যবহার করুন, যা আপনি উপরের ডানদিকের কোণায় থাকা 'অ্যাক্টিভেট ক্লাউড শেল' বোতামে ক্লিক করে খুলতে পারেন।

a74d156ca7862b28.png

কোডল্যাব কমান্ডগুলো কপি ও পেস্ট করা সহজ করার জন্য নিম্নলিখিত এনভায়রনমেন্ট ভেরিয়েবলগুলো সেট করুন:

INSTANCE_ID="bus-instance"
CLUSTER_ID="bus-cluster"
TABLE_ID="bus-data"
CLUSTER_NUM_NODES=3
CLUSTER_ZONE="us-central1-c"

এই কোডল্যাবে আপনি যে টুলগুলো ব্যবহার করবেন, যেমন—gcloud কমান্ড-লাইন টুল , cbt কমান্ড-লাইন ইন্টারফেস এবং Maven— সেগুলো ক্লাউড শেলে আগে থেকেই ইনস্টল করা থাকে।

এই কমান্ডটি চালিয়ে ক্লাউড বিগটেবল এপিআইগুলো সক্রিয় করুন।

gcloud services enable bigtable.googleapis.com bigtableadmin.googleapis.com

নিম্নলিখিত কমান্ডটি চালিয়ে একটি ইনস্ট্যান্স তৈরি করুন:

gcloud bigtable instances create $INSTANCE_ID \
    --cluster=$CLUSTER_ID \
    --cluster-zone=$CLUSTER_ZONE \
    --cluster-num-nodes=$CLUSTER_NUM_NODES \
    --display-name=$INSTANCE_ID

ইনস্ট্যান্সটি তৈরি করার পর, cbt কনফিগারেশন ফাইলটি পূরণ করুন এবং তারপর নিম্নলিখিত কমান্ডগুলো চালিয়ে একটি টেবিল ও কলাম ফ্যামিলি তৈরি করুন:

echo project = $GOOGLE_CLOUD_PROJECT > ~/.cbtrc
echo instance = $INSTANCE_ID >> ~/.cbtrc

cbt createtable $TABLE_ID
cbt createfamily $TABLE_ID cf

৫. ডেটা আমদানি করুন

নিম্নলিখিত ধাপগুলো অনুসরণ করে gs://cloud-bigtable-public-datasets/bus-data থেকে এই কোডল্যাবের জন্য এক সেট সিকোয়েন্স ফাইল ইম্পোর্ট করুন :

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

gcloud services enable dataflow.googleapis.com

টেবিলটি ইম্পোর্ট করতে নিম্নলিখিত কমান্ডগুলো চালান।

NUM_WORKERS=$(expr 3 \* $CLUSTER_NUM_NODES)
gcloud beta dataflow jobs run import-bus-data-$(date +%s) \
--gcs-location gs://dataflow-templates/latest/GCS_SequenceFile_to_Cloud_Bigtable \
--num-workers=$NUM_WORKERS --max-workers=$NUM_WORKERS \
--parameters bigtableProject=$GOOGLE_CLOUD_PROJECT,bigtableInstanceId=$INSTANCE_ID,bigtableTableId=$TABLE_ID,sourcePattern=gs://cloud-bigtable-public-datasets/bus-data/*

আমদানি নিরীক্ষণ করুন

আপনি ক্লাউড ডেটাফ্লো UI- তে কাজটি পর্যবেক্ষণ করতে পারেন। এছাড়াও, আপনি আপনার ক্লাউড বিগটেবল ইনস্ট্যান্সের মনিটরিং UI- এর মাধ্যমে সেটির লোড দেখতে পারেন। সম্পূর্ণ ইম্পোর্ট হতে ৫ মিনিট সময় লাগার কথা।

৬. কোডটি সংগ্রহ করুন

git clone https://github.com/googlecodelabs/cbt-intro-java.git
cd cbt-intro-java

নিম্নলিখিত কমান্ডগুলো চালিয়ে জাভা ১১-এ পরিবর্তন করুন:

sudo update-java-alternatives -s java-1.11.0-openjdk-amd64 && export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64/

৭. অনুসন্ধান সম্পাদন করুন

আপনার প্রথম কোয়েরিটি হবে একটি সাধারণ রো লুকআপ। এর মাধ্যমে আপনি ১ জুন, ২০১৭ তারিখে রাত ১২:০০টা থেকে ১:০০টা পর্যন্ত M86-SBS লাইনের একটি বাসের ডেটা পাবেন। তখন NYCT_5824 আইডিযুক্ত একটি যানবাহন ওই বাস লাইনে ছিল।

সেই তথ্য এবং স্কিমা ডিজাইন (বাস কোম্পানি/বাস লাইন/ঘন্টায় রাউন্ড ডাউন করা টাইমস্ট্যাম্প/ভেহিকেল আইডি) জানার পর, আপনি অনুমান করতে পারেন যে রো কী-টি হলো:

MTA/M86-SBS/1496275200000/NYCT_5824

BusQueries.java

private static final byte[] COLUMN_FAMILY_NAME = Bytes.toBytes("cf");
private static final byte[] LAT_COLUMN_NAME = Bytes.toBytes("VehicleLocation.Latitude");
private static final byte[] LONG_COLUMN_NAME = Bytes.toBytes("VehicleLocation.Longitude");

String rowKey = "MTA/M86-SBS/1496275200000/NYCT_5824";
Result getResult =
    table.get(
        new Get(Bytes.toBytes(rowKey))
            .addColumn(COLUMN_FAMILY_NAME, LAT_COLUMN_NAME)
            .addColumn(COLUMN_FAMILY_NAME, LONG_COLUMN_NAME));

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

BusQueries.java

Result getResult =
    table.get(
        new Get(Bytes.toBytes(rowKey))
            .setMaxVersions(Integer.MAX_VALUE)
            .addColumn(COLUMN_FAMILY_NAME, LAT_COLUMN_NAME)
            .addColumn(COLUMN_FAMILY_NAME, LONG_COLUMN_NAME));

ক্লাউড শেলে, ঘণ্টাজুড়ে ওই বাসটির অক্ষাংশ ও দ্রাঘিমাংশের তালিকা পেতে নিম্নলিখিত কমান্ডটি চালান:

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=lookupVehicleInGivenHour

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

f1a1fac6051c6210.png

৮. একটি স্ক্যান করুন।

এখন, চলুন ওই ঘণ্টার জন্য বাস লাইনটির সমস্ত ডেটা দেখে নিই। স্ক্যান কোডটি দেখতে গেট কোডের মতোই। আপনি স্ক্যানারকে একটি শুরুর অবস্থান দেবেন এবং তারপর নির্দেশ করবেন যে আপনি শুধুমাত্র 1496275200000 টাইমস্ট্যাম্প দ্বারা চিহ্নিত ঘণ্টার মধ্যে M86-SBS বাস লাইনের সারিগুলো চান।

BusQueries.java

Scan scan;
scan = new Scan();
scan.setMaxVersions(Integer.MAX_VALUE)
    .addColumn(COLUMN_FAMILY_NAME, LAT_COLUMN_NAME)
    .addColumn(COLUMN_FAMILY_NAME, LONG_COLUMN_NAME)
    .withStartRow(Bytes.toBytes("MTA/M86-SBS/1496275200000"))
    .setRowPrefixFilter(Bytes.toBytes("MTA/M86-SBS/1496275200000"));
ResultScanner scanner = table.getScanner(scan);

ফলাফল পেতে নিম্নলিখিত কমান্ডটি চালান।

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=scanBusLineInGivenHour

c18a4ac6522d08a2.png

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

234c1b51e3b201e.png

এই কোয়েরিটির একটি আকর্ষণীয় পরিবর্তন হলো M86-SBS বাস লাইনের পুরো মাসের ডেটা দেখা, এবং এটি করা খুবই সহজ। ফলাফল পেতে শুরুর সারি থেকে টাইমস্ট্যাম্পটি সরিয়ে দিন এবং প্রিফিক্স ফিল্টার ব্যবহার করুন।

BusQueries.java

scan.withStartRow(Bytes.toBytes("MTA/M86-SBS/"))
    .setRowPrefixFilter(Bytes.toBytes("MTA/M86-SBS/"));

// Optionally, reduce the results to receive one version per column
// since there are so many data points.
scan.setMaxVersions(1);

ফলাফল পেতে নিম্নলিখিত কমান্ডটি চালান। (ফলাফলের একটি দীর্ঘ তালিকা থাকবে।)

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=scanEntireBusLine

ফলাফলগুলো MapMaker-এ কপি করলে আপনি বাস রুটটির একটি হিটম্যাপ দেখতে পাবেন। কমলা রঙের বিন্দুগুলো স্টপগুলো নির্দেশ করে এবং উজ্জ্বল লাল রঙের বিন্দুগুলো হলো রুটের শুরু ও শেষ।

346f52e61b3d8902.png

৯. ফিল্টার চালু করুন

এরপরে, আপনি পূর্বগামী বাস এবং পশ্চিমগামী বাসগুলো ফিল্টার করবেন এবং প্রতিটির জন্য একটি আলাদা হিটম্যাপ তৈরি করবেন।

BusQueries.java

Scan scan;
ResultScanner scanner;
scan = new Scan();
SingleColumnValueFilter valueFilter =
    new SingleColumnValueFilter(
        COLUMN_FAMILY_NAME,
        Bytes.toBytes("DestinationName"),
        CompareOp.EQUAL,
        Bytes.toBytes("Select Bus Service Yorkville East End AV"));

scan.setMaxVersions(1)
    .addColumn(COLUMN_FAMILY_NAME, LAT_COLUMN_NAME)
    .addColumn(COLUMN_FAMILY_NAME, LONG_COLUMN_NAME);
scan.withStartRow(Bytes.toBytes("MTA/M86-SBS/"))
    .setRowPrefixFilter(Bytes.toBytes("MTA/M86-SBS/"));
scan.setFilter(valueFilter);
scanner = table.getScanner(scan);

পূর্ব দিকে চলাচলকারী বাসগুলোর ফলাফল পেতে নিম্নলিখিত কমান্ডটি চালান।

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=filterBusesGoingEast

পশ্চিম দিকে যাওয়া বাসগুলো পেতে, valueFilter-এর স্ট্রিংটি পরিবর্তন করুন:

BusQueries.java

SingleColumnValueFilter valueFilter =
    new SingleColumnValueFilter(
        COLUMN_FAMILY_NAME,
        Bytes.toBytes("DestinationName"),
        CompareOp.EQUAL,
        Bytes.toBytes("Select Bus Service Westside West End AV"));

পশ্চিম দিকে চলাচলকারী বাসগুলোর ফলাফল পেতে নিম্নলিখিত কমান্ডটি চালান।

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=filterBusesGoingWest

পূর্ব দিকে যাওয়া বাসগুলি

76f6f62096a6847a.png

পশ্চিম দিকে যাওয়া বাসগুলি

2b5771ee9046399f.png

দুটি হিটম্যাপ তুলনা করে আপনি রুটগুলোর পার্থক্য দেখার পাশাপাশি গতির ভিন্নতাও লক্ষ্য করতে পারবেন। ডেটা থেকে একটি ব্যাখ্যা হলো, পশ্চিমগামী রুটে বাসগুলোকে বেশি থামানো হচ্ছে, বিশেষ করে সেন্ট্রাল পার্কে প্রবেশের সময়। আর পূর্বগামী রুটে তেমন কোনো যানজটের স্থান চোখে পড়ে না।

১০. একটি মাল্টি-রেঞ্জ স্ক্যান সম্পাদন করুন।

চূড়ান্ত কোয়েরিটির ক্ষেত্রে, আপনি এমন একটি পরিস্থিতি বিবেচনা করবেন যেখানে কোনো একটি এলাকার অনেকগুলো বাস লাইন নিয়ে আপনার উদ্বেগ রয়েছে:

BusQueries.java

private static final String[] MANHATTAN_BUS_LINES = {"M1","M2","M3",...

Scan scan;
ResultScanner scanner;
List<RowRange> ranges = new ArrayList<>();
for (String busLine : MANHATTAN_BUS_LINES) {
  ranges.add(
      new RowRange(
          Bytes.toBytes("MTA/" + busLine + "/1496275200000"), true,
          Bytes.toBytes("MTA/" + busLine + "/1496275200001"), false));
}
Filter filter = new MultiRowRangeFilter(ranges);
scan = new Scan();
scan.setFilter(filter);
scan.setMaxVersions(Integer.MAX_VALUE)
    .addColumn(COLUMN_FAMILY_NAME, LAT_COLUMN_NAME)
    .addColumn(COLUMN_FAMILY_NAME, LONG_COLUMN_NAME);
scan.withStartRow(Bytes.toBytes("MTA/M")).setRowPrefixFilter(Bytes.toBytes("MTA/M"));
scanner = table.getScanner(scan);

ফলাফল পেতে নিম্নলিখিত কমান্ডটি চালান।

mvn package exec:java -Dbigtable.projectID=$GOOGLE_CLOUD_PROJECT \
-Dbigtable.instanceID=$INSTANCE_ID -Dbigtable.table=$TABLE_ID \
-Dquery=scanManhattanBusesInGivenHour

7349d94f7d41f1d1.png

১১. শেষ করুন

চার্জ এড়াতে পরিষ্কার করুন

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

gcloud bigtable instances delete $INSTANCE_ID

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

  • স্কিমা ডিজাইন
  • ইনস্ট্যান্স, টেবিল এবং ফ্যামিলি সেট আপ করা
  • ডেটাফ্লো দিয়ে সিকোয়েন্স ফাইল ইম্পোর্ট করা
  • লুকআপ, স্ক্যান, ফিল্টারসহ স্ক্যান এবং মাল্টি-রেঞ্জ স্ক্যান ব্যবহার করে কোয়েরি করা।

পরবর্তী পদক্ষেপ