我在通过beeline从 hive 下载数据时遇到问题。

我想将表格下载到以csv作为字段分隔符的文件中。如果列值带有逗号,则该值需要用引号引起来。

我知道beeline为此用例提供了outputformat csv2。

但是我没有得到预期的结果。

为此,我创建了带有数据的示例表。

    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

输出为

hadoop - 如何从csv2格式的beeline配置单元下载数据?-LMLPHP

如您在输出中所看到的,如果列值具有逗号,则其将显示为^ @

让我知道我是否在这里想念什么。

最佳答案

在执行beeline命令之前,在 shell 程序中导出下面的属性

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

然后执行beeline导出命令
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文件的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

关于hadoop - 如何从csv2格式的beeline配置单元下载数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52578207/

10-12 23:42