百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT文章 > 正文

hive支持insert into values

chenpack 2025-06-10 13:00 19 浏览 0 评论

数仓实战:Hive数据加载到Greenplum

如果说Hive是离线数仓的代表,那么Greenplum就是MPP数据库的代表。在离线数仓的年代,以Hive为核心的数据仓库席卷数据仓库市场,几乎成为了离线数仓的代名词。但是Hive的查询能力非常弱,通常需要其它计算引擎辅助才能完成OLAP查询。

具体来说,Hive数据仓库的查询引擎主要有以下几种选择:

hive支持insert into values

  1. ? Spark支持sql查询,需要启动Thrift Server,不稳定,查询速度一般几秒到几分钟。
  2. ? Impala是CDH公司推出的产品,一般用在CDH平台中,MPP架构,查询比Spark快,但是是C++开发的,非CDH平台安装比较困难;
  3. ? Presto和Hive一样也是Facebook开源的,但是语法居然不兼容Hive。查询速度也比较快,是基于MPP架构。
  4. ? Kylin是国人开源的MOLAP软件,基于Spark引擎对Hive数据做预计算保存在Hbase或者其他存储中,查询速度非常快并且稳定,一般在10s以下。但是模型构建复杂,使用和运维都不太方便。
  5. ? Clickhouse是目前最火的OLAP查询软件,特点是快,集成了各大数据库的精华引擎;独立于Hadoop平台以外,需要把Hive数据同步迁移过去;有限的SQL支持,几乎不支持join。
  6. ? Greenplum是MPP架构数据库的代表,支持行存储和列存储,支持非常完善的SQL语法,开发和使用与传统数据库几乎一致,查询速度通常在1s到10s之间。

当时由于认知水平有限,未将Doris纳入比较。

根据我的经验,最大的常用业务查询表数据量在亿级以下,建议直接使用Greenplum数据库作为数据仓库或者数据中台,完全无需搭建Hive数据仓库。在数据量超过亿级的时候,Hive on Spark将实现更好的批处理,降低硬件成本,但是这个时候,Greenplum将成为数据应用层(ADS)的可选数据库之一(其他选项包括Kylin、Clickhouse、Doirs、Hana等)。

在Greenplum作为ADS存储的情况下,我们需要批量导入ADS层数据到Greenplum,这个时候GPLoad将发挥巨大的作用。

GPLoad是Greenplum数据库提供的用来进行并行数据装载的工具。GPLoad的实现原理是Greenplum数据库使用可读外部表和并行文件服务gpfdist装载数据的一个命令集合,允许通过使用配置文件的方式设置数据格式、文件位置等参数来创建外部表。GPLoad命令通过按照YAML格式定义的装载说明配置文件,然后执行insert、update、merger操作,将数据装载到目标数据库表中。

GPLoad的控制文件采用YAML1.1文档格式编写,因此它必须得是有效的YAML格式。YAML配置文件格式要求如下:

VERSION: .1DATABASE: opsUSER: gpadminHOST: mdw-1PORT: 5432GPLOAD:   INPUT:    - SOURCE:         LOCAL_HOSTNAME:           - etl1-1           - etl1-2           - etl1-3           - etl1-4         PORT:          FILE:            - /var/load/data/*    - COLUMNS:           - name: text           - amount: float4           - category: text           - descr: text           - date: date    - FORMAT: text    - DELIMITER: '|'    - ERROR_LIMIT:     - LOG_ERRORS: True   OUTPUT:    - TABLE: payables.expenses    - MODE: INSERT   SQL:   - BEFORE: "INSERT INTO audit VALUES('start', current_timestamp)"   - AFTER: "INSERT INTO audit VALUES('end', current_timestamp)"

接下来,我们将通过一个模板脚本和shell程序实现HDFS数据的批量导入Greenplum。这个脚本是我年上半年实现的,至今仍然稳定运行在生产环境中。

首先,我们定义一个模板的yml文件gpload_cfg_template.yml,内容如下:

VERSION: .1DATABASE: xxxUSER: xxxHOST: .30PORT: 5432GPLOAD:  INPUT:    - SOURCE:         LOCAL_HOSTNAME:                -          PORT:          PORT_RANGE: [,]         FILE:            - /data/hdsp/infra/ETL_HOME/shell/tempdata/{dbname}.{table}/*    - FORMAT: text    - HEADER: false    - DELIMITER: '\'    - NULL_AS: '\N'  OUTPUT:    - TABLE: {dbname}.{table}    - MODE: INSERT  PRELOAD:    - TRUNCATE: true  SQL:  

其次,我们创建一个shell脚本hive2gp_gpload.sh,实现以下功能:

  1. 复制yaml模板,并根据shell脚本参数替换数据库表和表名;
  2. 从HDFS上线下载文件到本地,要求数据文件必须是TEXT格式;
  3. 运行gpload命令,加载数据到Greenplum数据库;
  4. 删除本地文件。 shell代码如下:
#!/bin/bash# 使用方式# eg: ./gpload2hive.sh cabbeen_dw dw_ret_sales_detail_text# 免密登录配置:  ~.pgpassif [ ! -n "$2" ]; then    echo "Invalid arguments. Usage: sh hive2gp_gpload.sh dbname tablename"    exit -1else    dbname=$1;  tablename=$2;fisource ~/.bash_profile;shellpath=/data/hdsp/infra/ETL_HOME/shellyml_file=${shellpath}/gpload_yml/${dbname}.${tablename}.yml  if [ ! -f ${yml_file} ]; then   cp $shellpath/gpload_yml/gpload_cfg_template.yml ${yml_file}   sed -i "s/{table}/$tablename/g" $yml_file;   sed -i "s/{dbname}/$dbname/g" $yml_file;fi  #删除上一次抽取的文件rm -rf $shellpath/tempdata/${dbname}.${tablename}echo "[${dbname}.${tablename}]:start to get hdfs file!"#从hdfs上获取文件hdfs dfs -get hdfs://hdp01/data/apps/hive/warehouse/cabbeen_dw.db/$tablename $shellpath/tempdata/${dbname}.${tablename}echo "[${dbname}.${tablename}]:get hdfs file sucess! start to load!"#load数据到GP/data/greenplum6/greenplum-db/bin/gpload -f $yml_file -U cabbeenc -l $shellpath/gpload_log/${dbname}_${tablename}_$(date +"%Y-%m-%d-%H-%M-%S").logecho "[${dbname}.${tablename}]:load success!"#删除本次抽取的文件,节省空间rm -rf $shellpath/tempdata/${dbname}.${tablename}  

调用脚本的方式如下:

  sh  hive2gp_gpload.sh  dbname   tablename

使用这种方式有以下前提:

1. hive表数据为text格式,分隔符为默认分隔符\u0001

2. gpload需安装,也可以直接复制Greenplum安装包并配置环境变量

3. 数据库用户需要有权限创建表

4. gp和hive schame和table映射关系相同,字段顺序也要保持一致。

相关推荐

pythonfor循环求1!+2!+3!+....+n!的和 python用循环求1到100的和

python经典案例:求1到之和问题:求1到之和方法1:利用循环求和#!/usr/bin/python#coding:utf-8#author:菜就多练呀total=0foriinran...

python批量查询备案号_python 批量查询

批量查询ip对应域名、备案信息、百度权重ip2domain-批量查询ip对应域名、备案信息、百度权重本工具二开自https://github.com/sma11new/ip2domain在批量挖S...

motionbuilder镜像动画 motionbuilder插件

如果把《哪吒2》制作全部交给AI《哪吒2》作为现象级动画电影,其成功确实依赖于产业链的高效协作。随着AI技术逐渐渗透动画制作全流程,未来动画产业将呈现"AI全链参与+人类创意主导"的深度融合模式。以下...

逻辑运算符、算术运算符、赋值运算符等等归纳

运算符(算术、比较、逻辑等)1、算数运算符如:a=,b=+加如:a+b=-减如:a-b=-乘如:a*b=/除如:a/b=%取余如:a/b=**幂x**y返回x的y次方,如...

如何生成HTML5页面代码_如何用html5制作一个网页

vscode快速生成html代码技巧快速生成Html5骨架在Html文件中输入html:5按下回车键,可快速生成HTML5页面模板:Docu...

国家海洋局第二海洋研究所(海洋二所)考研答疑

上海海洋大学发布年硕士研究生招生章程,来看详情→近日,上海海洋大学发布年硕士研究生招生章程一起来看看吧!一、学校简介上海海洋大学建校于年,是一所多科性应用研究型大学,是上海市人民政府与国家海洋局、农业...

vue-awesome-swiper轮播图实现

swiper在vue中正确的使用方法swiper是网页中非常强大的一款轮播插件,说是轮播插件都不恰当,因为它能做的事情太多了,swiper在vue下也是能用的,需要依赖专门的vue-swiper插件,...

yarn下载安装教程_yarn安装axios

yarn的安装和使用一、安装在windows下(1)下载node.js,使用npm安装npminstall-gyarn(2)查看版本yarn--versionYarn淘宝源安装&nbs...

freemodbus 主机源码 freemodbus stm32

STM32单片机移植FreeModbus详细过程modbus是一个非常好的串口协议(当然也能用在网口上),它简洁、规范、强大。可以满足大部分的工业、嵌入式需求。这里详细说下如何将freemodbus...

python if 多条件并列判断_python多个if并列怎么运行

pythonif多条件并列判断的三种方法pythonif多条件并列判断的三种方法如果使用python的if进行多个条件表达式的判断呢?下面介绍三种方法:使用and或or来连接多个条件表达式,比如条...

driver memory和executor memory怎么设置 memory odd ratio怎么设置

RocketMQ原理—2.源码设计简单分析一大纲1.NameServer的启动脚本2.NameServer启动时会解析哪些配置3.NameServer如何初始化Netty网络服务器4.NameServ...

FPGA编程架构_fpga的编程语言是什么

深入浅出带你了解FPGA架构数字集成电路有两种类型:ASIC和FPGA(现场可编程门阵列)。专用集成电路(ASIC)有一个预先定义的特定硬件功能,在生产后不能重新编程。但FPGA可以在制造后可无限编程...

Web端H.265播放器研发解密_h265 网页播放

海南车智易通申请支持H265编码格式的Web视频播放器优化专利,能够提升用户体验金融界年1月日消息,国家知识产权局信息显示,海南车智易通信息技术有限公司申请一项名为“一种支持H2...

java 为什么要用多线程_java为什么很少用多进程

Redis不是号称单线程效率也很高吗,为什么又采用多线程了?Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了的版本,在新版本中采用了多线程模型。因为...

MySQL创建存储过程查询借书人最多的人

怎么建设数据中台?详解数据中台架构内的三大平台!一、什么是数据中台?要知道“中台”是什么,就得先了解“前台”和“后台”。前台,就是我们日常使用的过程中可以直接看到和感知到的东西,比如你打开某东app买...

取消回复欢迎 发表评论: