1. परिचय
इस कोडलैब में, आपको ज़ीरो-ईटीएल फ़ेडरेटेड क्वेरी का इस्तेमाल करके और स्पैनर डेटाबेस पर असर डाले बिना, BigQuery से स्पैनर डेटा को क्वेरी करने के लिए, स्पैनर डेटा बूस्ट का इस्तेमाल करने का तरीका पता चलेगा.
Spanner Data Boost, पूरी तरह से मैनेज की गई बिना सर्वर वाली सेवा है. यह, इस्तेमाल किए जा सकने वाले Spanner वर्कलोड के लिए, इंडिपेंडेंट कंप्यूट रिसॉर्स उपलब्ध कराती है. डेटा बूस्ट की मदद से, प्रावधान किए गए Spanner इंस्टेंस पर मौजूद वर्कलोड पर करीब-करीब शून्य असर के साथ ऐनलिटिक्स क्वेरी लागू की जा सकती हैं और डेटा एक्सपोर्ट किया जा सकता है. इसके लिए, यह सर्वरलेस ऑन-डिमांड इस्तेमाल मॉडल इस्तेमाल करता है.
BigQuery के बाहरी कनेक्शन के साथ जोड़े जाने पर, डेटा बूस्ट की मदद से स्पैनर से डेटा को आसानी से अपने डेटा ऐनलिटिक्स प्लैटफ़ॉर्म में क्वेरी किया जा सकता है. इससे, ETL डेटा को आसानी से माइग्रेट नहीं किया जा सकता.
ज़रूरी शर्तें
- Google Cloud, Console की बुनियादी जानकारी
- कमांड-लाइन इंटरफ़ेस और Google शेल में इस्तेमाल होने वाले बुनियादी हुनर
आप इन चीज़ों के बारे में जानेंगे
- स्पैनर इंस्टेंस को डिप्लॉय करने का तरीका
- स्पैनर डेटाबेस बनाने के लिए डेटा कैसे लोड करें
- डेटा बूस्ट के बिना BigQuery से स्पैनर डेटा को ऐक्सेस करने का तरीका
- डेटा बूस्ट के ज़रिए BigQuery से स्पैनर डेटा को ऐक्सेस करने का तरीका
आपको इनकी ज़रूरत होगी
- Google Cloud खाता और Google Cloud प्रोजेक्ट
- Chrome जैसा कोई वेब ब्राउज़र
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करें
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको अपना प्रोजेक्ट आईडी बताना होगा. आम तौर पर, इसकी पहचान
PROJECT_ID
के रूप में की जाती है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. दूसरा तरीका यह है कि आप खुद भी आज़माकर देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. साथ ही, यह प्रोजेक्ट के खत्म होने तक बना रहता है. - आपकी जानकारी के लिए, प्रोजेक्ट नंबर नाम की एक तीसरी वैल्यू दी गई है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, बिलिंग से बचने के लिए संसाधनों को बंद करें. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
क्लाउड शेल शुरू करें
Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.
Google Cloud Console में जाकर, सबसे ऊपर दाईं ओर मौजूद टूलबार पर क्लाउड शेल आइकॉन पर क्लिक करें:
प्रावधान करने और एनवायरमेंट से कनेक्ट होने में कुछ ही समय लगेगा. उसके पूरा हो जाने पर, आपको कुछ ऐसा दिखाई देगा:
इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत पड़ेगी. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud पर चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रक्रिया को बेहतर बनाता है. इस कोडलैब (कोड बनाना सीखना) में आपका सारा काम ब्राउज़र में किया जा सकता है. आपको कुछ भी इंस्टॉल करने की ज़रूरत नहीं है.
3. स्पैनर इंस्टेंस और डेटाबेस बनाना
Spanner API को चालू करना
Cloud Shell में, पक्का करें कि आपका प्रोजेक्ट आईडी सेट अप हो:
gcloud config set project [YOUR-PROJECT-ID]
PROJECT_ID=$(gcloud config get-value project)
अपने डिफ़ॉल्ट क्षेत्र को us-central1
के तौर पर कॉन्फ़िगर करें. बेझिझक इसे किसी ऐसे इलाके में बदलें जो Spanner रीजनल कॉन्फ़िगरेशन के साथ काम करता हो.
gcloud config set compute/region us-central1
स्पैनर एपीआई चालू करें:
gcloud services enable spanner.googleapis.com
स्पैनर इंस्टेंस बनाना
इस चरण में, हम कोडलैब के लिए अपना स्पैनर इंस्टेंस सेट अप करते हैं. ऐसा करने के लिए, Cloud Shell खोलें और इस निर्देश को चलाएं:
export SPANNER_INSTANCE_ID=codelab-demo
export SPANNER_REGION=regional-us-central1
gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
कमांड आउटपुट:
$ gcloud spanner instances create $SPANNER_INSTANCE_ID \
--config=$SPANNER_REGION \
--description="Spanner Codelab instance" \
--nodes=1
Creating instance...done.
डेटाबेस बनाना
आपका इंस्टेंस चालू होने के बाद, डेटाबेस बनाया जा सकता है. स्पैनर की मदद से किसी एक इंस्टेंस पर कई डेटाबेस बनाए जा सकते हैं.
डेटाबेस वह जगह है जहां आपका स्कीमा तय किया जाता है. आपके पास यह भी कंट्रोल करने का विकल्प होता है कि डेटाबेस को ऐक्सेस करने के लिए किसका ऐक्सेस होगा, कस्टम एन्क्रिप्शन सेट अप किया जा सकता है, ऑप्टिमाइज़र कॉन्फ़िगर किया जा सकता है, और डेटा के रखरखाव की अवधि सेट की जा सकती है.
डेटाबेस बनाने के लिए, फिर से gcloud कमांड लाइन टूल का इस्तेमाल करें:
export SPANNER_DATABASE=codelab-db
gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
कमांड आउटपुट:
$ gcloud spanner databases create $SPANNER_DATABASE \
--instance=$SPANNER_INSTANCE_ID
Creating database...done.
4. डेटा लोड करें
डेटा बूस्ट का इस्तेमाल करने से पहले, आपके डेटाबेस में कुछ डेटा होना चाहिए. ऐसा करने के लिए, आप एक Cloud Storage बकेट बनाएंगे, बकेट में एव्रो इंपोर्ट अपलोड करेंगे, और Avro डेटा को स्पैनर में लोड करने के लिए, डेटाफ़्लो इंपोर्ट का काम शुरू करेंगे.
एपीआई चालू करें
ऐसा करने के लिए, अगर पिछला वाला बंद था, तो Cloud Shell का प्रॉम्प्ट खोलें.
पक्का करें कि Compute, Cloud Storage, और Dataflow API चालू किए हों.
gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
कंसोल का अनुमानित आउटपुट:
$ gcloud services enable compute.googleapis.com storage.googleapis.com dataflow.googleapis.com
Operation "operations/acat.*snip*" finished successfully.
Cloud Storage पर स्टेज में फ़ाइलें इंपोर्ट करना
अब, avro फ़ाइलों को संग्रहित करने के लिए बकेट बनाएं:
export GCS_BUCKET=spanner-codelab-import_$(date '+%Y-%m-%d_%H_%M_%S')
gcloud storage buckets create gs://$GCS_BUCKET
कंसोल का अनुमानित आउटपुट:
$ gcloud storage buckets create gs://$GCS_BUCKET
Creating gs://spanner-codelab-import/...
इसके बाद, GitHub से टार फ़ाइल डाउनलोड करें और उसे एक्सट्रैक्ट करें.
wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
tar -xzvf spanner-chat-db.tar.gz
कंसोल का अनुमानित आउटपुट:
$ wget https://github.com/dtest/spanner-databoost-tutorial/releases/download/v0.1/spanner-chat-db.tar.gz
*snip*
*snip*(123 MB/s) - ‘spanner-chat-db.tar.gz' saved [46941709/46941709]
$
$ tar -xzvf spanner-chat-db.tar.gz
spanner-chat-db/
spanner-chat-db/users.avro-00000-of-00002
spanner-chat-db/user_notifications-manifest.json
spanner-chat-db/interests-manifest.json
spanner-chat-db/users-manifest.json
spanner-chat-db/users.avro-00001-of-00002
spanner-chat-db/topics-manifest.json
spanner-chat-db/topics.avro-00000-of-00002
spanner-chat-db/topics.avro-00001-of-00002
spanner-chat-db/user_interests-manifest.json
spanner-chat-db/spanner-export.json
spanner-chat-db/interests.avro-00000-of-00001
spanner-chat-db/user_notifications.avro-00000-of-00001
spanner-chat-db/user_interests.avro-00000-of-00001
और अब फ़ाइलों को अपने बनाए गए बकेट में अपलोड करें.
gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
कंसोल का अनुमानित आउटपुट:
$ gcloud storage cp spanner-chat-db gs://$GCS_BUCKET --recursive
Copying file://spanner-chat-db/users.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00000-of-00002
Copying file://spanner-chat-db/user_notifications-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_notifications-manifest.json
Copying file://spanner-chat-db/interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/interests-manifest.json
Copying file://spanner-chat-db/users-manifest.json to gs://spanner-codelab-import/spanner-chat-db/users-manifest.json
Copying file://spanner-chat-db/users.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/users.avro-00001-of-00002
Copying file://spanner-chat-db/topics-manifest.json to gs://spanner-codelab-import/spanner-chat-db/topics-manifest.json
Copying file://spanner-chat-db/topics.avro-00000-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00000-of-00002
Copying file://spanner-chat-db/topics.avro-00001-of-00002 to gs://spanner-codelab-import/spanner-chat-db/topics.avro-00001-of-00002
Copying file://spanner-chat-db/user_interests-manifest.json to gs://spanner-codelab-import/spanner-chat-db/user_interests-manifest.json
Copying file://spanner-chat-db/spanner-export.json to gs://spanner-codelab-import/spanner-chat-db/spanner-export.json
Copying file://spanner-chat-db/interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/interests.avro-00000-of-00001
Copying file://spanner-chat-db/user_notifications.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_notifications.avro-00000-of-00001
Copying file://spanner-chat-db/user_interests.avro-00000-of-00001 to gs://spanner-codelab-import/spanner-chat-db/user_interests.avro-00000-of-00001
Completed files 13/13 | 54.6MiB/54.6MiB
Average throughput: 46.4MiB/s
डेटा आयात करें
Cloud Storage में मौजूद फ़ाइलों के साथ, डेटा को स्पैनर में लोड करने के लिए, dataflow इंपोर्ट शुरू किया जा सकता है.
gcloud dataflow jobs run import_chatdb \
--gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
--region us-central1 \
--staging-location gs://$GCS_BUCKET/tmp \
--parameters \
instanceId=$SPANNER_INSTANCE_ID,\
databaseId=$SPANNER_DATABASE,\
inputDir=gs://$GCS_BUCKET/spanner-chat-db
कंसोल का अनुमानित आउटपुट:
$ gcloud dataflow jobs run import_chatdb \
> --gcs-location gs://dataflow-templates-us-central1/latest/GCS_Avro_to_Cloud_Spanner \
> --region us-central1 \
> --staging-location gs://$GCS_BUCKET/tmp \
> --parameters \
> instanceId=$SPANNER_INSTANCE_ID,\
> databaseId=$SPANNER_DATABASE,\
> inputDir=gs://$GCS_BUCKET/spanner-chat-db
createTime: '*snip*'
currentStateTime: '*snip*'
id: *snip*
location: us-central1
name: import_chatdb
projectId: *snip*
startTime: '*snip*'
type: JOB_TYPE_BATCH
इस निर्देश से इंपोर्ट जॉब की स्थिति देखी जा सकती है.
gcloud dataflow jobs list --filter="name=import_chatdb" --region us-central1
कंसोल का अनुमानित आउटपुट:
$ gcloud dataflow jobs list --filter="name=import_chatdb"
`--region` not set; getting jobs from all available regions. Some jobs may be missing in the event of an outage. https://cloud.google.com/dataflow/docs/concepts/regional-endpoints
JOB_ID NAME TYPE CREATION_TIME STATE REGION
*snip* import_chatdb Batch 2024-04-*snip* Done us-central1
स्पैनर में डेटा की पुष्टि करना
अब Spanner Studio पर जाएं और पक्का करें कि डेटा वहां मौजूद हो. कॉलम देखने के लिए, सबसे पहले विषयों की टेबल को बड़ा करें.
अब, यह पक्का करने के लिए कि डेटा उपलब्ध है, नीचे दी गई क्वेरी चलाएं:
SELECT COUNT(*) FROM topics;
अनुमानित आउटपुट:
5. BigQuery से डेटा पढ़ें
स्पैनर में डेटा मौजूद होने के बाद, अब उसे BigQuery से ऐक्सेस करना चाहिए. ऐसा करने के लिए, आपको BigQuery में स्पैनर के लिए बाहरी कनेक्शन सेट अप करना होगा.
यह मानते हुए कि आपके पास सही अनुमतियां हैं, स्पैनर में बाहरी कनेक्शन बनाने के लिए नीचे दिया गया तरीका अपनाएं.
'जोड़ें' पर क्लिक करें BigQuery कंसोल के सबसे ऊपर मौजूद बटन पर क्लिक करें और 'हमेशा चालू रहने वाले डेटा सोर्स से कनेक्शन' चुनें का विकल्प शामिल है.
अब आप स्पैनर से डेटा पढ़ने के लिए क्वेरी चला सकते हैं. इस क्वेरी को BigQuery कंसोल में चलाएं और पक्का करें कि आपने ${PROJECT_ID} की वैल्यू बदल दी हो:
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
आउटपुट का उदाहरण:
आप काम के बारे में जानकारी देख सकते हैं, जैसे कि इसे चलने में कितना समय लगा और 'नौकरी की जानकारी' में कितना डेटा प्रोसेस किया गया करें.
इसके बाद, आपको स्पैनर में डेटा बूस्ट कनेक्शन जोड़ना होगा और नतीजों की तुलना करनी होगी.
6. डेटा बूस्ट का इस्तेमाल करके डेटा पढ़ें
स्पैनर डेटा बूस्ट का इस्तेमाल करने के लिए, आपको BigQuery से स्पैनर में एक नया बाहरी कनेक्शन बनाना होगा. ‘जोड़ें’ पर क्लिक करें BigQuery कंसोल में जाकर 'Connections from external data sources
' चुनें फिर से.
स्पैनर में समान कनेक्शन यूआरआई के साथ जानकारी भरें. 'कनेक्शन आईडी' बदलें और ‘डेटा बूस्ट का इस्तेमाल करें’ विकल्प को देखें बॉक्स.
डेटा बूस्ट कनेक्शन बन जाने के बाद, कनेक्शन के नए नाम का इस्तेमाल करके वही क्वेरी चलाई जा सकती है. फिर से क्वेरी में अपना Project_id बदलें.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
आपको पहले की तरह ही नतीजे का सेट मिलेगा. क्या समय में बदलाव हुआ है?
7. डेटा बूस्ट को समझना
स्पैनर डेटा बूस्ट आपको ऐसे संसाधनों का उपयोग करने देता है, जो आपके स्पैनर इंस्टेंस संसाधनों से संबंधित नहीं हैं. इससे, विश्लेषण के आधार पर किए जाने वाले वर्कलोड का असर, आपके काम करने के तरीके पर कम पड़ता है.
अगर दो या तीन मिनट से ज़्यादा बार, डेटा बूस्ट का इस्तेमाल न करने के लिए क्वेरी चलाई जाती है, तो आपको यह दिख सकता है. ${PROJECT_ID}
को बदलना न भूलें.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_no-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
इसके बाद, कुछ और मिनट इंतज़ार करें और डेटा बूस्ट का इस्तेमाल करने के लिए क्वेरी को कुछ और बार चलाएं. ${PROJECT_ID}
को बदलना न भूलें.
SELECT *
FROM (
SELECT * FROM EXTERNAL_QUERY("projects/${PROJECT_ID}/locations/us-central1/connections/codelab-demo-chat_use-databoost", "SELECT users.userUUID, SHA256(users.email) as hashed_email, COUNT(*) num_topics, m.last_posted from users HASH JOIN (select MAX(t.created) last_posted, t.userUUID FROM topics t GROUP BY 2) m USING (userUUID)HASH JOIN topics USING (userUUID) GROUP BY users.userUUID, users.email, m.last_posted")
)
ORDER BY num_topics DESC;
अब Cloud Console में, स्पैनर स्टूडियो पर वापस जाएं और 'सिस्टम इनसाइट' पर जाएं
यहां सीपीयू मेट्रिक देखी जा सकती हैं. डेटा बूस्ट के बिना चल रही क्वेरी ‘executsql_select_withpartitiontoken' के लिए सीपीयू का इस्तेमाल कर रही हैं कार्रवाइयां. क्वेरी एक जैसी होने पर भी, आपके इंस्टेंस सीपीयू (CPU) के इस्तेमाल में डेटा बूस्ट की प्रोसेस नहीं दिखती.
कई मामलों में, डेटा बूस्ट का इस्तेमाल करने पर विश्लेषण करने वाली क्वेरी की परफ़ॉर्मेंस बेहतर होगी. इस ट्यूटोरियल में दिया गया डेटा सेट छोटा है. साथ ही, संसाधनों के लिए प्रतिस्पर्धा करने को लेकर कोई और काम नहीं किया गया है. इसलिए, इस ट्यूटोरियल से परफ़ॉर्मेंस में सुधार होने की उम्मीद नहीं की जाती.
बेझिझक क्वेरी और वर्कलोड को समझें और देखें कि डेटा बूस्ट कैसे काम करता है. काम पूरा हो जाने के बाद, पर्यावरण को साफ़ करने के लिए अगले सेक्शन पर जाएं.
8. पर्यावरण साफ़ करें
अगर आपने अपना प्रोजेक्ट खास तौर पर इस कोडलैब के लिए बनाया है, तो प्रोजेक्ट को मिटाकर, उसे खाली किया जा सकता है. अगर आपको प्रोजेक्ट सेव रखना है और उसके अलग-अलग कॉम्पोनेंट हटाने हैं, तो यह तरीका अपनाएं.
BigQuery कनेक्शन हटाएं
दोनों कनेक्शन को हटाने के लिए, कनेक्शन के नाम के बगल में मौजूद तीन बिंदुओं पर क्लिक करें. 'मिटाएं' चुनें. इसके बाद, कनेक्शन मिटाने के लिए निर्देशों का पालन करें.
Cloud Storage बकेट मिटाएं
gcloud storage rm --recursive gs://$GCS_BUCKET
स्पैनर इंस्टेंस मिटाएं
स्टोरेज खाली करने के लिए, बस Cloud Console के Cloud Spanner सेक्शन में जाएं और ‘codelab-demo
' को मिटाएं जिसे हमने कोडलैब में बनाया है.
9. बधाई हो
कोडलैब पूरा करने के लिए बधाई.
हमने इन विषयों के बारे में बताया
- स्पैनर इंस्टेंस को डिप्लॉय करने का तरीका
- Dataflow का इस्तेमाल करके, स्पैनर में डेटा लोड करने का तरीका
- BigQuery से स्पैनर डेटा को ऐक्सेस करने का तरीका
- BigQuery से विश्लेषण करने वाली क्वेरी के लिए अपने स्पैनर इंस्टेंस पर पड़ने वाले असर को रोकने के लिए स्पैनर डेटा बूस्ट का इस्तेमाल कैसे करें
10. सर्वे
आउटपुट: