2013-01-22 13 views
6

Here में डायनामिक कॉलम परिवारों को परिभाषित करने के लिए कहा जाता है कि गतिशील कॉलम परिवार प्राप्त करने के लिए कोई विशेष प्रयास करने की आवश्यकता नहीं है। लेकिन जब मैं एक अपरिभाषित कॉलम के लिए मान सेट करने का प्रयास करता हूं, तो मुझे हमेशा अपवाद मिलता है। BTWकैसंड्रा

CREATE TABLE places (
    latitude double, 
    longitude double, 
    name text, 
    tags text, 
    PRIMARY KEY (latitude, longitude, name) 
) 

:

मैं इस तरह एक स्तंभ परिवार बनाया मैं टैग स्तंभ को परिभाषित करने के लिए किया था। क्या कोई मुझे समझा सकता है क्यों? शायद क्योंकि सभी अन्य कॉलम इंडेक्स का हिस्सा हैं?

इस तरह अब सम्मिलित करते समय डेटा:

INSERT INTO places ("latitude","longitude","name","tags") VALUES (49.797888,9.934771,'Test','foo,bar') 

यह सिर्फ ठीक काम करता है! लेकिन जब मैं कोशिश:

INSERT INTO places ("latitude","longitude","name","tags","website") VALUES (49.797888,9.934771,'Test','foo,bar','test.de') 

मैं त्रुटि निम्न हो:

Bad Request: Unknown identifier website 
text could not be lexed at line 1, char 21 

कौन सा परिवर्तन की आवश्यकता नहीं तो मैं गतिशील रूप से कॉलम जोड़ सकते हैं?

मैं सीक्यूएल 3 के साथ सीएसएल 3 के साथ कैसंड्रा 1.1.9 का उपयोग कर सीधे सर्वर पर cqlsh के साथ उपयोग कर रहा हूं।

उत्तर

11

CQL3 गतिशील स्तंभ परिवार का समर्थन करता है, लेकिन आप तालिका स्कीमा पहले

ALTER TABLE places ADD website varchar; 

चेक बाहर 1.2 documentation और CQL in depth स्लाइड

+0

धन्यवाद! अब मैं व्यापक पंक्तियों के बारे में परिवर्तनों को समझ गया! लेकिन मुझे उन्हें पसंद नहीं है, लेकिन आपने मुझे बहुत मदद की। – Balo

+0

हाय उलझन में है, क्या फ्लाई पर कॉलम बनाने का कोई तरीका है? – Jisson

7

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

+0

बचत बहुत CQL के पक्ष में पदावनत किया गया है, सही को बदलने के लिए है? क्या वर्तमान में सबसे अच्छा अभ्यास है, फिर, प्रत्येक सम्मिलन से पहले बहुत सारे वैकल्पिक तालिका विवरणों को चलाने के लिए? – Mark

+0

ऐसा करने का सबसे आसान तरीका 'मानचित्र' डेटा प्रकार के माध्यम से है, जो वास्तव में हुड के नीचे गतिशील कॉलम नाम बनाता है। –

+0

यहां एफक्यूएल में गतिशील कॉलम को suporting के बारे में एक अच्छा लेख है: http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows –

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