hive的使用

原理

数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。
Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口

特性

Hive中不建议对数据的改写,所有的数据都是在加载的时候确定好的;
Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce框架。

报错FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.StatsTask

 set set hive.stats.column.autogather=false

$HIVE_HOME/conf/hive-site.xml

<property>
 <name>hive.stats.column.autogather</name>
 <value>true</value>
</property>

配置推荐

参考: https://blog.51cto.com/u_16099176/6668061

版本

|hbase |hbase-2.4.17/ |列式存储 |
|hive | apache-hive-3.1.3-bin| 数仓元数据|

hive操作hbase

将hbase的依赖jar包,导入hive中,创建外联表,在hive中操作数据表和在hbase操作表数据实时变化;

cd /export/server/hive/lib
# 删除所有hbase依赖包
rm -rf hbase*
cp  /export/server/hbase/lib/hbase*.jar  ./
cp  /export/server/hbase/lib/protobuf*.jar  ./
cp  /export/server/spark/jars/spark-examples_2.11-1.6.0-typesafe-001.jar ./

修改hive/conf的hive-site.xml配置

<property>
	<name>hbase.zookeeper.quorum</name>
	<value>shhadoop02,shhadoop03,shhadoop04</value>
</property>

创建表

# 创建hbase表
create 'hbase_game','lol','cf'
# 创建hive外部表
CREATE EXTERNAL TABLE hive_hbase_game (id int, lol_name string,level string,cf_name string,gun string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,lol:name,lol:level,cf:name,cf:gun")
TBLPROPERTIES ("hbase.table.name" = "hbase_game");

# hbase.columns.mapping 是必须的,这将会和 HBase 表的列族进行验证。
# hbase.table.name 属性是可选的,默认指定 HBase 表名与 Hive 表名一致。
# 创建中间表导入数据
CREATE TABLE 
game_original (id int, lol_name string,level string,cf_name string,gun string) 
row format delimited
fields terminated by ',';

vim game.txt
1,别动我辅助,青铜,打偏了,AK
2,别动我BUFF,黑铁,狙击手,AWM
# load数据
load data local inpath '/home/hadoop/game.txt' 
overwrite into table game_original;
# 将中间表的数据插入hbse外部表
from game_original 
insert overwrite table hive_hbase_game 
select id,lol_name,level,cf_name,gun;
# 检查结果
select * from hive_hbase_game;
scan 'hbase_game'

参考: https://blog.csdn.net/weixin_43713105/article/details/112623149

network问题

删除网卡

rm -f /etc/udev/rules.d/70-persistent-net.rules

修改ssh免密登录

ssh-keygen -t rsa -b 4096
cd .ssh/
ll
cd
ssh-copy-id node1

ssh node2
exit

添加用户

su - root
passwd <user_name>

adduser hadoop
passwd hadoop

su - hadoop

安装python

1.上传 Python-3.7.9.tgz 到 /export/server 
cd /export/server
tar -zxvf Python-3.7.9.tgz
ln -s Python-3.7.9.tgz  python
cd python
./configure --prefix=/usr/local/python3
make && make install
查看 ls /usr/local/python3
vim /etc/profile
export PATH=$PATH:/usr/local/python3/bin
source /etc/profile

$ python
`error python: command not found`
 
ln -s /usr/local/python3/bin/python3 /usr/bin/python
`error ln: creating symbolic link `/usr/bin/python': File exists`

rm -rf /usr/bin/python
ln -s /usr/local/python3/bin/python3 /usr/bin/python

> python -v

安装jdk

https://www.oracle.com/java/technologies/downloads/#java8

su - root

ll /usr/bin/java
rm -rf /usr/bin/java
ln -s /export/server/jdk/bin/java /usr/bin/java
java -version
mkdir /export/server
fctp上传jdk文件

tar -zxvf jdk-8u351-linux-x64.tar.gz -C /export/server/

scp复制到远程主机(`pwd`复用当前路径)
scp -r jdk1.8.0_351 node2:`pwd`/
ln -s /export/server/jdk1.8.0_351 jdk
cat /etc/profile
vim /etc/profile
export JAVA_HOME=/export/server/jdk
export PATH=$PATH:$JAVA_HOME/bin
:wq
source /etc/profile


rm -f /usr/bin/java
ln -s /export/server/jdk/bin/java /usr/bin/java

java -version
javac -version

关闭防火墙

//临时关闭
service iptables stop
//禁止开机启动
kconfig iptables off
// 查看防火墙状态
service iptables status
 
//停止防火墙
service iptables stop
 
//启动防火墙
service iptables start
 
//重启防火墙
service iptables restart
 
//永久关闭防火墙
kconfig iptables off
 
//永久关闭后重启
kconfig iptables on
# 
vim /etc/sysconfig/selinux
// 重启服务
init 6

systemctl stop firewalld && systemctl disable firewalld
systemctl status firewalld
systemctl stop firewalld && systemctl disable firewalld
systemctl status firewalld

vim /etc/sysconfig/selinux 
SELINUX=disabled

yum install -y ntp
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
date
ntpdate -u ntp.aliyun.com
systemctl start ntpd
systemctl enable ntpd

centos修改默认yum源为阿里云yum镜像源详细步骤

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-vault-6.10.repo
yum clean all && yum makeca

同步时间

yum install -y ntp
rm -f /etc/localtime
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ntpdate -u ntp.aliyun.com
service ntpd status      #查看ntpd服务状态
service ntpd start           #启动ntpd服务
service ntpd stop            #停止ntpd服务
service ntpd restart         #重启ntpd服务

systemctl ntpd status

安装hadoop

https://archive.apache.org/dist/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz

上传hadoop-3.3.4.tar.gz
tar -zxvf hadoop-3.3.4.tar.gz -C /export/server
ln -s /export/server/hadoop-3.3.4 hadoop

bin 存放Hadoop的各类程序(命令)
etc 存放Hadoop的配置文件
sbin 管理员程序(super bin)

# 配置HDFS集群
workers: 配置从节点(DataNode)有哪些
hadoop-env.sh  配置Hadoop的相关环境变量
core-site.xml Hadoop核心配置文件
hdfs-site.xml  hdfs核心配置文件

这些文件都存在于$HADOOP_HOME/etc/hadoop文件中
$HADOOP_HOME=/export/server/hadoop

## 配置workers
cd etc/hadoop
vim workers
node1
node2
node3

配置hadoop-env.sh

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

配置core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://ecs-qar1-0002:8020</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://ecs-qar1-0002:8020</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
    <property>
       <name>hadoop.proxyuser.shhadoop.groups</name>
       <value>*</value>
    </property>
    <property>
       <name>hadoop.proxyuser.shhadoop.hosts</name>
       <value>*</value>
    </property>
</configuration>

配置hdfs-site.xml

<configuration>
    <property>
        <name>dfs.datanode.data.dir.perm</name>
        <value>700</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/nn</value>
    </property>
    <property>
        <name>dfs.namenode.hosts</name>
        <value>node1,node2,node3</value>
    </property>
    <property>
        <name>dfs.blocksize</name>
        <value>268435456</value>
    </property>
    <property>
        <name>dfs.namenode.handler.count</name>
        <value>100</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/dn</value>
    </property>
</configuration>

node1创建:

mkdir -p /data/nn
mkdir -p /data/dn
node2,node3创建:
mkdir -p /data/dn

node2,node3相同配置Hadoop

cd /export/server
scp -r hadoop-3.3.4 node2:`pwd`/
scp -r hadoop-3.3.4 node3:`pwd`/

ln -s /export/server/hadoop-3.3.4 /export/server/hadoop

配置环境变量 node1,node2,node3

vim /etc/profile
export HADOOP_HOME=/export/server/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile

修改用户和用户组

1、用户列表文件:/etc/passwd
2、用户组列表文件:/etc/group
3、查看系统中有哪些用户:
cut -d : -f 1 /etc/passwd
4、查看可以登录系统的用户:
cat /etc/passwd | grep -v /sbin/nologin | cut -d : -f 1
root用户修改其他用户密码:
passwd <user_name>

adduser hadoop
passwd hadoop

修改用户及用户组授权 node1, node2, node3

chown -R hadoop:hadoop /export
chown -R hadoop:hadoop /data

格式化文件系统

su - hadoop
hadoop namenode -format

一键启动

start-dfs.sh
stop-dfs.sh
/export/server/hadoop/sbin/start-dfs.sh
/export/server/hadoop/sbin/stop-dfs.sh
jps

单独控制进程

hadoop-daemon.sh start | status | stop
hdfs --daemon start|status|stop

HDFS的文件

linux: file:///usr/local/hello.txt
HDFS: hdfs://node1:8020/user/local/hello.txt
hadoop fs [options]
hadoop fs -mkdir -p [path]
hdfs dfs -mkdir -p [path]

查看

hdfs dfs -ls -h -R [path]
hdfs dfs -ls -R /
上传本地tt.txt文件到 /tmp
 hdfs dfs -put tt.txt /tmp
 hdfs dfs -ls /
 hadoop fs -ls /

上传

hdfs dfs -put [-f] [-p] <linuxlocalsrc> <hdfs>

下载

hdfs dfs -get [-f] [-p] <hdfssrc> <linuxlocalsrc>

查看内容

hdfs dfs -cat <src>

移动

hdfs dfs -mv <src>

删除

-r:删除文件夹
hdfs dfs -rm -r <src>

配置回收站

<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
<property>
<name>fs.trash.checkpoint.interval</name>
<value>120</value>
</property>

/usr/hadoop/.Trash

docs/r3.3.4

hadoop的超级用户

谁启动了namenode的用户为超级用户

hadoop fs -chmod [-R] 777 test.txt

NFS功能使用和搭建

副本块数量配置

df.replication 3

临时决定上传文件多少个副本存储

hadoop fs -D dfs.replication=2 -put test.txt /tmp/

对已存在的HDFS的文件

hadoop fs -setrep [-R] 2 path…

查看副本

hdfs fsck path [-files [-blocks] [-locations] ]

namenode

edits记录
fsimage合并
secondarynamenode:辅助合并edits

配置yarn

配置mapred-env.sh文件

export JAVA_HOME=/export/server/jdk
// 设置jobhistoryserver进程内存:1G
export HADOOP_JOB_HISTORYSERVER_HEAPSIZE=1000
// 日志级别
export HADOOP_MAPRED_ROOT_LOGGER=INFO,RFA

mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <description>Execution framework set to Hadoop YARN.</description>
</property>
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>node1:10020</value>
    <description>Default port is 10020.</description>
</property>
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>node1:19888</value>
    <description>Default port is 19888.</description>
</property>
<property>
    <name>mapreduce.jobhistory.intermediate-done-dir</name>
    <value>/data/mr-history/tmp</value>
    <description>Directory where history files are written by MapReduce jobs.</description>
</property>
<property>
    <name>mapreduce.jobhistory.done-dir</name>
    <value>/data/mr-history/done</value>
    <description>Directory where history files are managed by the MR JobHistory Server</description>
</property>
<property>
    <name>yarn.app.mapreduce.am.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>MAPREDUCE home设置为HADOOP_HOME</description>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>MAPREDUCE HOME 设置为HADOOP_HOME</description>
</property>
<property>
    <name>mapreduce.map.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>mAPREDUCE HOME 设置为HADOOP_HOME</description>
</property>
<property>
    <name>mapreduce.reduce.env</name>
    <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value>
    <description>mAPREDUCE HOME 设置为HADOOP_HOME</description>
</property>

配置 yarn-env.sh

export JAVA_HOME=/export/server/jdk
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_LOG_DIR=$HADOOP_HOME/logs

yarn-site.xml

<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node1</value>
    <description>ResourceManager host.</description>
</property>
<property>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/data/nm-local</value>
    <description>中间数据存储</description>
</property>
<property>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/data/nm-log</value>
    <description>日志存储</description>
</property>
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
    <description>shuffle服务</description>
</property>
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
    <description>历史服务器</description>
</property>
<property>
    <name>yarn.web-proxy.address</name>
    <value>node1:8089</value>
    <description>代理服务器</description>
</property>
<property>
    <name>yarn.log.aggregation.enable</name>
    <value>true</value>
    <description>开启日志聚合</description>
</property>
<property>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/tmp/logs</value>
    <description>程序日志</description>
</property>
<property>
    <name>yarn.resourcemanager.scheduler.class</name>
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
    <description>公平调度器</description>
</property>

scp * node2:pwd/

scp * node3:pwd/

YARN已启动和关闭

$HADOOP_HOME/bin/yarn
mapred --daemon ( start | stop) historyserver
sbin/start-yarn.sh
mapred --daemon start historyserver

sbin/stop-yarn.sh
mapred --daemon stop historyserver
$HADOOP_HOME/bin/yarn --daemon ( start | stop) resourcemanager\nodemanager\proxyserver

启动hadoop

jps
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
# http://node1:8088

安装mysql

配置hive

core-site.xml

<property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
</property>
<property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
</property>

https://dlcdn.apache.org/hive/hive-3.1.3/

解压安装hive

https://dlcdn.apache.org/hive/hive-3.1.3/

tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /export/server/

软连接重命名

ln -s /export/server/apache-hive-3.1.3-bin hive

配置hive-env.sh

cd hive/conf
mv hive-env.sh.template hive-env.sh

export HADOOP_HOME=/export/server/hadoop
export HIVE_CONF_DIR=/export/server/hive/conf
export HIVE_AUX_JARS_PATH=/export/server/hive/lib

hive-site.xml

cd hive/conf

<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>com.mysql.jdbc.Driver</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionUserName</name>
        <value>root</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionPassword</name>
        <value>123456</value>
    </property>
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>node1</value>
    </property>
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://node1:9083</value>
    </property>
    <property>
        <name>hive.metastore.event.db.notification.api.auth</name>
        <value>false</value>
    </property>
</configuration>

hive元数据的初始化

mysql

create database hive charset utf8;

cd /export/server/hive/bin

chown -R hadoop:hadoop mysql-connector-java-5.1.47.tar.gz 

chown -R hadoop:hadoop hive

启动元数据管理服务

初始化表74张
./schematool -initSchema -dbType mysql -verbos

启动元数据管理服务
nohup hive --service metastore >> /export/server/hive/logs/metastore.log 2>&1 &
启动的是HiveServer2服务是Hive内置的一个ThriftServer服务,给其他客户端连接使用;
nohup hive --service hiveserver2 >> /export/server/hive/logs/hiveserver2.log 2>&1 &
客户端连接
beeline -u jdbc:hive2://node1:10000

jps | grep RunJar | awk '{print $1}' | xargs -n1 kill -9
ps -ef | grep metastore | grep -v grep | awk '{print $2}'

 exec-hive.sh start
 exec-hive.sh stop

原理

Hive通过给用户提供的一系列交互接口,接收到用户的指令(SQL),使用自己的Driver,结合元数据(MetaStore),将这些指令翻译成MapReduce,提交到Hadoop中执行,最后,将执行返回的结果输出到用户交互接口
执行延迟
Hive 在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致 Hive 执行延迟高的因素是 MapReduce框架。由于MapReduce 本身具有较高的延迟,因此在利用MapReduce 执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。

客户端管理工具

hive shell

bin/hive

直接可以写sql语句

create table test(id int, name string, gender string);
insert into test values(1,'王力宏','男'),(2,'成龙','女');
select gender,count(*) as cnt from test group by gender;
hadoop fs -ls /
hadoop fs -ls /usr/hive/warehouse
hadoop fs -cat /usr/hive/warehouse/test/*

DBS;
TBLs;

HiverServer2 服务

启动元数据管理服务
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
启动的是HiveServer2服务是Hive内置的一个ThriftServer服务,给其他客户端连接使用;
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &

第三方:客户端
通过访问beeline客户端来连接matestore,操作mateData
Hive内置的beeline客户端工具
DBeaver或者navicat

ll 查看哪些用户和用户组有权限
su - hadoop
netstat -anp|grep 10000
cd bin
bin/bealine
!connect jdbc:hive2://node1:10000
hadoop
123456

创建数据路

create database if not exists myhive;
use myhive;

查看数据库的详细信息

desc database myhive;

修改默认创建路径
create database myhive2 location '/usr/hive/myhive2';

删除数据库

drop database myhive;

强制删除表

drop database myhive cascade;

查看表

show database myhive;

(A | B)必选
[] 可选
| 选取
… 序列

use db_name;

select current_database();

修改数据库

创建表

create table test(int name);
drop table myhive.test;

内部表和外部表

external 外部表关键字
区别:
反斜杠001特殊字符
创建表可以指定分割符号

外部表的使用

现有表,表结构等,在put到数据;
现有数据在有表都可以使用;
删除表只是删除元数据,表的数据不删除;

查看表的详细信息

desc formatted stu;

自定义表

create external table t2(id int, name string, score int) row format delimited fields terminated by '\t' location '/tmp/t2';

修改表

内转为外部表
alter table t1 set tblproperties('EXTERNAL'='TRUE')
外部表转为内部表
alter table t2 set tblproperties('EXTERNAL'='FALSE')

数据加载

linux系统下local,本质是先上传到HDFS,
load data local inpath '/home/hadoop/search_log.txt' into table myhive.test_load;

load data local inpath '/home/hadoop/search_log.txt' overwrite into table myhive.test_load;

insert into table tbl1 select * from tbl2;
insert overwrite table tbl1 select * from tbl2;

insert overwrite local directory '/home/hadoop/export1' select * from myhive.test_load;

insert overwrite local directory '/home/hadoop/export1' row format delimited fields terminated by '\t' select * from myhive.test_load;

bin/hive -e "sql语句" > result1.txt
bin/hive -f "sql脚本文件" > result2.txt

分区表 : 分区字段就是文件夹

craate table tablename(...) partitioned by (分区列 列类型, ...)
row format delimited fields terminated by '\t';

测试数据

use myhive;
create table t2(id int, name string, score int) row format delimited fields terminated by '\t' location '/tmp/t2';

insert into t2 (id,name,score) values(1,'zjy',20),(2,'sje',22),(3,'srj',30);

/user/hive/warehouse/myhive.db


cd ~

/home/hadoop/

/export/server/hive/bin/hive -e "select * from myhive.t2" > t2.txt;

查看表结构

desc formatted t2;

创建一个单分区表,分区是按照月分区

create table myhive.score(id int, cid string, score int) partitioned by (month string) row format delimited fields terminated by '\t';

load data 加载数据到分区表中

load data local inpath '/home/hadoop/t2.txt' into table myhive.score partition(month='202005');

select * from score where month="202005";

查看文件

hadoop fs -ls /user/hive/warehouse/myhive.db/score


create table myhive.score2(id int, cid string, score int) partitioned by (year string, month string, day string) row format delimited fields terminated by '\t';
load data local inpath '/home/hadoop/t2.txt' into table myhive.score2 partition(year='2020', month='04', day='06');

分桶表

分区表是将表拆分到不同的子文件夹中进行存储,二分桶是将表拆分到固定数量的不同文件中进行存储。

开启桶的自动优化(reduce task数量与桶数相等)
set hive.enforce.bucketing=true;

创建分桶表
create table course(c_id string, c_name string, t_id string) clustered by(c_id) into 3 buckets row format delimited fields terminated by '\t';

不能使用load data加载数据;
insert select 加载数据;

alter table 'old_name' rename to 'new_name';

修改表的属性

desc formatted score;
alter table score set tblproperties("EXTERNAL"="true");
alter table score set TBLPROPERTIES('comment'="注释");

新增列

alter table score add columns (v1 int ,v2 string);

只能修改列名

alter table score change v2 v2new int;

删除表

drop table myhive.score;

清空表数据(不能清空外部表)

truncate table course;

添加分区

修改分区值

删除分区

array类型

Hive练习题50道

函数

show functions;
describe function extended count;
数值函数
rand()
rand(3)
round(3.455666)
round(4.56644,3)
sort_array()

类型转换函数

binary()
cast("1" as bigint)
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

条件函数

if()
isnull()
isnotnull()
nvl()
nullif()
字符函数
lower()
upper()
trim()
concat()
concat_ws()
split()

数据脱敏函数

hash()

其他函数 Misc. Functions

正则

取样

虚拟列

csv后缀

cat aa.csv | more

数据清洗

日期拆分,年,月,日
非空数据
坐标数据分开经纬度

ETL概念

E: extract 抽取
T:transform 转换
L:load 加载

as语句

create table db_msg.tb_rs_total_msg_cnt comment '每日消息总量' as
select msg_day,count(*) as total_msg_cnt from db_msg.tb_msg_etl group by msg_day;

可视化展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值