问题描述:beeline -u 方式导出数据,结果文件中含有“|”(竖杠)。

  执行的sql为:beeline -u jdbc:hive2://hadoop1:10000/default -e 'select * from tablename' > /home/tmp/result.nb

  执行结果如下:

  在Beeline中,结果可以被展示为多种格式,格式可以在outputformat参数中设置。下面是支持的输出各式:

  其中table、verticalxmlattrxmlelements是按照特有的形式展示结果,比如vertical以key-value格式展示,xmlelements以xml格式展示。详情见:

https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients

separated-value formats展示形式是将一行值按照不同分割符分开,主要包括五种分割输出格式:csv, tsv, csv2, tsv2, dsv,目前csv和tsv已经被csv2和tsv2替代了。dsv,csv2和tsv2是从 Hive 0.14 开始引入的SV输出格式,csv2使用的是逗号,tsv2使用的是tab空格,dsv是可配置的。对于dsv格式,分隔符可以通过用参数 delimiterForDSV 进行设置,默认是 '|'。

  对于问题描述可知beeline输出结果中字段之间使用“|”分割的,从前面分析可知, csv2和tsv2格式字段值分割符不可能是“|”,只有输出为dsv格式,分割符可以设置,且默认分割符是“|”。可是在执行beeline时并未设置outputformat和delimiterForDSV 参数的值,说明使用的是Beeline默认的输出格式,从outputformat说明中得知Beeline默认的输出各式为table模式,所以接下来就需要弄清楚table模式下字段分隔符是否为“|”。

  首先在BeeLine类中找到展示结果相关的代码,如下图所示:

  从上图可知,beeline使用的输出格式是通过getOutputFormat()方法获取的,那就进入该方法看看,如下图所示:

  可以看出getOutputFormat()方法直接将outputFormat值返回,接下来就需要看看outputFormat的值从哪来的,通过搜索得知除了outputFormat的默认值外,只有上图中setOutputFormat(String outputFormat)会给outputFormat设置值,可是setOutputFormat(String outputFormat)只有在beeline执行语句中设置outputformat才会被调用,而事实并未在beeline中设置outputformat,所以getOutputFormat()获取的是outputformat默认值,outputformat的默认值为"table",相关代码如下:

  TableOutputFormat类的print()方法实现逻辑如下:

  从上图可知,在print()方法中主要是设置表格中表头、表体、表中值的展示格式,这里只关注表中字段值的分割符,因此继续进入图中第85行代码看看对值的格式处理,代码如下:

  此处要看的是table默认下对值是怎么分割的,故header的值为false,所以会走该段代码的else逻辑,显然从图中红框中的代码可知值之间使用“|”分割的。

  经过以上分析可知,如果没有在beeline执行语句中设置outputformat参数,默认展示格式会使用table模式,而table模式下字段值之间的分割符为“|”,因此我们看到beeline展示的结果是以“|”分割的。如果不想使用“|”作为分割符,可以通过以下方式来设置:

  方式一:如果值之间用逗号分割,可以在beeline执行语句中加入--outputformat=csv2;如果值之间用tab分割,可以在beeline执行语句中加入--outputformat=tsv2。

  (1)将beeline的输出格式设置为csv2,即以逗号作为值之间的分割符。

  SQL示例如下:

  beeline -u jdbc:hive2://hadoop1:10000/default --outputformat=csv2  -e 'select * from tablename' > /home/tmp/result.nb

  展示结果如下:

  (2)将beeline的输出格式设置为tsv2,即以tab作为值之间的分割符

  SQL示例如下:

  beeline -u jdbc:hive2://hadoop1:10000/default --outputformat=tsv2  -e 'select * from tablename' > /home/tmp/result.nb

  展示结果如下:

  方式二:如果方式的分割符不满足需求,想通过其他分割符来分割beeline的执行结果值,可以在beeline执行语句中加入--outputformat=dsv2和--delimiterForDSV=DELIMITER。

  (1)将beeline的输出格式设置为dsv2,使用dsv2默认的分割符,即‘|’。

  SQL示例如下:

  beeline -u jdbc:hive2://hadoop1:10000/default --outputformat=dsv -e 'select * from tablename' > /home/tmp/result.nb

  结果展示如下:

  (2)将beeline的输出格式设置为dsv2,并以tab作为值之间得分割符

  SQL示例如下:

  beeline -u jdbc:hive2://hadoop1:10000/default --outputformat=dsv --delimiterForDSV=$'\t'  -e 'select * from tablename' > /home/tmp/result.nb

  结果展示如下:

  (3)将beeline的输出格式设置为dsv2,并以#作为值之间得分割符

  SQL示例如下:

  beeline -u jdbc:hive2://hadoop1:10000/default --outputformat=dsv --delimiterForDSV=#  -e 'select * from tablename' > /home/tmp/result.nb

  结果展示如下:

  备注:如果使用dsv2输出格式,值之间的分割符使用默认值,在beeline执行语句中只需要加入--outputformat=dsv就可以;如果使用dsv2输出格式,想通过自定义分割符来对值进行分割,不仅要在beeline执行语句中只需要加入--outputformat=dsv,还需要加入--delimiterForDSV=DELIMITER,实际使用时DELIMITER的值可替换为自定义的分割符。

设置beeline连接hive的数据展示格式的更多相关文章

  1. beeline连接hive server遭遇MapRedTask (state=08S01,code=1)错误

    采用beeline连接hive server是遭遇到如下错误: 5: jdbc:hive2://bluejoe0/default> select * from hive_triples wher ...

  2. 使用 beeline 连接 hive 数据库报错处理

    一.beeline连接hive报错 1. User: root is not allowed to impersonate root (state=08S01,code=0) 在初次搭建完hadoop ...

  3. kettle连接Hive中数据导入导出(6)

    1.hive往外写数据 http://wiki.pentaho.com/display/BAD/Extracting+Data+from+Hive+to+Load+an+RDBMS 连接hive

  4. beeline 连接hive

    HiveServer2是一个能使客户端针对hive执行查询的一种服务,与HiverServer1比较,它能够支持多个客户端的并发请求和授权的:HiveCLI 和 hive –e的方式比较单一,HS2允 ...

  5. 【Oracle】将表名与字段名连接成一行数据展示,字段名使用顿号的分隔

    select '<'||a.comments||'>:'||replace(wmsys.wm_concat(b.comments),',','.')||'.' as pjzf from u ...

  6. beeline连接hive

    beeline -u jdbc:hive2://192.168.1.77:10000 zeppelin default jdbc: jdbc:hive2://nn01.ooccpp.com:2181/ ...

  7. Apache Hive处理数据示例

    继上一篇文章介绍如何使用Pig处理HDFS上的数据,本文将介绍使用Apache Hive进行数据查询和处理. Apache Hive简介 首先Hive是一款数据仓库软件 使用HiveQL来结构化和查询 ...

  8. java使用JDBC连接hive(使用beeline与hiveserver2)

    首先虚拟机上已经安装好hive. 下面是连接hive需要的操作. 一.配置. 1.查找虚拟机的ip 输入 ifconfig 2.配置文件 (1)配置hadoop目录下的core-site.xml和hd ...

  9. 由“Beeline连接HiveServer2后如何使用指定的队列(Yarn)运行Hive SQL语句”引发的一系列思考

    背景   我们使用的HiveServer2的版本为0.13.1-cdh5.3.2,目前的任务使用Hive SQL构建,分为两种类型:手动任务(临时分析需求).调度任务(常规分析需求),两者均通过我们的 ...

随机推荐

  1. UML类图设计神器 AmaterasUML 的配置及使用

    最近写论文需要用到UML类图,但是自己画又太复杂,干脆找了个插件,是Eclipse的,也有IDEA的,在这里我简单说下Eclipse的插件AmaterasUML 的配置与使用吧. 点击这里下载Amat ...

  2. Java中的变量之成员变量、本地变量与类变量

    Java中的变量: 1.成员变量(实例变量,属性) 2.本地变量(局部变量) 3.类变量(静态属性) 一.成员变量(实例变量,属性) 1.1-成员变量:(在类中定义,    访问修饰符   修饰符   ...

  3. 计组CPU设计实验关键材料和关键设计

    我记得这是2016春季学期搞得,参考和学习了很多别人的东西,这里小小的总结一下,逻辑性还不是太强,还需要好好整理 首先是指令集 CPU架构 外部接线架构 指令格式 机器状态自动机 这部分忘了,汗 这部 ...

  4. Web 前端页面性能监控指标

    Web 前端页面性能监控指标 性能监控 / 性能指标 / 性能优化 白屏时间计算 FCP 白屏时间:从浏览器输入地址并回车后到页面开始有内容的时间: 首屏时间计算 FMP 首屏时间:从浏览器输入地址并 ...

  5. CSS & new class name

    CSS & new class name { test: /\.((s*)css|sass)$/, // test: /\.(css|scss|sass)$/, use: ExtractTex ...

  6. css break-inside

    css break-inside The break-inside CSS property sets how page, column, or region breaks should behave ...

  7. Rollup & Webpack & Parcel

    Rollup & Webpack & Parcel package bundler https://x-team.com/blog/rollup-webpack-parcel-comp ...

  8. macOS finder show hidden files

    macOS finder show hidden files 显示 MacOS 上的隐藏文件和文件夹 https://zh.wikihow.com/显示Mac-OS-X上的隐藏文件和文件夹 $ def ...

  9. macOS & wifi & ip

    macOS & wifi & ip mac show wifi ip # wireless ipconfig getifaddr en1 # ethernet ipconfig get ...

  10. 翻译:《实用的Python编程》01_07_Functions

    目录 | 上一节 (1.6 文件) | 下一节 (2.0 处理数据) 1.7 函数 随着程序开始变大,我们会想要有条理地组织这些程序.本节简要介绍函数.库模块以及带有异常的错误处理. 自定义函数 对你 ...