मुझे हाइव से बीलाइन के माध्यम से डेटा डाउनलोड करते समय समस्या हो रही है।

मैं फ़ील्ड डिलीमीटर के रूप में सीएसवी के साथ फ़ाइल में एक टेबल डाउनलोड करना चाहता हूं। यदि स्तंभ मान में अल्पविराम है, तो उस मान को उद्धरण द्वारा संलग्न करने की आवश्यकता है।

मुझे पता है कि इस उपयोग के मामले के लिए बीलाइन आउटपुटफॉर्मैट सीएसवी 2 प्रदान करती है।

लेकिन मुझे अपेक्षित परिणाम नहीं मिल रहे हैं।

मैंने इस उद्देश्य के लिए डेटा के साथ नमूना तालिका बनाई है।

    0: jdbc:hive2://ip:10000/default> DESC samp_ret;
+-------------+------------+----------+--+
|  col_name   | data_type  | comment  |
+-------------+------------+----------+--+
| intvar      | int        |          |
| stringvar1  | string     |          |
| stringvar2  | string     |          |
+-------------+------------+----------+--+
3 rows selected (0.081 seconds)
0: jdbc:hive2://ip:10000/default>  SELECT * FROM samp_ret ;
+------------------+----------------------+----------------------+--+
| samp_ret.intvar  | samp_ret.stringvar1  | samp_ret.stringvar2  |
+------------------+----------------------+----------------------+--+
| 1                | one,ONE              | One                  |
| 2                | 2                    | Two                  |
| 3                |                      | Three                |
| 4                | four,FOUR            |                      |
| 5                | five'FIVE            | Five                 |
| 6                | six',SIX             | Six                  |
+------------------+----------------------+----------------------+--+
6 rows selected (0.164 seconds)

मैं इस डेटा को ऐप सर्वर में डाउनलोड करने का प्रयास कर रहा हूं, लेकिन किसी कारण से, मुझे उद्धरण में संलग्न कॉमा वाले रिकॉर्ड नहीं दिख रहे हैं।

बीलाइन कमांड का उपयोग किया जाता है,

beeline -u jdbc:hive2://ip:10000/default?zeroDateTimeBehavior=round -n yumecorp yumehive org.apache.hive.jdbc.HiveDriver --showHeader=false --outputformat=csv2 --silent -e "SELECT * FROM dev.samp_ret " > /tmp/samp_ret.out

आउटपुट है,

enter image description here

जैसा कि आप आउटपुट में देख सकते हैं, यदि कॉलम मान में अल्पविराम है, तो यह ^@ के रूप में प्रदर्शित होता है

अगर मुझे यहां कुछ याद आ रहा है तो मुझे बताएं।

3
Makubex 30 सितंबर 2018, 16:14

1 उत्तर

सबसे बढ़िया उत्तर

अपने बीलाइन कमांड को निष्पादित करने से पहले शेल में नीचे दी गई संपत्ति को निर्यात करें

bash$ export HADOOP_CLIENT_OPTS="-Ddisable.quoting.for.sv=false"

फिर बीलाइन एक्सपोर्ट कमांड निष्पादित करें

beeline -u jdbc:hive2://ip:10000/default?zeroDateTimeBehavior=round -n yumecorp yumehive org.apache.hive.jdbc.HiveDriver --showHeader=false --outputformat=csv2 --silent -e "SELECT * FROM dev.samp_ret " > /tmp/samp_ret.out

उदाहरण:

मेरे पास टेबल में 2 स्ट्रिंग कॉलम हैं

hive> select * from i;
+-------+---------+--+
| i.id  | i.name  |
+-------+---------+--+
| 1     | kl,kl   |
| 2     | ll,mm   |
+-------+---------+--+

अब नाम स्तंभ मान . के लिए संलग्न "" वाली csv फ़ाइल में निर्यात किया जा रहा है

bash$ export HADOOP_CLIENT_OPTS="-Ddisable.quoting.for.sv=false"
bash$ beeline --showHeader=false --outputformat=csv2 --silent -e "SELECT * FROM default.i" > samp_ret.out
bash$ cat samp_ret.out 
1,"kl,kl"
2,"ll,mm"

अधिक जानकारी के लिए इसे hive Jira देखें।

3
notNull 30 सितंबर 2018, 17:26