本文已参与「新人创作礼」活动,一起开启掘金创作之路。
hive指定格式导出数据
语法格式
beeline -n username -p password \
-u jdbc:hive2://hadoop01:10000/cdm \
--verbose=true \
--showHeader=false \
--outputformat=tsv2 \
--color=true \
-e "select * from ${database}.${tablename}" > ${tableName}.csv
或者
beeline -n username -p password \
--outputformat=table \
-u jdbc:hive2://hadoop01:10000/cdm \
-e "select * from ${database}.${tablename}" > ${tableName}.csv
通过 outputformat 指定输出格式
--outputformat=[table/vertical/csv/tsv/dsv/csv2/tsv2] == 指定输出格式 --delimiterForDSV="*" 前提(–outputformat=dsv) 指定分隔符
不同格式对应的分隔符如下表:
| 格式 | 分隔符 |
|---|---|
| table | 表格式 |
| vertical | 垂直模式 |
| csv | ',' 逗号(元素包含引号) |
| tsv | '\t' 制表符(元素包含逗号) |
| dsv | 默认'|' 竖线分割,可通过delimiterForDSV指定分隔符 |
| csv2 | ',' 逗号(不含引号) |
| tsv2 | '\t' 制表符(不含引号) |
说明:
csv格式 == 查询元素有’'单引号 csv2格式没有单引号 tsv,tsv2同上
多分隔符实例 hive '*' 星号分割 (元素包含双引号)
beeline -n username -p password \
-u jdbc:hive2://hadoop01:10000/cdm \
--showHeader=false \
--outputformat=dsv \
--delimiterForDSV="*" \
-e 'SELECT concat("\"", self_acc_name,"\"") , concat("\"",self_acc_no ,"\"") FROM ${database}.${tablename}" > ${tableName}.csv
beeline -n hive -p hive \
-u jdbc:hive2://hadoop01:10000/cdm \
--showHeader=true \
--outputformat=dsv \
--delimiterForDSV="|" \
-e "select * from t1 where ds >= '20220101' and ds < '20220201' and id=37 order by \`time\` " > t1.txt
Hive时间函数时区问题
hive的时间函数
- 取得当前日期
select current_date();
- 取得当前日期时间
select current_timestamp();
-- 获取当前日期 UTC 默认时区
SELECT CURRENT_TIMESTAMP()
-- 假设给定的时间戳是UTC并转换为给定的时区(从Hive 0.8.0开始)UTC 默认时区 转为 GMT+8 上海时区
SELECT from_utc_timestamp(CURRENT_TIMESTAMP,'GMT+8')
-- 假设给定时间戳在给定时区内并转换为UTC(从Hive 0.8.0开始) 设置为GMT-8 时区 再转为 UTC 默认时区
SELECT to_utc_timestamp(CURRENT_TIMESTAMP,'GMT-8')
- 取得当前时间
select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss');
获取的是HiveService所在操作系统RTC(时钟芯片)时间,如下 实例1:
实例2: