我试图从beeline获得引用的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上。
注意:hdp 2.5上的hive 1.2.1。
答案 0 :(得分:2)
当字段包含分隔符或换行符时,csv中的引号字段才是必需/有用的。
因此,如果您尝试撰写1 2,3
,则应引用最后一个值:1,"2,3"
。
引用字段并不意味着它应该被视为字符串。 "2,3"
仍然是一个数字(如果,
在这种情况下是小数点分隔符。)
一些csv编写者在每个字段周围添加引号,这是完全没必要的,只会使文件变大而没有任何好处。
文档似乎也很清楚:
如果未禁用引用,则会在值if周围添加双引号 它包含特殊字符(例如分隔符或双引号) 字符)或跨越多行。
嵌入式双引号使用前面的双引号进行转义。
答案 1 :(得分:1)
您可以尝试:
beeline --disableQuotingForSV=true --verbose=true -u 'jdbc:hive2://localhost:10000/' --outputformat=csv2 -e 'select 1 as a, 2 as b'
答案 2 :(得分:0)
这将起作用: env HADOOP_CLIENT_OPTS =“-Ddisable.quoting.for.sv = false”直线-u'jdbc:hive2:// localhost:10000 /'--outputformat = csv2 -e'选择1作为a,选择2作为b'