2012-01-12 14 views
7

जब HBase जावा एपीआई के साथ काम करने में संग्रहीत एक मूल्य के डेटा प्रकार पता करने के लिए कैसे, मैं के रूप में नीचे दिए गए कोड की एक पंक्ति है पता है कि यह इस मान के लिए एक इंट या स्ट्रिंग प्रकार है, जो मुझे Byte.toInt(value) और Byte.toString(value) के बीच सही ढंग से मुद्रित करने के लिए उपयोग करना चाहिए?जावा (HBase) एपीआई:</p> <pre><code>byte[] value = scanner.next().getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier)); </code></pre> <p>मैं नहीं मान लें: बाइट्स

यह वास्तव में एचबीएएस/हाडोप प्रश्न नहीं है, बल्कि जावा एक है, लेकिन मैं गुग हो गया हूं और इसे पाने का कोई तरीका नहीं ढूंढ सकता। क्या यह जानना संभव है?

एचबीएएस जावा एपीआई से दूसरी दिशा में, मैं परिवार में संग्रहीत किसी दिए गए मूल्य के लिए डेटा प्रकार कैसे जान सकता हूं: क्वालीफायर?

धन्यवाद!

उत्तर

3

अपने पहले प्रश्न के लिए आप int में कनवर्ट करने का प्रयास कर सकते हैं और यदि आपके पास अपवाद है, तो आप जानते हैं कि यह एक स्ट्रिंग है। लेकिन यह एक अच्छा तरीका नहीं है।

+4

+1 में एक उदाहरण देखें: नीचे की ओर है कि कुछ 32-बिट 'मूल्यों int' भी वैध तार कर रहे हैं। –

5

पारंपरिक आरडीबीएमएस के विपरीत, एचबीज़ "टाइप किए गए कॉलम" का समर्थन नहीं करता है, जहां डेटा स्टोर संग्रहीत डेटा के प्रकारों का ट्रैक रखता है। एचबीएएस मूल रूप से ट्रैक नहीं रखता है - इसलिए कॉलम में संग्रहीत डेटा के प्रकार को मूल रूप से बताने का कोई तरीका नहीं है। एचबीएएस का उपयोग करने वाला डेवलपर कॉलम डेटा प्रकारों का ट्रैक रखने के लिए ज़िम्मेदार है।

कई अनुप्रयोगों के लिए, एप्लिकेशन के लिए प्रत्येक कॉलम के प्रकार "हार्ड-कोड" के लिए स्वीकार्य है। इस तरह, एचबीएएस टेबल आरडीबीएमएस टेबल की तुलना में अधिक एप्लिकेशन-विशिष्ट होते हैं। एक डेवलपर पंक्ति के लिए डेटा प्रकार स्कीमा को समर्पित कॉलम परिवार या स्तंभ भी बना सकता है (उदाहरण के लिए, स्ट्रिंग के रूप में क्रमबद्ध एक एवरो स्कीमा)। मूल्यों स्टोर करते हुए

https://hbase.apache.org/book/architecture.html#arch.overview.when

0

उपयोग OrderedBytes:

HBase प्रलेखन के "वास्तुकला" पृष्ठों HBase और एक पारंपरिक RDBMS में थोड़ा और अधिक यहाँ के बीच मतभेदों को बताते हैं। जो सुनिश्चित करता है कि प्रत्येक प्रकार का डेटा कुछ संख्यात्मक मानों के साथ उपसर्ग किया गया हो। , देखें https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/util/OrderedBytes.html

byte[] value = scanner.next().getValue(Bytes.toBytes(family), Bytes.toBytes(qualifier)); 
int typeByte = value[0] 
if(typeByte == 52) 
    // do operation for String 
else if(typeByte == 43) 
    // do operation for Integer 
else if (typeByte == 45) 
    // do operation for Double 

नोट: मान, जबकि प्रति डेटाप्रकार के रूप में HBase के लिए डेटा लेखन 43,45 और 52 जोड़ दिए जाते हैं।

http://davidgreenshtein.blogspot.co.uk/2015/03/geo-spatial-search-in-hbase.html

+1

इस समस्या के जवाब के साथ कुछ स्पष्टीकरण जोड़ें कि इस समस्या को वर्तमान समस्या को ठीक करने में ओपी की मदद कैसे करें –

+0

इसे उत्तर में जोड़ें। –