अपाचे HBase थ्रिफ्ट एपीआई का उपयोग करने के बारे में श्रृंखला में दूसरा तरीका
पिछली बार, हमने पायथन के माध्यम से थ्रिफ्ट से जुड़ने के बारे में बुनियादी बातों को कवर किया था। इस बार, आप सीखेंगे कि कैसे एक बार में कई पंक्तियाँ सम्मिलित करें और प्राप्त करें।
टेबल के साथ काम करना
थ्रिफ्ट इंटरफ़ेस का उपयोग करके, आप टेबल बना या हटा सकते हैं। आइए एक टेबल बनाने वाले पायथन कोड पर एक नज़र डालें:
client.createTable(tablename, [Hbase.ColumnDescriptor(name=cfname)])
इस स्निपेट में, आपने एक Hbase.ColumnDescriptor ऑब्जेक्ट बनाया है। इस ऑब्जेक्ट में, आप कॉलम फ़ैमिली के लिए सभी अलग-अलग पैरामीटर सेट कर सकते हैं। इस मामले में, आप केवल कॉलम परिवार का नाम सेट करते हैं।
आप पिछले कैसे-कैसे याद कर सकते हैं कि आपके प्रोजेक्ट में Hbase.thrift फ़ाइल जोड़ना अक्सर उपयोगी होता है। यह उन समयों में से एक है:आप Hbase.thrift खोल सकते हैं और इसके सभी मापदंडों और उनके नामों के साथ ColumnDescriptor परिभाषा ढूंढ सकते हैं।
आप निम्न कोड का उपयोग करके पुष्टि कर सकते हैं कि तालिका मौजूद है:
tables = client.getTableNames() found = False for table in tables: if table == tablename: found = True
यह कोड उपयोगकर्ता तालिकाओं की एक सूची प्राप्त करता है, उनके माध्यम से पुनरावृति करता है, और यदि तालिका पाई जाती है तो सही के रूप में अंक मिलते हैं।
आप निम्न कोड का उपयोग करके तालिका को हटा सकते हैं:
client.disableTable(tablename) client.deleteTable(tablename)
याद रखें कि HBase में, आपको किसी तालिका को हटाने से पहले उसे अक्षम करना होगा। यह कोड बस यही करता है।
किफ़ायती के साथ पंक्तियाँ जोड़ना
थ्रिफ्ट हमें पंक्तियों को जोड़ने या अपडेट करने के कुछ तरीके देता है: एक समय में एक पंक्ति, या एक समय में कई पंक्तियाँ। थ्रिफ्ट इंटरफ़ेस जावा एपीआई के समान पुट ऑब्जेक्ट का उपयोग नहीं करता है। इन परिवर्तनों को रो म्यूटेशन कहा जाता है और म्यूटेशन और बैचम्यूटेशन ऑब्जेक्ट्स का उपयोग करते हैं।
mutations = [Hbase.Mutation( column='columnfamily:columndescriptor', value='columnvalue')] client.mutateRow('tablename', 'rowkey', mutations)
प्रत्येक म्यूटेशन ऑब्जेक्ट एक कॉलम में परिवर्तन का प्रतिनिधित्व करता है। किसी अन्य कॉलम को जोड़ने या बदलने के लिए, आप केवल म्यूटेशन सूची में एक और म्यूटेशन ऑब्जेक्ट जोड़ेंगे।
जब आप म्यूटेशन ऑब्जेक्ट जोड़ना समाप्त कर लेते हैं, तो आप mutateRow विधि को कॉल करते हैं। यह विधि तालिका नाम, पंक्ति कुंजी और उत्परिवर्तन सूची को तर्क के रूप में लेती है।
एक बार में अनेक पंक्तियों को जोड़ने के लिए कुछ परिवर्तनों की आवश्यकता होती है:
# Create a list of mutations per work of Shakespeare mutationsbatch = [] for line in shakespeare: rowkey = username + "-" + filename + "-" + str(linenumber).zfill(6) mutations = [ Hbase.Mutation(column=messagecolumncf, value=line.strip()), Hbase.Mutation(column=linenumbercolumncf, value=encode(linenumber)), Hbase.Mutation(column=usernamecolumncf, value=username) ] mutationsbatch.append(Hbase.BatchMutation(row=rowkey,mutations=mutations)) # Run the mutations for the work of Shakespeare client.mutateRows(tablename, mutationsbatch)
इस उदाहरण में, आप अभी भी म्यूटेशन ऑब्जेक्ट का उपयोग कर रहे हैं, लेकिन इस बार आपको उन्हें बैचम्यूटेशन ऑब्जेक्ट में लपेटना होगा। बैचम्यूटेशन ऑब्जेक्ट आपको म्यूटेशन की प्रत्येक सूची के लिए एक अलग रोकी निर्दिष्ट करने की अनुमति देता है। आप mutateRows विधि में भी बदलते हैं। यह एक टेबल नाम और बैचम्यूटेशन ऑब्जेक्ट लेता है।
किफ़ायती से पंक्तियाँ प्राप्त करना
GetRow विधि का उपयोग करके, आप इसकी पंक्ति कुंजी के आधार पर एकल पंक्ति को पुनः प्राप्त कर सकते हैं। यह कॉल TRowResult ऑब्जेक्ट्स की एक सूची देता है। आउटपुट प्राप्त करने और उसके साथ काम करने के लिए कोड यहां दिया गया है:
पंक्तियों में पंक्ति के लिएrows = client.getRow(tablename, "shakespeare-comedies-000001") for row in rows: message = row.columns.get(messagecolumncf).value linenumber = decode(row.columns.get(linenumbercolumncf).value) rowKey = row.row
कोड को getRow अनुरोध के साथ प्रारंभ करें। यह गेट "शेक्सपियर-कॉमेडीज-000001" कुंजी के साथ पंक्ति लौटाएगा। ये पंक्तियाँ TRowResult की सूची के रूप में वापस आएंगी। एक पंक्ति लूप का उपयोग करके, आप उन पंक्तियों की सूची में जाते हैं जो वापस आ गई थीं।
कॉलम का मान प्राप्त करने के लिए, column.get(“COLUMNFAMILY:COLUMDESCRIPTOR”) का उपयोग करें। उचित नामकरण सिंटैक्स का उपयोग करना सुनिश्चित करें।
याद रखें कि पूर्णांक जैसे बाइनरी डेटा के साथ काम करते समय, आपको इसे पायथन स्ट्रिंग से किसी भी प्रकार में बदलने की आवश्यकता होगी। इस मामले में, आप स्ट्रिंग ले रहे हैं और इसे डिकोड विधि से पूर्णांक बना रहे हैं।
एक बार में कई पंक्तियाँ प्राप्त करना एक पंक्ति प्राप्त करने के समान है। यहाँ कोड है:
rowKeys = [ "shakespeare-comedies-000001", "shakespeare-comedies-000010", "shakespeare-comedies-000020", "shakespeare-comedies-000100", "shakespeare-comedies-000201" ] rows = client.getRows(tablename, rowKeys)
एक पंक्ति निर्दिष्ट करने के बजाय, आप पंक्तियों की सूची में पास हो जाते हैं। आप getRows की विधि भी बदलते हैं, जो तालिका के नाम और पंक्तियों की सूची को तर्क के रूप में लेता है।
TRowResult ऑब्जेक्ट्स की एक सूची लौटा दी जाती है और फिर आप सूची के माध्यम से एकल-पंक्ति कोड की तरह ही पुनरावृति करते हैं।
अगले और अंतिम हाउ-टू में, आप सीखेंगे कि स्कैन का उपयोग कैसे करें और विकास के लिए आरईएसटी और थ्रिफ्ट एपीआई के बीच चयन करते समय कुछ विचारों का परिचय प्राप्त करें।
जेसी एंडरसन क्लौडेरा विश्वविद्यालय के प्रशिक्षक हैं।