1. Google Cloud Storage और BigQuery का इस्तेमाल करके, Snowflake से Spanner तक रिवर्स ईटीएल पाइपलाइन बनाना
परिचय
इस कोडलैब में, Snowflake से Spanner तक रिवर्स ईटीएल पाइपलाइन बनाई गई है. आम तौर पर, ईटीएल (डेटा निकालना, ट्रांसफ़ॉर्म करना, और लोड करना) पाइपलाइन, ऑपरेशनल डेटाबेस से डेटा को Snowflake जैसे डेटा वेयरहाउस में ले जाती हैं, ताकि उसका विश्लेषण किया जा सके. रिवर्स ईटीएल पाइपलाइन, ईटीएल पाइपलाइन के उलट काम करती है. यह प्रोसेस किए गए डेटा को डेटा वेयरहाउस से वापस ऑपरेशनल सिस्टम में ले जाती है. इससे ऐप्लिकेशन को बेहतर बनाने, उपयोगकर्ताओं को सुविधाएं देने या रीयल-टाइम में फ़ैसले लेने में मदद मिलती है.
इसका मकसद, एग्रीगेट किए गए डेटासेट को Snowflake Iceberg टेबल से Spanner में ले जाना है. Spanner, दुनिया भर में उपलब्ध एक रिलेशनल डेटाबेस है. यह ज़्यादा उपलब्धता वाले ऐप्लिकेशन के लिए सबसे सही है.
इसके लिए, Google Cloud Storage (GCS) और BigQuery का इस्तेमाल इंटरमीडिएट चरणों के तौर पर किया जाता है. डेटा फ़्लो और इस आर्किटेक्चर के पीछे की वजह के बारे में यहां बताया गया है:
- Snowflake से Google Cloud Storage (GCS) में Iceberg फ़ॉर्मैट में डेटा ट्रांसफ़र करना:
- पहला चरण, Snowflake से डेटा को ओपन और अच्छी तरह से परिभाषित फ़ॉर्मैट में निकालना है. टेबल को Apache Iceberg फ़ॉर्मैट में एक्सपोर्ट किया जाता है. इस प्रोसेस में, डेटा को Parquet फ़ाइलों के सेट के तौर पर लिखा जाता है. साथ ही, टेबल के मेटाडेटा (स्कीमा, पार्टिशन, फ़ाइल की जगह) को JSON और Avro फ़ाइलों के तौर पर लिखा जाता है. इस पूरी टेबल स्ट्रक्चर को GCS में स्टेज करने से, डेटा को पोर्टेबल बनाया जा सकता है. साथ ही, इसे ऐसे किसी भी सिस्टम से ऐक्सेस किया जा सकता है जो Iceberg फ़ॉर्मैट को समझता है.
- GCS में मौजूद Iceberg टेबल को BigQuery BigLake की बाहरी टेबल में बदलना:
- GCS से सीधे Spanner में डेटा लोड करने के बजाय, BigQuery का इस्तेमाल एक इंटरमीडियरी के तौर पर किया जाता है. BigQuery में एक BigLake एक्सटर्नल टेबल बनाई जाएगी. यह सीधे तौर पर GCS में मौजूद Iceberg मेटाडेटा फ़ाइल की ओर ले जाती है. इस तरीके के कई फ़ायदे हैं:
- डेटा डुप्लीकेट नहीं होता: BigQuery, मेटाडेटा से टेबल स्ट्रक्चर को पढ़ता है. साथ ही, Parquet डेटा फ़ाइलों को इन प्लेस क्वेरी करता है. इसके लिए, उन्हें इनजेस्ट नहीं करता. इससे काफ़ी समय और स्टोरेज का खर्च बचता है.
- फ़ेडरेटेड क्वेरी: इसकी मदद से, GCS डेटा पर SQL की जटिल क्वेरी चलाई जा सकती हैं. ऐसा लगता है कि यह BigQuery की नेटिव टेबल है.
- BigQuery से Spanner:
- आखिरी चरण में, BigQuery से Spanner में डेटा ट्रांसफ़र किया जाता है. इसके लिए, आपको BigQuery की एक बेहतरीन सुविधा का इस्तेमाल करना होगा. इसे
EXPORT DATAक्वेरी कहा जाता है. यह "रिवर्स ईटीएल" चरण है. - ऑपरेशनल रेडीनेस: Spanner को लेन-देन से जुड़े वर्कलोड के लिए डिज़ाइन किया गया है. यह ऐप्लिकेशन के लिए, डेटा में एकरूपता और उपलब्धता बनाए रखता है. डेटा को Spanner में ट्रांसफ़र करने से, इसे उपयोगकर्ता के लिए उपलब्ध ऐप्लिकेशन, एपीआई, और अन्य ऑपरेशनल सिस्टम के लिए ऐक्सेस किया जा सकता है. इन सिस्टम को कम समय में पॉइंट लुकअप की ज़रूरत होती है.
- स्केलेबिलिटी: इस पैटर्न की मदद से, बड़े डेटासेट को प्रोसेस करने के लिए BigQuery की विश्लेषण क्षमता का फ़ायदा उठाया जा सकता है. इसके बाद, Spanner के ग्लोबल स्तर पर स्केलेबल इन्फ़्रास्ट्रक्चर की मदद से, नतीजों को असरदार तरीके से दिखाया जा सकता है.
सेवाएं और शब्दावली
- Snowflake - यह क्लाउड डेटा प्लैटफ़ॉर्म है, जो डेटा वेयरहाउस-एज़-ए-सर्विस उपलब्ध कराता है.
- Spanner - यह पूरी तरह से मैनेज किया जाने वाला, दुनिया भर में उपलब्ध रिलेशनल डेटाबेस है.
- Google Cloud Storage - Google Cloud की ओर से उपलब्ध कराया जाने वाला, बड़े डेटा को सेव करने का विकल्प.
- BigQuery - यह बिना सर्वर वाला डेटा वेयरहाउस है, जिसे Google पूरी तरह से मैनेज करता है. इसका इस्तेमाल डेटा के विश्लेषण के लिए किया जाता है.
- Iceberg - यह Apache की ओर से तय किया गया ओपन टेबल फ़ॉर्मैट है. यह ओपन-सोर्स डेटा फ़ाइल फ़ॉर्मैट के लिए ऐब्स्ट्रैक्शन उपलब्ध कराता है.
- Parquet - यह Apache का ओपन-सोर्स कॉलम वाला बाइनरी डेटा फ़ाइल फ़ॉर्मैट है.
आपको क्या सीखने को मिलेगा
- Snowflake में डेटा लोड करने का तरीका
- GCS बकेट बनाने का तरीका
- Snowflake टेबल को Iceberg फ़ॉर्मैट में GCS में एक्सपोर्ट करने का तरीका
- स्पैनर इंस्टेंस सेट अप करने का तरीका
- BigQuery में मौजूद BigLake की बाहरी टेबल को Spanner में लोड करने का तरीका
2. सेटअप, ज़रूरी शर्तें, और सीमाएं
ज़रूरी शर्तें
- Snowflake खाता
- BigQuery से Spanner में डेटा एक्सपोर्ट करने के लिए, BigQuery के Enterprise-tier या उससे ऊपर के रिज़र्वेशन वाला Google Cloud खाता होना ज़रूरी है.
- वेब ब्राउज़र से Google Cloud Console को ऐक्सेस करने की सुविधा
- Google Cloud CLI कमांड चलाने के लिए टर्मिनल
- अगर आपके Google Cloud संगठन में
iam.allowedPolicyMemberDomainsनीति चालू है, तो एडमिन को बाहरी डोमेन के सेवा खातों को अनुमति देने के लिए, अपवाद की अनुमति देनी पड़ सकती है. यह जानकारी, बाद के चरण में दी जाएगी.
सीमाएं
इस पाइपलाइन में कुछ सीमाएं और डेटा टाइप से जुड़ी समस्याएं आ सकती हैं. इनके बारे में आपको पता होना चाहिए.
Snowflake से Iceberg पर माइग्रेट करना
Snowflake और Iceberg के कॉलम के डेटा टाइप अलग-अलग होते हैं. इनके बीच अनुवाद करने के बारे में जानकारी, Snowflake के दस्तावेज़ में उपलब्ध है.
Iceberg से BigQuery में डेटा माइग्रेट करना
Iceberg टेबल से क्वेरी करने के लिए BigQuery का इस्तेमाल करते समय, कुछ सीमाएं होती हैं. पूरी सूची देखने के लिए, BigQuery दस्तावेज़ देखें. ध्यान दें कि फ़िलहाल, BIGNUMERIC, INTERVAL, JSON, RANGE या GEOGRAPHY जैसे टाइप काम नहीं करते.
BigQuery से Spanner
BigQuery से Spanner में डेटा ट्रांसफ़र करने के लिए इस्तेमाल की जाने वाली EXPORT DATA कमांड, BigQuery के सभी डेटा टाइप के साथ काम नहीं करती. इस तरह की टेबल एक्सपोर्ट करने पर गड़बड़ी होगी:
STRUCTGEOGRAPHYDATETIMERANGETIME
इसके अलावा, अगर BigQuery प्रोजेक्ट GoogleSQL डायलेक्ट का इस्तेमाल कर रहा है, तो Spanner में एक्सपोर्ट करने के लिए, यहां दिए गए संख्या वाले टाइप भी काम नहीं करते:
BIGNUMERIC
सीमाओं की पूरी और अप-टू-डेट सूची देखने के लिए, आधिकारिक दस्तावेज़ देखें: Spanner में एक्सपोर्ट करने से जुड़ी सीमाएं.
Snowflake
इस कोडलैब के लिए, किसी मौजूदा Snowflake खाते का इस्तेमाल किया जा सकता है. इसके अलावा, मुफ़्त में आज़माने की सुविधा वाला खाता भी सेट अप किया जा सकता है.
Google Cloud Platform IAM की अनुमतियां
इस कोडलैब में दिए गए सभी चरणों को पूरा करने के लिए, Google खाते के पास ये अनुमतियां होनी चाहिए.
सेवा खाते | ||
| इससे सेवा खाते बनाए जा सकते हैं. | |
Spanner | ||
| इससे नया Spanner इंस्टेंस बनाया जा सकता है. | |
| DDL स्टेटमेंट चलाने की अनुमति देता है, ताकि | |
| इसकी मदद से, डेटाबेस में टेबल बनाने के लिए DDL स्टेटमेंट चलाए जा सकते हैं. | |
Google Cloud Storage | ||
| इस विकल्प की मदद से, एक्सपोर्ट की गई Parquet फ़ाइलों को सेव करने के लिए, नया GCS बकेट बनाया जा सकता है. | |
| इस भूमिका की मदद से, एक्सपोर्ट की गई Parquet फ़ाइलों को GCS बकेट में लिखा जा सकता है. | |
| इससे BigQuery को GCS बकेट से Parquet फ़ाइलें पढ़ने की अनुमति मिलती है. | |
| इससे BigQuery को GCS बकेट में मौजूद Parquet फ़ाइलों की सूची बनाने की अनुमति मिलती है. | |
डेटाफ़्लो | ||
| इससे Dataflow से वर्क आइटम को क्लेम करने की अनुमति मिलती है. | |
| इस कुकी से, Dataflow वर्कर को Dataflow सेवा पर वापस मैसेज भेजने की अनुमति मिलती है. | |
| इस भूमिका की मदद से, Dataflow वर्कर को Google Cloud Logging में लॉग एंट्री लिखने की अनुमति मिलती है. | |
इन अनुमतियों वाली पहले से तय की गई भूमिकाओं का इस्तेमाल किया जा सकता है.
|
|
|
|
|
|
|
|
फिर से इस्तेमाल की जा सकने वाली प्रॉपर्टी सेट अप करना
इस लैब में कुछ वैल्यू की ज़रूरत बार-बार पड़ेगी. इसे आसान बनाने के लिए, हम इन वैल्यू को शेल वैरिएबल पर सेट करेंगे, ताकि बाद में इनका इस्तेमाल किया जा सके.
- GCP_REGION - वह खास क्षेत्र जहां GCP संसाधन मौजूद होंगे. इन क्षेत्रों की सूची यहां देखी जा सकती है.
- GCP_PROJECT - इस्तेमाल किया जाने वाला GCP प्रोजेक्ट आईडी.
- GCP_BUCKET_NAME - बनाया जाने वाला GCS बकेट का नाम. साथ ही, वह जगह जहां डेटा फ़ाइलें सेव की जाएंगी.
export GCP_REGION = <GCP REGION HERE>
export GCP_PROJECT= <GCP PROJECT HERE>
export GCS_BUCKET_NAME = <GCS BUCKET NAME HERE>
export SPANNER_INSTANCE = <SPANNER INSTANCE ID HERE>
export SPANNER_DB = <SPANNER DATABASE ID HERE>
Google Cloud प्रोजेक्ट
प्रोजेक्ट, Google Cloud में संगठन की बुनियादी इकाई होती है. अगर एडमिन ने आपको कोई कोड दिया है, तो इस चरण को छोड़ा जा सकता है.
सीएलआई का इस्तेमाल करके, इस तरह प्रोजेक्ट बनाया जा सकता है:
gcloud projects create $GCP_PROJECT
gcloud config set project $GCP_PROJECT
प्रोजेक्ट बनाने और मैनेज करने के बारे में ज़्यादा जानने के लिए, यहां जाएं.
Spanner सेट अप करना
Spanner का इस्तेमाल शुरू करने के लिए, आपको एक इंस्टेंस और एक डेटाबेस उपलब्ध कराना होगा. Spanner इंस्टेंस को कॉन्फ़िगर करने और बनाने के बारे में जानकारी यहां मिल सकती है.
इंस्टेंस बनाना
gcloud spanner instances create $SPANNER_INSTANCE \
--config=regional-$GCP_REGION \
--description="Codelabs Snowflake RETL" \
--processing-units=100 \
--edition=ENTERPRISE
डेटाबेस बनाना
gcloud spanner databases create $SPANNER_DB \
--instance=$SPANNER_INSTANCE
3. Google Cloud Storage बकेट बनाना
Snowflake से जनरेट की गई Parquet डेटा फ़ाइलों और Iceberg मेटाडेटा को सेव करने के लिए, Google Cloud Storage (GCS) का इस्तेमाल किया जाएगा. इसके लिए, फ़ाइल डेस्टिनेशन के तौर पर इस्तेमाल करने के लिए, पहले एक नया बकेट बनाना होगा. लोकल मशीन पर मौजूद Terminal विंडो में, यह तरीका अपनाएं.
बकेट बनाना
किसी खास क्षेत्र (जैसे, us-central1) में स्टोरेज बकेट बनाने के लिए, यहां दिए गए निर्देश का इस्तेमाल करें.
gcloud storage buckets create gs://$GCS_BUCKET_NAME --location=$GCP_REGION
बकेट बनाने की पुष्टि करना
जब यह निर्देश काम कर जाए, तो सभी बकेट की सूची बनाकर नतीजे देखें. नई बकेट, नतीजों की सूची में दिखनी चाहिए. बकेट रेफ़रंस आम तौर पर, बकेट के नाम के आगे gs:// प्रीफ़िक्स के साथ दिखते हैं.
gcloud storage ls | grep gs://$GCS_BUCKET_NAME
फ़ाइल या एंट्री में बदलाव करने की अनुमतियों की जांच करना
इस चरण से यह पक्का किया जाता है कि लोकल एनवायरमेंट की पुष्टि सही तरीके से हो गई हो और उसके पास नई बकेट में फ़ाइलें लिखने की ज़रूरी अनुमतियां हों.
echo "Hello, GCS" | gcloud storage cp - gs://$GCS_BUCKET_NAME/hello.txt
अपलोड की गई फ़ाइल की पुष्टि करना
बकेट में मौजूद ऑब्जेक्ट की सूची बनाएं. अभी अपलोड की गई फ़ाइल का पूरा पाथ दिखना चाहिए.
gcloud storage ls gs://$GCS_BUCKET_NAME
आपको यह आउटपुट दिखेगा:
gs://$GCS_BUCKET_NAME/hello.txt
किसी बकेट में मौजूद ऑब्जेक्ट का कॉन्टेंट देखने के लिए, gcloud storage cat का इस्तेमाल किया जा सकता है.
gcloud storage cat gs://$GCS_BUCKET_NAME/hello.txt
फ़ाइल का कॉन्टेंट दिखना चाहिए:
Hello, GCS
टेस्ट फ़ाइल मिटाना
Cloud Storage बकेट अब सेट अप हो गया है. अब अस्थायी टेस्ट फ़ाइल को मिटाया जा सकता है.
gcloud storage rm gs://$GCS_BUCKET_NAME/hello.txt
जवाब में, मिटाए जाने की पुष्टि होनी चाहिए:
Removing gs://$GCS_BUCKET_NAME/hello.txt... / [1 objects] Operation completed over 1 objects.
4. Snowflake से GCS में एक्सपोर्ट करना
इस लैब के लिए, TPC-H डेटासेट का इस्तेमाल किया जाएगा. यह फ़ैसले लेने में मदद करने वाले सिस्टम के लिए, इंडस्ट्री स्टैंडर्ड बेंचमार्क है. इसका स्कीमा, ग्राहकों, ऑर्डर, सप्लायर, और पार्ट्स के साथ-साथ कारोबार के असल माहौल को मॉडल करता है. इसलिए, यह असल दुनिया के आंकड़ों और डेटा मूवमेंट के उदाहरण को दिखाने के लिए सबसे सही है. यह डेटासेट, सभी Snowflake खातों में डिफ़ॉल्ट रूप से उपलब्ध होता है.
आपको रॉ और सामान्य की गई टीपीसी-एच टेबल का इस्तेमाल करने के बजाय, एग्रीगेट की गई नई टेबल बनानी होगी. यह नई टेबल, orders, customer, और nation टेबल से डेटा को एक साथ जोड़ देगी. इससे, देश के हिसाब से कुल बिक्री का डीनॉर्मलाइज़ किया गया खास जानकारी वाला व्यू तैयार होगा. प्री-एग्रीगेशन, आंकड़ों के विश्लेषण में आम तौर पर इस्तेमाल किया जाता है. इससे डेटा को किसी खास इस्तेमाल के लिए तैयार किया जाता है. इस उदाहरण में, डेटा को ऑपरेशनल ऐप्लिकेशन के इस्तेमाल के लिए तैयार किया जाता है.
Snowflake को Google Cloud Storage का ऐक्सेस देना
Snowflake को GCS बकेट में डेटा लिखने की अनुमति देने के लिए, दो चीज़ें बनानी होंगी: एक External Volume और ज़रूरी अनुमतियां.
- External Volume, Snowflake ऑब्जेक्ट होता है. यह GCS बकेट में किसी खास जगह के लिए सुरक्षित लिंक उपलब्ध कराता है. यह खुद डेटा सेव नहीं करता है. हालांकि, इसमें Snowflake को क्लाउड स्टोरेज ऐक्सेस करने के लिए ज़रूरी कॉन्फ़िगरेशन होता है.
- सुरक्षा के लिए, Cloud Storage बकेट डिफ़ॉल्ट रूप से निजी होते हैं. External Volume बनाने पर, Snowflake एक खास Service Account जनरेट करता है. इस सेवा खाते को बकेट से पढ़ने और उसमें बदलाव करने की अनुमतियां दी जानी चाहिए.
डेटाबेस बनाना
- बाईं ओर मौजूद मेन्यू में, Horizon Catalog में जाकर, Catalog पर कर्सर घुमाएं. इसके बाद, Database Explorer पर क्लिक करें
- डेटाबेस पेज पर जाकर, सबसे ऊपर दाईं ओर मौजूद + डेटाबेस बटन पर क्लिक करें.
- नई db
codelabs_retl_dbको नाम दें
वर्कशीट बनाना
डेटाबेस के ख़िलाफ़ SQL कमांड चलाने के लिए, वर्कशीट की ज़रूरत होगी.
वर्कशीट बनाने के लिए:
- बाईं ओर मौजूद मेन्यू में, डेटा के साथ काम करें में जाकर, प्रोजेक्ट पर कर्सर घुमाएं. इसके बाद, वर्कस्पेस पर क्लिक करें
- मेरे फ़ाइल फ़ोल्डर साइड बार में, + नया जोड़ें बटन पर क्लिक करें और एसक्यूएल फ़ाइल चुनें
कोई बाहरी वॉल्यूम बनाना
वॉल्यूम बनाने के लिए, Snowflake की वर्कशीट में यह कमांड चलाएं.
CREATE EXTERNAL VOLUME codelabs_retl_ext_vol
STORAGE_LOCATIONS =
(
(
NAME = 'codelabs_retl_ext_vol'
STORAGE_PROVIDER = 'GCS'
STORAGE_BASE_URL = 'gcs://<Your bucket name>/snowflake_extvol'
)
);
Snowflake सेवा खाता पाना
DESC (describe) नए बनाए गए बाहरी वॉल्यूम के बारे में बताएं, ताकि आपको वह यूनीक सेवा खाता मिल सके जो Snowflake ने इसके लिए जनरेट किया है.
DESC EXTERNAL VOLUME codelabs_retl_ext_vol;
- नतीजे वाले पैनल में, json प्रॉपर्टी ढूंढें. इसके बाद,
property_valueएंट्री ढूंढें, जिसमें"NAME":"codelabs_retl_ext_vol"से शुरू होने वाली JSON स्ट्रिंग मौजूद हो - json ऑब्जेक्ट में मौजूद
STORAGE_GCP_SERVICE_ACCOUNTप्रॉपर्टी ढूंढें और उसकी वैल्यू कॉपी करें. यह वैल्यू, ईमेल पते की तरह दिखेगी. यह सेवा खाते का आइडेंटिफ़ायर है. इसे GCS बकेट का ऐक्सेस चाहिए. - इस सेवा खाते को अपने शेल इंस्टेंस में किसी एनवायरमेंट वैरिएबल में सेव करें, ताकि बाद में इसका फिर से इस्तेमाल किया जा सके
export GCP_SERVICE_ACCOUNT=<Your service account>
Snowflake को GCS की अनुमतियां देना
अब Snowflake सेवा खाते को GCS बकेट में लिखने की अनुमति दी जानी चाहिए.
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.objectAdmin"
gcloud storage buckets add-iam-policy-binding gs://$GCS_BUCKET_NAME \
--member="serviceAccount:$GCP_SERVICE_ACCOUNT" \
--role="roles/storage.legacyBucketReader"
Snowflake में ऐक्सेस की पुष्टि करना
Snowflake की वर्कशीट में वापस जाकर, यह कमांड चलाएं. इससे पुष्टि होगी कि Snowflake अब GCS बकेट से कनेक्ट हो सकता है.
SELECT SYSTEM$VERIFY_EXTERNAL_VOLUME('codelabs_retl_ext_vol');
नतीजा, "success":true वाला JSON ऑब्जेक्ट होना चाहिए.
Snowflake में बाहरी वॉल्यूम के बारे में ज़्यादा जानने के लिए, आधिकारिक दस्तावेज़ पढ़ें.
सैंपल ऑर्डर का डेटा एक्सपोर्ट करना
अब Snowflake में आइसबर्ग टेबल बनाई जा सकती है. यहां दिए गए निर्देश से Snowflake को क्वेरी चलाने और Iceberg फ़ॉर्मैट का इस्तेमाल करके, नतीजों को GCS में सेव करने के लिए कहा गया है. डेटा फ़ाइलें Parquet फ़ॉर्मैट में होंगी. साथ ही, मेटाडेटा Avro और JSON फ़ॉर्मैट में होगा. यह सब codelabs_retl_ext_vol के बाहरी वॉल्यूम में तय की गई जगह पर सेव होगा.
डेटाबेस बनाना
- बाईं ओर मौजूद मेन्यू में, Horizon Catalog में जाकर, Catalog पर कर्सर घुमाएं. इसके बाद, Database Explorer पर क्लिक करें
- डेटाबेस पेज पर जाकर, सबसे ऊपर दाईं ओर मौजूद + डेटाबेस बटन पर क्लिक करें.
- नई db
codelabs_retl_dbको नाम दें
USE DATABASE codelabs_retl_db;
CREATE ICEBERG TABLE REGIONAL_SALES_ICEBERG (
NATION_NAME STRING,
MARKET_SEGMENT STRING,
ORDER_YEAR INTEGER,
ORDER_PRIORITY STRING,
TOTAL_ORDER_COUNT INTEGER,
TOTAL_REVENUE NUMBER(24,2),
UNIQUE_CUSTOMER_COUNT INTEGER
)
EXTERNAL_VOLUME = 'codelabs_retl_ext_vol'
CATALOG = 'SNOWFLAKE'
BASE_LOCATION = 'regional_sales_iceberg'
AS (
SELECT
n.n_name AS nation_name,
c.c_mktsegment AS market_segment,
YEAR(o.o_orderdate) AS order_year,
o.o_orderpriority AS order_priority,
COUNT(o.o_orderkey) AS total_order_count,
ROUND(SUM(o.o_totalprice), 2) AS total_revenue,
COUNT(DISTINCT c.c_custkey) AS unique_customer_count
FROM SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.orders AS o
INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.customer AS c
ON o.o_custkey = c.c_custkey
INNER JOIN SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.nation AS n
ON c.c_nationkey = n.n_nationkey
GROUP BY
n.n_name,
c.c_mktsegment,
YEAR(o.o_orderdate),
o.o_orderpriority
);
Snowflake का इस्तेमाल करके Iceberg टेबल बनाने और मैनेज करने के बारे में ज़्यादा जानने के लिए, आधिकारिक दस्तावेज़ पढ़ें.
GCP में डेटा की पुष्टि करना
अब GCS बकेट देखें. Snowflake की बनाई गई फ़ाइलें दिखनी चाहिए. इससे पुष्टि होती है कि एक्सपोर्ट हो गया है. आइसबर्ग मेटाडेटा, metadata फ़ोल्डर में और असल डेटा, data फ़ोल्डर में Parquet फ़ाइलों के तौर पर मिलेगा.
gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**"
फ़ाइल के नाम अलग-अलग हो सकते हैं, लेकिन फ़ाइल का स्ट्रक्चर ऐसा होना चाहिए:
gs://$GCS_BUCKET_NAME/snowflake_extvol/ gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/data/snow_cbsKIRmdDmo_wLg128fugxg_0_2_009.parquet ... gs://$GCS_BUCKET_NAME/snowflake_extvol/regional_sales_iceberg.snvrAWuR/metadata/00001-62f831ff-6708-4494-94c5-c891b7ad447f.metadata.json ...
अब डेटा को Snowflake से कॉपी करके, Google Cloud Storage में Iceberg फ़ॉर्मैट में सेव कर दिया गया है.
हमारे पास यह सूची है. इसलिए, metadata.json फ़ाइल को एनवायरमेंट वैरिएबल में सेव करें, क्योंकि हमें इसकी बाद में ज़रूरत होगी.
export GCS_METADATA_JSON=$(gcloud storage ls "gs://$GCS_BUCKET_NAME/snowflake_extvol/**" | grep .metadata.json)
5. BigQuery की बाहरी टेबल को कॉन्फ़िगर करना
Iceberg टेबल अब Google Cloud Storage में है. अगला चरण, इसे BigQuery के लिए ऐक्सेस किया जा सकने वाला बनाना है. इसके लिए, BigLake की बाहरी टेबल बनाई जा सकती है.
BigLake एक स्टोरेज इंजन है. इसकी मदद से, BigQuery में ऐसी टेबल बनाई जा सकती हैं जो Google Cloud Storage जैसे बाहरी सोर्स से सीधे डेटा पढ़ती हैं. इस लैब के लिए, यह मुख्य टेक्नोलॉजी है. इसकी मदद से BigQuery, अभी-अभी एक्सपोर्ट की गई Iceberg टेबल को समझ पाता है. इसके लिए, उसे डेटा को इनजेस्ट करने की ज़रूरत नहीं पड़ती.
इसके लिए, दो कॉम्पोनेंट की ज़रूरत होती है:
- क्लाउड रिसोर्स कनेक्शन: यह BigQuery और GCS के बीच एक सुरक्षित लिंक होता है. यह पुष्टि करने के लिए, एक खास सेवा खाते का इस्तेमाल करता है. इससे यह पक्का किया जाता है कि BigQuery के पास, GCS बकेट से फ़ाइलें पढ़ने के लिए ज़रूरी अनुमतियां हों.
- बाहरी टेबल की परिभाषा: इससे BigQuery को यह पता चलता है कि GCS में Iceberg टेबल की मेटाडेटा फ़ाइल कहां है और इसे कैसे समझा जाना चाहिए.
Google Cloud Storage से कनेक्शन कॉन्फ़िगर करना
सबसे पहले, ऐसा कनेक्शन बनाया जाएगा जिसकी मदद से BigQuery, GCS को ऐक्सेस कर पाएगा. इस कमांड से, BigQuery में कनेक्शन रिसॉर्स बनता है.
bq mk \
--connection \
--project_id=$GCP_PROJECT \
--location=$GCP_REGION \
--connection_type=CLOUD_RESOURCE \
codelabs-retl-connection
सफलता की कहानी कुछ ऐसी दिखेगी:
Connection 12345678.region.codelabs-retl-connection successfully created
BigQuery में Cloud Resource कनेक्शन के बारे में ज़्यादा जानकारी, Google Cloud के दस्तावेज़ में उपलब्ध है.
BigQuery कनेक्शन को डेटा पढ़ने की अनुमति देना
नए BigQuery कनेक्शन का अपना सेवा खाता होता है. इसे Google Cloud Storage बकेट से डेटा पढ़ने की अनुमति चाहिए.
1. कनेक्शन सेवा खाता पाना
सबसे पहले, अभी बनाए गए कनेक्शन से सेवा खाते का आईडी पाएं:
bq show \
--location $GCP_REGION \
--connection codelabs-retl-connection
नतीजों में, मिलते-जुलते कनेक्शन की टेबल दिखेगी.
आइए, serviceAccountId को एनवायरमेंट वैरिएबल पर सेट करें, ताकि बाद में इसका इस्तेमाल किया जा सके.
export GCP_BQ_SERVICE_ACCOUNT=<Your service account email>
2. अनुमतियां दें
नीचे दी गई कमांड चलाकर, सेवा खाते को GCS बकेट में डेटा देखने की अनुमति दें.
gcloud storage buckets add-iam-policy-binding \
gs://$GCS_BUCKET_NAME \
--member serviceAccount:$GCP_BQ_SERVICE_ACCOUNT \
--role roles/storage.objectViewer
बाहरी टेबल बनाना
अब BigQuery में BigLake की बाहरी टेबल बनाएं. इस कमांड से कोई भी डेटा ट्रांसफ़र नहीं होता है. यह सिर्फ़ GCS में मौजूद डेटा का पॉइंटर बनाता है. Snowflake की बनाई गई .metadata.json फ़ाइलों में से किसी एक का पाथ ज़रूरी होगा.
bq mk --dataset --location=$GCP_REGION codelabs_retl
bq mk \
--table \
--location=$GCP_REGION \
--external_table_definition=ICEBERG=$GCS_METADATA_JSON@projects/$GCP_PROJECT/locations/$GCP_REGION/connections/codelabs-retl-connection \
codelabs_retl.regional_sales
BigQuery में डेटा की पुष्टि करना
अब इस टेबल को स्टैंडर्ड एसक्यूएल का इस्तेमाल करके क्वेरी किया जा सकता है. ठीक वैसे ही जैसे किसी अन्य BigQuery टेबल को क्वेरी किया जाता है. BigQuery, GCS से Parquet फ़ाइलों को तुरंत पढ़ने के लिए इस कनेक्शन का इस्तेमाल करेगा.
bq query \
--location=$GCP_REGION \
--nouse_legacy_sql "SELECT * FROM \`$GCP_PROJECT.codelabs_retl.regional_sales\` LIMIT 10;"
6. BigQuery से Spanner में डेटा इंपोर्ट करना: आखिरी चरण
पाइपलाइन के आखिरी और सबसे अहम हिस्से पर पहुंच गए हैं: BigLake टेबल से डेटा को Spanner में ले जाना. यह "रिवर्स ईटीएल" चरण है. इसमें डेटा वेयरहाउस में प्रोसेस और व्यवस्थित किए गए डेटा को, ऐप्लिकेशन के इस्तेमाल के लिए ऑपरेशनल सिस्टम में लोड किया जाता है.
Spanner, पूरी तरह से मैनेज किया जाने वाला, दुनिया भर में उपलब्ध रिलेशनल डेटाबेस है. यह पारंपरिक रिलेशनल डेटाबेस की तरह ही लेन-देन में एकरूपता बनाए रखता है. हालांकि, इसमें NoSQL डेटाबेस की तरह हॉरिज़ॉन्टल स्केलेबिलिटी होती है. इसलिए, यह बड़े पैमाने पर उपलब्ध ऐप्लिकेशन बनाने के लिए सबसे सही विकल्प है.
यह प्रोसेस इस तरह होगी:
- Spanner डेटाबेस में, डेटा के स्ट्रक्चर से मेल खाने वाला टेबल स्कीमा बनाएं.
- BigQuery
EXPORT DATAक्वेरी चलाकर, BigLake टेबल से डेटा को सीधे Spanner टेबल में लोड करें.
Spanner टेबल बनाना
BigQuery से डेटा ट्रांसफ़र करने से पहले, Spanner में एक डेस्टिनेशन टेबल बनानी होगी. इसका स्कीमा, BigQuery के स्कीमा के साथ काम करने वाला होना चाहिए.
gcloud spanner databases ddl update $SPANNER_DB \
--instance=$SPANNER_INSTANCE \
--ddl="$(cat <<EOF
CREATE TABLE regional_sales (
nation_name STRING(MAX),
market_segment STRING(MAX),
order_year INT64,
order_priority STRING(MAX),
total_order_count INT64,
total_revenue NUMERIC,
unique_customer_count INT64
) PRIMARY KEY (nation_name, market_segment, order_year, order_priority);
EOF
)"
BigQuery से डेटा एक्सपोर्ट करना
यह आखिरी चरण है. BigQuery BigLake टेबल में सोर्स डेटा तैयार होने और Spanner में डेस्टिनेशन टेबल बनने के बाद, डेटा ट्रांसफ़र करना बहुत आसान हो जाता है. एक ही BigQuery एसक्यूएल क्वेरी का इस्तेमाल किया जाएगा: EXPORT DATA.
इस क्वेरी को खास तौर पर इस तरह के मामलों के लिए डिज़ाइन किया गया है. यह BigQuery टेबल (इसमें BigLake टेबल जैसी बाहरी टेबल भी शामिल हैं) से डेटा को किसी बाहरी डेस्टिनेशन में आसानी से एक्सपोर्ट करता है. इस मामले में, डेस्टिनेशन Spanner टेबल है.
bq query --location=$GCP_REGION --use_legacy_sql=false <<EOF
EXPORT DATA OPTIONS (
uri="https://spanner.googleapis.com/projects/${GCP_PROJECT}/instances/${SPANNER_INSTANCE}/databases/${SPANNER_DB}",
format='CLOUD_SPANNER',
spanner_options="""{
"table": "regional_sales",
"priority": "HIGH"
}"""
) AS
SELECT * FROM \`${PROJECT_ID}.codelabs_retl.regional_sales\`
EOF
क्वेरी पूरी होने के बाद, नतीजे वाले पैनल में "अपडेट पूरा हो गया" लिखा होना चाहिए.
7. Spanner में डेटा की पुष्टि करना
बधाई हो! आपने रिवर्स ईटीएल पाइपलाइन को पूरी तरह से बना लिया है और उसे लागू कर दिया है. आखिरी चरण में, यह पुष्टि करना होता है कि डेटा, Spanner में उम्मीद के मुताबिक पहुंच गया है.
gcloud spanner databases execute-sql \
--instance=$SPANNER_INSTANCE \
$SPANNER_DB \
--sql='SELECT * FROM regional_sales LIMIT 10'
इंपोर्ट किया गया सैंपल डेटा, अनुरोध के मुताबिक दिखता है:
nation_name market_segment order_year order_priority total_order_count total_revenue unique_customer_count ALGERIA AUTOMOBILE 1992 1-URGENT 375 59232423.66 298 ALGERIA AUTOMOBILE 1992 2-HIGH 328 47371891.08 269 ALGERIA AUTOMOBILE 1992 3-MEDIUM 346 52823195.87 262 ALGERIA AUTOMOBILE 1992 4-NOT SPECIFIED 365 52935998.34 288 ALGERIA AUTOMOBILE 1992 5-LOW 380 54920263.68 293 ALGERIA AUTOMOBILE 1993 1-URGENT 394 63145618.78 312 ALGERIA AUTOMOBILE 1993 2-HIGH 340 50737488.4 277 ALGERIA AUTOMOBILE 1993 3-MEDIUM 383 55871057.46 298 ALGERIA AUTOMOBILE 1993 4-NOT SPECIFIED 365 56424662.05 291 ALGERIA AUTOMOBILE 1993 5-LOW 363 54673249.06 283
ऐनलिटिकल और ऑपरेशनल डेटा के बीच के अंतर को कम किया गया है.
8. मिटाना
Spanner को क्लीन अप करना
Spanner डेटाबेस और इंस्टेंस मिटाना
gcloud spanner instances delete $SPANNER_INSTANCE
GCS (जीसीएस) का स्टोरेज खाली करना
डेटा को होस्ट करने के लिए बनाया गया GCS बकेट मिटाएं
gcloud storage rm --recursive gs://$GCS_BUCKET_NAME
BigQuery को क्लीन अप करना
bq rm -r codelabs_retl
bq rm --connection --location=$GCP_REGION codelabs-retl-connection
Snowflake को क्लीन अप करना
डेटाबेस को छोड़ें
- बाईं ओर मौजूद मेन्यू में, Horizon कैटलॉग में जाकर, कैटलॉग पर कर्सर घुमाएं. इसके बाद,डेटाबेस एक्सप्लोरर पर क्लिक करें
- विकल्पों को बड़ा करने के लिए,
CODELABS_RETL_DBडेटाबेस के दाईं ओर मौजूद ... पर क्लिक करें. इसके बाद, ड्रॉप करें को चुनें - पुष्टि करने वाले पॉप-अप डायलॉग बॉक्स में, डेटाबेस हटाएं को चुनें
वर्कबुक मिटाना
- बाईं ओर मौजूद मेन्यू में, डेटा के साथ काम करें में जाकर, प्रोजेक्ट पर कर्सर घुमाएं. इसके बाद, वर्कस्पेस पर क्लिक करें
- मेरा फ़ाइल फ़ोल्डर साइड बार में, इस लैब के लिए इस्तेमाल की गई अलग-अलग फ़ाइल फ़ोल्डर पर कर्सर घुमाएं. इससे ... अतिरिक्त विकल्प दिखेंगे. इन पर क्लिक करें
- मिटाएं को चुनें. इसके बाद, पुष्टि करने वाले डायलॉग में फिर से मिटाएं को चुनें.
- इस लैब के लिए बनाई गई सभी SQL वर्कस्पेस फ़ाइलों के लिए, यह तरीका अपनाएं.
बाहरी वॉल्यूम मिटाना
- बाईं ओर मौजूद मेन्यू में, Horizon Catalog में जाकर, Catalog पर कर्सर घुमाएं. इसके बाद, External Data पर क्लिक करें
CODELABS_RETL_EXT_VOLके दाईं ओर मौजूद
पर क्लिक करें. इसके बाद, बाहरी वॉल्यूम छोड़ें को चुनें. इसके बाद, पुष्टि करने वाले डायलॉग बॉक्स में बाहरी वॉल्यूम छोड़ें पर फिर से क्लिक करें
9. बधाई हो
कोडलैब पूरा करने के लिए बधाई.
हमने क्या-क्या कवर किया है
- Snowflake में डेटा लोड करने का तरीका
- GCS बकेट बनाने का तरीका
- Snowflake टेबल को CSV फ़ॉर्मैट में GCS में एक्सपोर्ट करने का तरीका
- स्पैनर इंस्टेंस सेट अप करने का तरीका
- Dataflow की मदद से, CSV टेबल को Spanner में लोड करने का तरीका