2016-07-13 9 views
5

मैं (आदर्श) शुद्ध JSON का उपयोग कर कैसंड्रा में एक पंक्ति को अपडेट करना चाहता हूं (उदाहरण के लिए, "INSERT INTO <table_name> JSON '<json_object_string>';" सीक्यूएल कथन के अनुरूप)। हालांकि, ऐसा नहीं लगता है कि ऐसी कार्यक्षमता CQL अद्यतन विवरण के माध्यम से मौजूद है।क्या सीक्यूएल (कैसंद्रा) के माध्यम से JSON अद्यतन करने का कोई शानदार तरीका है?

एक (मस्तिष्क मृत) दृष्टिकोण जिसे मैंने माना था उसे हटाना था और फिर प्रासंगिक पंक्ति को फिर से डालना था। हालांकि, उस दृष्टिकोण में निश्चित रूप से इसकी कमी है - इस प्रकार, इसे मेरे विचार सेट से हटा दिया गया है।

मैंने "UPDATE <table_name> SET <key1> = '<new_value1>', <key2> = '<new_value2>', ..., <keyN> = '<new_valueN>';" सीक्यूएल कथन का उपयोग करने वाले संस्करण को लागू किया। हालांकि, अगर "UPDATE <table_name> JSON '<new_json_object_string>';" जैसे कुछ थे, तो मैं वास्तव में इसके बारे में जानना चाहूंगा।

उत्तर

4

कैसंड्रा में, INSERT और UPDATE समान ऑपरेशन हैं। कैसंद्रा के जेसन समर्थन के लिए, UPDATE क्षमता नहीं है।

कोई आंशिक JSON अद्यतन समर्थन भी नहीं है, यानी कोई पंक्ति डालने के बाद, आप जेएसओएन का उपयोग करके अलग-अलग कॉलम अपडेट नहीं कर सकते क्योंकि जेसन पेलोड से निकले किसी भी कॉलम को नल (टॉम्बस्टोन) के रूप में डाला जाता है। हालांकि आप नियमित INSERT/UPDATE क्वेरी का उपयोग कर सकते हैं।

CASSANDRA-11424 इसे हल करने का प्रयास करता है।

+0

एंडी, मैंने अभी यह निर्धारित किया है कि मेरे परीक्षणों को विकसित करते समय आईएनएसईआरटी भी एक अद्यतन करता है। मेरे वर्तमान एप्लिकेशन के लिए, यह (INSERT एक अद्यतन करता है) व्यवहार कुछ समस्याग्रस्त हो सकता है यदि ऐसे मामले सामने आते हैं जब INSERT केवल INSERT होना चाहिए यदि कुंजी/मान जोड़ी मौजूद नहीं है। उस स्थिति में, ऐसा लगता है कि INSERT को अनुमति देने से पहले कुंजी/मान जोड़ी मौजूद है या नहीं, यह निर्धारित करने के लिए मुझे पढ़ने की आवश्यकता होगी। उह, उस मामले में ... –

+0

यदि आप किसी मौजूदा रिकॉर्ड को बदलने के बारे में चिंतित हैं तो आप 'INSERT INTO

JSON का उपयोग कर सकते हैं .... अगर EXISTS नहीं है;'। इसके लिए एक प्रदर्शन दंड होगा, लेकिन यह इसके लायक हो सकता है और लिखने से पहले पढ़ने से अधिक उचित है। –

+0

एंडी, मैंने इसका परीक्षण नहीं किया है, लेकिन मुझे विश्वास है कि "

JSON INSERT INSSTS;" बदल चुके फ़ील्ड अपडेट नहीं करेगा। आदर्श उन क्षेत्रों को अद्यतन करना होगा जो बदले गए हैं और केवल निर्दिष्ट फ़ील्ड्स को छोड़ दें। (मुझे लगता है कि "अद्यतन
एसईटी ...;" के साथ काम करने वाली कार्यक्षमता प्रतीत होती है। "हालांकि," अद्यतन
JSON ... "" समकक्ष "INSERT
JSON ...;"। –

0

कार्यक्षमता अब CQL 5.1 में उपलब्ध है। वाक्य रचना है:

INSERT INTO table_name JSON '{"column1": "value1", "column2": "value2"}' DEFAULT UNSET; 

DEFAULT UNSET विकल्प यह केवल JSON स्ट्रिंग में पाया मूल्यों के ऊपर लिख कर देता है। इसलिए, उदाहरण के लिए, यदि आपके पास रिकॉर्ड में डेटा के साथ अन्य कॉलम (उदा। कॉलम 3, कॉलम 4) थे, तो ऊपर दिए गए सम्मिलन कथन को चलाने पर वे कॉलम अपना मूल डेटा बनाए रखेंगे।

संबंधित मुद्दे

 संबंधित मुद्दे