BigQuery के लिए bq कमांड-लाइन टूल की मदद से, डेटा लोड करें और उसके बारे में क्वेरी करें

1. परिचय

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

आपको क्या सीखने को मिलेगा

  • BigQuery के लिए bq कमांड-लाइन टूल का इस्तेमाल कैसे करें
  • स्थानीय डेटा फ़ाइलों को BigQuery टेबल में लोड करने का तरीका

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

  • Google Cloud प्रोजेक्ट
  • कोई ब्राउज़र, जैसे कि Google Chrome

2. सेट अप करें

BigQuery चालू करना

अगर आपके पास Google खाता नहीं है, तो आपको एक खाता बनाना होगा.

  1. Google Cloud Console में साइन इन करें और BigQuery पर जाएं. अपने ब्राउज़र में यह यूआरएल डालकर, BigQuery वेब यूज़र इंटरफ़ेस (यूआई) को सीधे तौर पर भी खोला जा सकता है.
https://console.cloud.google.com/bigquery
  1. सेवा की शर्तें स्वीकार करें.
  2. BigQuery का इस्तेमाल करने से पहले, आपको एक प्रोजेक्ट बनाना होगा. नया प्रोजेक्ट बनाने के लिए, निर्देशों का पालन करें.

प्रोजेक्ट का नाम चुनें और प्रोजेक्ट आईडी नोट कर लें. 1884405a64ce5765.png

प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए एक यूनीक नाम होता है. इस कोड लैब में इसे बाद में PROJECT_ID के तौर पर दिखाया जाएगा.

यह कोडलैब, BigQuery सैंडबॉक्स की सीमाओं के तहत BigQuery संसाधनों का इस्तेमाल करता है. बिलिंग खाते की ज़रूरत नहीं है. अगर आपको बाद में सैंडबॉक्स की सीमाएँ हटानी हैं, तो Google Cloud को बिना किसी शुल्क के आज़माने के लिए साइन अप करके, बिलिंग खाता जोड़ा जा सकता है.

Cloud Shell

आपको Cloud Shell का इस्तेमाल करना होगा. यह Google Cloud में चलने वाला कमांड-लाइन एनवायरमेंट है.

Cloud Shell चालू करें

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

bce75f34b2c53987.png

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

70f315d7b402b476.png

Cloud Shell से कनेक्ट होने में कुछ ही सेकंड लगेंगे.

fbe3a0674c982259.png

इस वर्चुअल मशीन में, डेवलपमेंट के लिए ज़रूरी सभी टूल पहले से मौजूद होते हैं. यह 5 जीबी की होम डायरेक्ट्री उपलब्ध कराता है और 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. यह पुष्टि करने के लिए कि gcloud कमांड को आपके प्रोजेक्ट के बारे में पता है, Cloud Shell में यह कमांड चलाएं:
gcloud config list project

कमांड आउटपुट

[core]
project = <PROJECT_ID>

अगर ऐसा नहीं है, तो इस कमांड का इस्तेमाल करके इसे सेट किया जा सकता है:

gcloud config set project <PROJECT_ID>

कमांड आउटपुट

Updated property [core/project].

3. डेटासेट बनाना

अपनी टेबल को शामिल करने के लिए, एक डेटासेट बनाएं.

डेटासेट क्या होता है?

BigQuery डेटासेट, टेबल का कलेक्शन होता है. डेटासेट की सभी टेबल, एक ही डेटा लोकेशन में सेव की जाती हैं. डेटासेट और उसकी टेबल का ऐक्सेस सीमित करने के लिए, कस्टम ऐक्सेस कंट्रोल भी अटैच किए जा सकते हैं.

डेटासेट बनाना

Cloud Shell में, bq mk कमांड का इस्तेमाल करके "bq_load_codelab" नाम का डेटासेट बनाएं.

bq mk bq_load_codelab

डेटासेट की प्रॉपर्टी देखना

bq show कमांड का इस्तेमाल करके, डेटासेट की प्रॉपर्टी देखें और पुष्टि करें कि आपने डेटासेट बनाया है.

bq show bq_load_codelab

आपको इससे मिलता-जुलता आउटपुट दिखेगा:

Dataset my-project:bq_load_codelab

   Last modified           ACLs          Labels
 ----------------- -------------------- --------
  15 Jun 14:12:49   Owners:
                      projectOwners,
                      your-email@example.com
                    Writers:
                      projectWriters
                    Readers:
                      projectReaders

4. डेटा फ़ाइल बनाना

BigQuery, कई डेटा फ़ॉर्मैट से डेटा लोड कर सकता है. इनमें न्यूलाइन-डीलिमिटेड JSON, Avro, और CSV शामिल हैं. आसानी के लिए, CSV फ़ाइल का इस्तेमाल किया जाएगा.

CSV फ़ाइल बनाना

Cloud Shell में, एक खाली CSV फ़ाइल बनाएं.

touch customer_transactions.csv

Cloud Shell में कोड एडिटर में CSV फ़ाइल खोलें. इसके लिए, cloudshell edit कमांड चलाएं. इससे कोड एडिटर और Cloud Shell पैनल के साथ एक नई ब्राउज़र विंडो खुलेगी.

cloudshell edit customer_transactions.csv

कोड एडिटर में, कॉमा लगाकर अलग की गई कुछ वैल्यू डालें, ताकि उन्हें BigQuery में लोड किया जा सके.

ID,Zipcode,Timestamp,Amount,Feedback,SKU
c123,78757,2018-02-14 17:01:39Z,1.20,4.7,he4rt5
c456,10012,2018-03-14 15:09:26Z,53.60,3.1,ppiieee
c123,78741,2018-04-01 05:59:47Z,5.98,2.0,ch0c0

फ़ाइल > बदलाव करें पर क्लिक करके, CSV फ़ाइल को सेव करें.

5. डेटा लोड करें

bq load कमांड का इस्तेमाल करके, अपनी CSV फ़ाइल को BigQuery टेबल में लोड करें.

bq load \
    --source_format=CSV \
    --skip_leading_rows=1 \
    bq_load_codelab.customer_transactions \
    ./customer_transactions.csv \
    id:string,zip:string,ttime:timestamp,amount:numeric,fdbk:float,sku:string

आपने इन विकल्पों का इस्तेमाल किया:

  • --source_format=CSV डेटा फ़ाइल को पार्स करते समय, CSV डेटा फ़ॉर्मैट का इस्तेमाल करता है.
  • --skip_leading_rows=1 CSV फ़ाइल की पहली लाइन को छोड़ देता है, क्योंकि यह हेडर लाइन होती है.
  • Bq_load_codelab.customer_transactions—the first positional argument—से यह तय होता है कि डेटा को किस टेबल में लोड किया जाना चाहिए.
  • ./customer_transactions.csv—दूसरा पोज़ीशनल आर्ग्युमेंट—यह तय करता है कि कौनसी फ़ाइल लोड करनी है. bq load कमांड, लोकल फ़ाइलों के साथ-साथ Cloud Storage से भी फ़ाइलें लोड कर सकती है. इसके लिए, gs://my_bucket/path/to/file URIs का इस्तेमाल किया जाता है.
  • एक स्कीमा, जिसे JSON स्कीमा फ़ाइल में या कॉमा लगाकर अलग की गई सूची के तौर पर तय किया जा सकता है. (आपने आसानी के लिए, कॉमा लगाकर अलग की गई सूची का इस्तेमाल किया है.)

आपने customer_transactions टेबल में इस स्कीमा का इस्तेमाल किया है:

  • Id:string: ग्राहक का आइडेंटिफ़ायर
  • Zip:string: अमेरिका का पिन कोड
  • Ttime:timestamp: लेन-देन होने की तारीख और समय
  • Amount:numeric: लेन-देन की रकम (A संख्या वाले कॉलम में डेटा को दशमलव के रूप में सेव किया जाता है. यह मॉनेटरी वैल्यू के लिए फ़ायदेमंद होता है.)
  • Fdbk:float: लेन-देन के बारे में सुझाव/राय देने या शिकायत करने के लिए किए गए सर्वे से मिली रेटिंग
  • Sku:string: खरीदे गए सामान का आइडेंटिफ़ायर

टेबल की जानकारी पाना

टेबल की प्रॉपर्टी दिखाकर पुष्टि करें कि टेबल लोड हो गई है.

bq show bq_load_codelab.customer_transactions

आउटपुट:

Table my-project:bq_load_codelab.customer_transactions

   Last modified          Schema          Total Rows   Total Bytes
 ----------------- --------------------- ------------ -------------
  15 Jun 15:13:55   |- id: string         3            159
                    |- zip: string
                    |- ttime: timestamp
                    |- amount: numeric
                    |- fdbk: float
                    |- sku: string

6. डेटा से जुड़ी क्वेरी करना

डेटा लोड हो जाने के बाद, BigQuery वेब यूज़र इंटरफ़ेस (यूआई), bq कमांड या API का इस्तेमाल करके क्वेरी की जा सकती है. आपकी क्वेरी, आपके डेटा को किसी भी ऐसे डेटासेट (या डेटासेट, बशर्ते वे एक ही जगह पर हों) के साथ जोड़ सकती हैं जिसे पढ़ने की अनुमति आपके पास है.

एक स्टैंडर्ड एसक्यूएल क्वेरी चलाएं. यह क्वेरी, आपके डेटासेट को अमेरिका के पिन कोड वाले डेटासेट से जोड़ती है और अमेरिका के राज्य के हिसाब से लेन-देन का हिसाब लगाती है. क्वेरी को चलाने के लिए, bq query कमांड का इस्तेमाल करें.

bq query --nouse_legacy_sql '
SELECT SUM(c.amount) AS amount_total, z.state_code AS state_code
FROM `bq_load_codelab.customer_transactions` c
JOIN `bigquery-public-data.utility_us.zipcode_area` z
ON c.zip = z.zipcode
GROUP BY state_code
'

उस कमांड का आउटपुट कुछ ऐसा दिखना चाहिए:

Waiting on bqjob_r26...05a15b38_1 ... (1s) Current status: DONE   
+--------------+------------+
| amount_total | state_code |
+--------------+------------+
|         53.6 | NY         |
|         7.18 | TX         |
+--------------+------------+

आपने जो क्वेरी चलाई है उसमें सार्वजनिक डेटासेट और आपके निजी डेटासेट का इस्तेमाल किया गया है. इस क्वेरी के टिप्पणी वाले वर्शन को पढ़कर ज़्यादा जानें:

#standardSQL
SELECT
  /* Total of all transactions in the state. */
  SUM(c.amount) AS amount_total,

  /* State corresponding to the transaction's zipcode. */
  z.state_code AS state_code

/* Query the table you just constructed.
 * Note: If you omit the project from the table ID,
 *       the dataset is read from your project. */
FROM `bq_load_codelab.customer_transactions` c

/* Join the table to the zipcode public dataset. */
JOIN `bigquery-public-data.utility_us.zipcode_area` z

/* Find the state corresponding to the transaction's zipcode. */
ON c.zip = z.zipcode

/* Group over all transactions by state. */
GROUP BY state_code

7. व्यवस्थित करें

bq rm कमांड का इस्तेमाल करके बनाए गए डेटासेट को मिटाएं. इसमें मौजूद किसी भी टेबल को हटाने के लिए, -r फ़्लैग का इस्तेमाल करें.

bq rm -r bq_load_codelab

8. बधाई हो!

आपने BigQuery में एक टेबल अपलोड की और उस पर क्वेरी की!

आपने क्या-क्या कवर किया

  • BigQuery के साथ इंटरैक्ट करने के लिए, bq कमांड-लाइन टूल का इस्तेमाल करना.
  • BigQuery क्वेरी की मदद से, अपने डेटा और सार्वजनिक डेटासेट को जोड़ना.

आगे क्या करना है

इनके बारे में ज़्यादा जानें: