Python के साथ BigQuery का इस्तेमाल करना

1. खास जानकारी

BigQuery, Google का पूरी तरह से मैनेज किया गया डेटा वेयरहाउस है. इसमें, कम कीमत में कई पेटाबाइट डेटा के विश्लेषण की सुविधा मिलती है. BigQuery NoOps है—इसे मैनेज करने के लिए कोई इन्फ़्रास्ट्रक्चर नहीं है और आपको डेटाबेस एडमिन की भी ज़रूरत नहीं है. इसलिए, डेटा के विश्लेषण पर फ़ोकस करके काम की इनसाइट पाएं, जाने-पहचाने एसक्यूएल का इस्तेमाल करें, और इस्तेमाल के हिसाब से पैसे चुकाने वाले मॉडल का फ़ायदा पाएं.

इस कोडलैब में, Python के साथ BigQuery के सार्वजनिक डेटासेट की क्वेरी करने के लिए, Python के लिए Google Cloud क्लाइंट लाइब्रेरी का इस्तेमाल करें.

आपको इनके बारे में जानकारी मिलेगी

  • Cloud Shell का इस्तेमाल कैसे करें
  • BigQuery API चालू करने का तरीका
  • एपीआई अनुरोधों की पुष्टि करने का तरीका
  • Python क्लाइंट लाइब्रेरी को इंस्टॉल करने का तरीका
  • शेक्सपियर के काम के बारे में क्वेरी करने का तरीका
  • GitHub के डेटासेट से जुड़ी क्वेरी करने का तरीका
  • कैश मेमोरी और डिसप्ले आंकड़ों में बदलाव करने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • ब्राउज़र, जैसे कि Chrome या Firefox
  • Python का इस्तेमाल करना

सर्वे

इस ट्यूटोरियल का इस्तेमाल कैसे किया जाएगा?

इसे सिर्फ़ पढ़ें इसे पढ़ें और कसरतों को पूरा करें

Python के साथ अपने अनुभव को आप कितनी रेटिंग देंगे?

शुरुआती इंटरमीडिएट कुशल

Google Cloud की सेवाएं इस्तेमाल करने का आपका अनुभव कैसा रहा?

शुरुआती इंटरमीडिएट कुशल

2. सेटअप और ज़रूरी शर्तें

अपने हिसाब से एनवायरमेंट सेटअप करना

  1. Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. साथ ही, आप इसे किसी भी समय अपडेट कर सकते हैं.
  • प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होना चाहिए. साथ ही, आईडी को बदला नहीं जा सकता. सेट अप के बाद इसे बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना पड़ता है और आम तौर पर इसकी पहचान PROJECT_ID के रूप में की जाती है. इसलिए, अगर आपको यह पसंद नहीं आता है, तो कोई भी कोड जनरेट करें. इसके अलावा, खुद का भी कोड बनाकर देखा जा सकता है कि वह उपलब्ध है या नहीं. फिर यह "फ़्रोज़न" होता है प्रोजेक्ट बनने के बाद.
  • तीसरी वैल्यू, प्रोजेक्ट नंबर है, जिसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
  1. इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा किसी अन्य प्लैटफ़ॉर्म पर बिलिंग न करने के लिए, संसाधनों को बंद करने के लिए, "साफ़-सफ़ाई" का पालन करें कोडलैब के आखिर में दिए गए निर्देश देखें. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.

Cloud Shell शुरू करना

Google Cloud को आपके लैपटॉप से, कहीं से भी ऑपरेट किया जा सकता है. हालांकि, इस कोडलैब में Google Cloud Shell का इस्तेमाल किया जा रहा है. यह क्लाउड में चलने वाला कमांड लाइन एनवायरमेंट है.

Cloud Shell चालू करें

  1. Cloud Console में, Cloud Shell चालू करें 853e55310c205094.png पर क्लिक करें.

55efc1aaa7a4d3ad.png

अगर आपने Cloud Shell का इस्तेमाल पहले कभी नहीं किया है, तो आपको इसके बारे में जानकारी देने वाली एक इंटरमीडिएट स्क्रीन (पेज के फ़ोल्ड के नीचे) दिखेगी. अगर ऐसा है, तो जारी रखें पर क्लिक करें (यह आपको फिर कभी नहीं दिखेगा). एक बार इस्तेमाल होने वाली स्क्रीन कुछ इस तरह दिखती है:

9c92662c6a846a5c.png

प्रावधान करने और Cloud Shell से कनेक्ट होने में कुछ ही समय लगेगा.

9f0e51b578fecce5.png

इस वर्चुअल मशीन में ऐसे सभी डेवलपमेंट टूल मौजूद हैं जिनकी आपको ज़रूरत है. यह पांच जीबी की स्थायी होम डायरेक्ट्री उपलब्ध कराता है और Google Cloud में चलता है. यह नेटवर्क की परफ़ॉर्मेंस और पुष्टि करने की प्रोसेस को बेहतर बनाता है. अगर सभी नहीं, तो इस कोडलैब में आपका बहुत सारा काम बस किसी ब्राउज़र या आपके Chromebook से किया जा सकता है.

Cloud Shell से कनेक्ट करने के बाद, आपको दिखेगा कि आपकी पुष्टि पहले ही हो चुकी है. साथ ही, यह प्रोजेक्ट पहले से ही आपके प्रोजेक्ट आईडी पर सेट है.

  1. यह पुष्टि करने के लिए Cloud Shell में नीचे दिया गया कमांड चलाएं कि आपकी पुष्टि हो गई है:
gcloud auth list

कमांड आउटपुट

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Cloud Shell में यह कमांड चलाएं, ताकि यह पुष्टि की जा सके कि gcloud के लिए कमांड को आपके प्रोजेक्ट के बारे में जानकारी है:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो आप इसे इस निर्देश की मदद से सेट कर सकते हैं:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. इस एपीआई को चालू करें

Google Cloud के सभी प्रोजेक्ट में BigQuery API, डिफ़ॉल्ट रूप से चालू होना चाहिए. Cloud Shell में यह कमांड इस्तेमाल करके यह पता लगाया जा सकता है कि यह बात सही है या नहीं: आपको BigQuery की सूची में शामिल होना चाहिए:

gcloud services list

आपको सूची में BigQuery दिखेगा:

NAME                              TITLE
bigquery.googleapis.com           BigQuery API

...

अगर BigQuery API चालू नहीं है, तो इसे चालू करने के लिए Cloud Shell में इस कमांड का इस्तेमाल किया जा सकता है:

gcloud services enable bigquery.googleapis.com

4. एपीआई अनुरोधों की पुष्टि करें

BigQuery API को अनुरोध करने के लिए, आपको सेवा खाते का इस्तेमाल करना होगा. सेवा खाता आपके प्रोजेक्ट से जुड़ा होता है. Google Cloud Python क्लाइंट लाइब्रेरी, BigQuery API अनुरोध करने के लिए इसका इस्तेमाल करती है. किसी भी दूसरे उपयोगकर्ता खाते की तरह, सेवा खाते को ईमेल पते के तौर पर दिखाया जाता है. इस सेक्शन में, आपको सेवा खाता बनाने के लिए Cloud SDK टूल का इस्तेमाल करना होगा. इसके बाद, ऐसे क्रेडेंशियल बनाने होंगे जिनकी पुष्टि, सेवा खाते के तौर पर करनी होगी.

सबसे पहले, PROJECT_ID एनवायरमेंट वैरिएबल सेट करें:

export PROJECT_ID=$(gcloud config get-value core/project)

इसके बाद, BigQuery API को ऐक्सेस करने के लिए, नया सेवा खाता बनाएं. इसके लिए, इनका इस्तेमाल करें:

gcloud iam service-accounts create my-bigquery-sa \
  --display-name "my bigquery service account"

इसके बाद, वे क्रेडेंशियल बनाएं जिनका इस्तेमाल आपका Python कोड आपके नए सेवा खाते के तौर पर लॉगिन करने के लिए करेगा. ये क्रेडेंशियल बनाएं और यहां दिए गए निर्देश का इस्तेमाल करके, इसे JSON फ़ाइल ~/key.json के तौर पर सेव करें:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com

आखिर में, अपने क्रेडेंशियल खोजने के लिए GOOGLE_APPLICATION_CREDENTIALS एनवायरमेंट वैरिएबल सेट करें, जिसका इस्तेमाल BigQuery Python क्लाइंट लाइब्रेरी करता है. इसके बारे में अगले चरण में बताया गया है. एनवायरमेंट वैरिएबल को आपकी बनाई गई क्रेडेंशियल JSON फ़ाइल के पूरे पाथ पर सेट किया जाना चाहिए. इसके लिए, इनका इस्तेमाल करें:

export GOOGLE_APPLICATION_CREDENTIALS=~/key.json

BigQuery API की पुष्टि करने के बारे में ज़्यादा जानें.

5. ऐक्सेस कंट्रोल सेट अप करें

BigQuery, संसाधनों का ऐक्सेस मैनेज करने के लिए पहचान और ऐक्सेस मैनेजमेंट (आईएएम) का इस्तेमाल करता है. BigQuery में पहले से तय कई भूमिकाएं होती हैं. जैसे, उपयोगकर्ता, dataमालिक, dataViewer वगैरह. ये भूमिकाएं, पिछले चरण में बनाए गए अपने सेवा खाते को असाइन की जा सकती हैं. BigQuery दस्तावेज़ में, ऐक्सेस कंट्रोल के बारे में ज़्यादा जानकारी हासिल की जा सकती है.

सार्वजनिक डेटासेट के लिए क्वेरी करने से पहले, आपको यह पक्का करना होगा कि सेवा खाते के पास कम से कम roles/bigquery.user की भूमिका हो. Cloud Shell में, सेवा खाते को उपयोगकर्ता की भूमिका असाइन करने के लिए यह कमांड चलाएं:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/bigquery.user"

यह पुष्टि करने के लिए कि सेवा खाते में उपयोगकर्ता की भूमिका है, यह निर्देश दिया जा सकता है:

gcloud projects get-iam-policy $PROJECT_ID

आपको यह जानकारी दिखेगी:

bindings:
- members:
  - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com
  role: roles/bigquery.user
...

6. क्लाइंट लाइब्रेरी इंस्टॉल करना

BigQuery Python क्लाइंट लाइब्रेरी इंस्टॉल करें:

pip3 install --user --upgrade google-cloud-bigquery

अब आप BigQuery API की मदद से कोड करने के लिए तैयार हैं!

7. शेक्सपियर के काम के बारे में क्वेरी करें

सार्वजनिक डेटासेट, ऐसा डेटासेट होता है जिसे BigQuery में सेव करके आम लोगों के लिए उपलब्ध कराया जाता है. आपके लिए क्वेरी करने के लिए कई अन्य सार्वजनिक डेटासेट उपलब्ध हैं. कुछ डेटासेट Google होस्ट करता है और ज़्यादातर तीसरे पक्ष होस्ट करते हैं. ज़्यादा जानकारी के लिए, सार्वजनिक डेटासेट पेज देखें.

सार्वजनिक डेटासेट के अलावा, BigQuery सीमित संख्या में सैंपल टेबल उपलब्ध कराता है, जिनके लिए क्वेरी की जा सकती है. ये टेबल bigquery-public-data:samples डेटासेट में शामिल हैं. samples डेटासेट की shakespeare टेबल में, शेक्सपियर के काम का वर्ड इंडेक्स शामिल है. इससे पता चलता है कि हर कॉर्पस (संग्रह) में कोई शब्द कितनी बार आया.

इस चरण में, shakespeare टेबल के लिए क्वेरी की जाएगी.

सबसे पहले, Cloud Shell में एक आसान Python ऐप्लिकेशन बनाएं. इसका इस्तेमाल, Translate API के सैंपल चलाने के लिए किया जा सकता है.

mkdir bigquery-demo
cd bigquery-demo
touch app.py

क्लाउड शेल के सबसे ऊपर दाईं ओर मौजूद कोड एडिटर को खोलें:

b648141af44811a3.png

bigquery-demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इन कोड से बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT corpus AS title, COUNT(word) AS unique_words
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY title
    ORDER BY unique_words
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    title = row['title']
    unique_words = row['unique_words']
    print(f'{title:<20} | {unique_words}')

कोड को समझने में कुछ समय लगेगा. इससे आपको पता चलेगा कि टेबल के बारे में किस तरह से क्वेरी की जा रही है.

Cloud Shell पर वापस जाकर, इस ऐप्लिकेशन को चलाएं:

python3 app.py

आपको शब्दों और उनकी घटनाओं की सूची दिखेगी:

hamlet               | 5318
kinghenryv           | 5104
cymbeline            | 4875
troilusandcressida   | 4795
kinglear             | 4784
kingrichardiii       | 4713
2kinghenryvi         | 4683
coriolanus           | 4653
2kinghenryiv         | 4605
antonyandcleopatra   | 4582

8. GitHub डेटासेट की क्वेरी करें

BigQuery के बारे में ज़्यादा जानने के लिए, अब आपको GitHub के सार्वजनिक डेटासेट के लिए एक क्वेरी जारी करनी होगी. आपको GitHub पर सबसे ज़्यादा इस्तेमाल होने वाले मैसेज मिलेंगे. ऐड-हॉक क्वेरी की झलक देखने और उन्हें चलाने के लिए, BigQuery के वेब कंसोल का इस्तेमाल किया जा सकता है.

यह देखने के लिए कि डेटा कैसा दिखता है, BigQuery वेब यूज़र इंटरफ़ेस (यूआई) में GitHub डेटासेट खोलें:

github_repos टेबल खोलें

डेटा कैसा दिखता है, यह जानने के लिए 'झलक देखें' बटन पर क्लिक करें:

d3f0dc7400fbe678.png

bigquery_demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इन कोड से बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

कुछ समय निकालकर कोड को समझ लें और देखें कि आम तौर पर सबसे ज़्यादा बताए गए मैसेज के लिए, टेबल पर किस तरह क्वेरी की जा रही है.

Cloud Shell पर वापस जाकर, इस ऐप्लिकेशन को चलाएं:

python3 app.py

आपको तय किए गए मैसेज और उनके इस्तेमाल की सूची दिखेगी:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862

9. कैश मेमोरी में सेव करना और आंकड़े

BigQuery, क्वेरी के नतीजों को कैश मेमोरी में सेव करता है. इस वजह से, बाद की क्वेरी में कम समय लगता है. क्वेरी के विकल्पों का इस्तेमाल करके कैश मेमोरी में डेटा सेव करने की सुविधा बंद की जा सकती है. BigQuery, क्वेरी बनाने का समय, खत्म होने का समय, प्रोसेस की गई कुल बाइट जैसी क्वेरी से जुड़े आंकड़ों का भी ट्रैक रखता है.

इस चरण में, कैश मेमोरी में डेटा सेव होने की सुविधा बंद की जाती है और क्वेरी के आंकड़े भी दिखाए जाते हैं.

bigquery_demo फ़ोल्डर में मौजूद app.py फ़ाइल पर जाएं और कोड को इन कोड से बदलें.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

print('-'*60)
print(f'Created: {results.created}')
print(f'Ended:   {results.ended}')
print(f'Bytes:   {results.total_bytes_processed:,}')

कोड के बारे में ध्यान देने वाली कुछ बातें. सबसे पहले, QueryJobConfig के बारे में जानकारी देकर और use_query_cache को 'गलत है' पर सेट करके, कैश मेमोरी की सुविधा बंद कर दी जाती है. इसके बाद, आपने जॉब ऑब्जेक्ट से क्वेरी के आंकड़े को ऐक्सेस किया.

Cloud Shell पर वापस जाकर, इस ऐप्लिकेशन को चलाएं:

python3 app.py

पहले की तरह ही, आपको रिपोर्ट किए गए मैसेज और उनके इस्तेमाल की सूची दिखेगी. इसके अलावा, आपको आखिर में क्वेरी के बारे में कुछ आंकड़े भी दिखेंगे:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended:   2020-04-03 13:30:15.334000+00:00
Bytes:   2,868,251,894

10. BigQuery में डेटा लोड हो रहा है

अपने डेटा के लिए क्वेरी करने के लिए, आपको BigQuery में अपना डेटा लोड करना होगा. BigQuery की मदद से कई सोर्स से डेटा लोड किया जा सकता है. जैसे, Cloud Storage, Google की अन्य सेवाएं, और आसानी से पढ़ा जा सकने वाले अन्य सोर्स. स्ट्रीमिंग इन्सर्ट का इस्तेमाल करके भी अपना डेटा स्ट्रीम किया जा सकता है. ज़्यादा जानकारी के लिए, BigQuery में डेटा लोड करना पेज देखें.

इस चरण में, Cloud Storage में सेव की गई JSON फ़ाइल को BigQuery टेबल में लोड किया जाएगा. JSON फ़ाइल, gs://cloud-samples-data/bigquery/us-states/us-states.json पर मौजूद है

अगर आपको JSON फ़ाइल के कॉन्टेंट के बारे में जानना है, तो gsutil कमांड-लाइन टूल का इस्तेमाल करके, उसे Cloud Shell में डाउनलोड किया जा सकता है:

gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .

यहां अमेरिका के राज्यों की सूची दी गई है और हर राज्य एक अलग लाइन में JSON दस्तावेज़ है:

head us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

इस JSON फ़ाइल को BigQuery में लोड करने के लिए, bigquery_demo फ़ोल्डर में app.py फ़ाइल पर जाएं और कोड को यहां दिए गए कोड से बदलें.

from google.cloud import bigquery

client = bigquery.Client()

gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'

dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')

job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)

print('JSON file loaded to BigQuery')

दो मिनट का समय निकालें और यह पता लगाएं कि कोड, JSON फ़ाइल को कैसे लोड करता है और डेटासेट के अंदर स्कीमा के साथ टेबल कैसे बनाता है.

Cloud Shell पर वापस जाकर, इस ऐप्लिकेशन को चलाएं:

python3 app.py

BigQuery में डेटासेट और टेबल बनाई जाती हैं.

डेटासेट बनाए जाने की पुष्टि करने के लिए, BigQuery कंसोल पर जाएं. आपको एक नया डेटासेट और टेबल दिखेगी. अपना डेटा देखने के लिए, टेबल के 'झलक' टैब पर स्विच करें:

8c7d2621820a5ac4.png

11. बधाई हो!

आपने Python के साथ BigQuery इस्तेमाल करने का तरीका सीख लिया है!

खाली करने के लिए जगह

इस ट्यूटोरियल में इस्तेमाल किए गए संसाधनों के लिए, आपके Google Cloud खाते पर लगने वाले शुल्क से बचने के लिए:

  • Cloud Console में, संसाधन मैनेज करें पेज पर जाएं.
  • प्रोजेक्ट की सूची में, अपना प्रोजेक्ट चुनें. इसके बाद, Delete पर क्लिक करें.
  • डायलॉग बॉक्स में, प्रोजेक्ट आईडी टाइप करें. इसके बाद, प्रोजेक्ट मिटाने के लिए शट डाउन करें पर क्लिक करें.

ज़्यादा जानें

लाइसेंस

इस काम को क्रिएटिव कॉमंस एट्रिब्यूशन 2.0 जेनरिक लाइसेंस के तहत लाइसेंस मिला है.