2

我正在尝试从直线获取带引号的 csv 输出。我的查询看起来像:

beeline -u 'jdbc:hive2://localhost:10000/' --outputformat=csv2 -e 'set system:disable.quoting.for.sv=false; select 1 as a, 2 as b'

我期望作为输出

"a","b"
"1","2"

但只能得到未引用的版本。

根据文档

可以通过将 disable.quoting.for.sv 系统变量设置为 true 来禁用引用。

我想我在这里做错了什么。如何将此变量设置为 false?在我的查询中使用它似乎并不能解决问题,在 hive-site.xml 上也没有。

注意:hive 1.2.1 在 hdp 2.5 上。

4

3 回答 3

2

你可以试试:

beeline --disableQuotingForSV=true --verbose=true -u 'jdbc:hive2://localhost:10000/' --outputformat=csv2  -e 'select 1 as a, 2 as b'
于 2017-03-07T10:55:10.513 回答
2

仅当字段包含分隔符或换行符时,引用 csv 中的字段才是必要/有用的。

因此,如果您尝试编写1 2,3,则应引用最后一个值:1,"2,3"

引用一个字段并不意味着它应该被视为一个字符串。The"2,3"仍然是一个数字(如果,在这种情况下是小数分隔符)。

一些 csv 编写器在每个字段周围添加引号,这是完全没有必要的,只会使文件变大而没有任何好处。

文档似乎也很清楚这一点:

如果未禁用引用,则如果值包含特殊字符(例如分隔符或双引号字符)或跨越多行,则会在值周围添加双引号。

嵌入的双引号用前面的双引号转义。

于 2017-03-07T14:32:55.773 回答
0

这将起作用: env HADOOP_CLIENT_OPTS="-Ddisable.quoting.for.sv=false" beeline -u 'jdbc:hive2://localhost:10000/' --outputformat=csv2 -e 'select 1 as a, 2 as b '

于 2019-11-27T05:20:53.063 回答