hive sql注意事项

简介: hive sql注意事项 如果是按时间分区的表,查询时一定要使用分区限制,如果没有分区限制,会从该表的所有数据里面遍历。 注意sql中or的使用,or 这个逻辑必须单独括起来,否则可能引起无分区限制,下面举个例子,想查询到的是gd或gx的某天的数据。

hive sql注意事项

如果是按时间分区的表,查询时一定要使用分区限制,如果没有分区限制,会从该表的所有数据里面遍历。

注意sql中or的使用,or 这个逻辑必须单独括起来,否则可能引起无分区限制,下面举个例子,想查询到的是gd或gx的某天的数据。 
Select x from t where ds=d1 and province=’gd’ or province=’gx’ 
该语句会从所有的分区里面查询!也没有得到自己想要的数据!这里的意思是某天gd的或者所有日期里面gx的数据 ,正确的写法是: 
Select x from t where ds=d1 and (province=’gd’ or province=’gx’)

很容易出错的地方 
1、 只支持等值连接,不支持非等值连接 join的时候不等值 
2、 内连接时小表放前面,大表放后面 a Join b on a.x=b.x a为小表 
3、 连接小表时使用map join 条件 
SELECT /+ MAPJOIN(b) / a.key, a.value FROM a join b on a.key = b.key 
l 小表可以放进内存(维度表、行数<2w 为宜) 
l 小表不能为驱动表 (eg:left outer join 时的左表) 
4、 Full outer join 在on中过滤分区有问题,解决方法是将分区过滤条件放到左表和右表子查询里面 
比如: 
Select a.x,b.x from a full|left|right outer join b on (a.key=b.key and a.ds=d1 and b.ds=d1) 
应该写成 
Select t1.x ,t2.x from (select * from a where ds=d1) t1 
full outer join 
(select * from b where ds=d1) t2 on t1.key=t2.key

5、 Left|right outer join 将驱动表(left outer join的左表或者right outer join的右表)的分区过滤放在on会有问题,解决方法是将驱动表的过滤条件放到where或者子查询里面 
比如: 
Select a.x,b.x from a left outer join b on (a.key=b.key and a.ds=d1 and b.ds=d1) 
应该写成 
Select a.x ,b.x from a 
left outer join b on a.key=b.key and b. ds=d1 and b.x=y 
where a.ds=d1 
或者 
Select t1.x ,t2.x from (select * from a where ds=d1) t1 
Left outer join b t2 on t1.key=t2.key and t2.ds=d1

6、 支持多表连接,语法: 
SELECT a.val, b.val, c.val FROM a JOIN b ON (a.key = b.key1) JOIN c ON (c.key = b.key2) 
下面写法错误: 
SELECT a.val, b.val, c.val FROM a JOIN b JOIN c ON (a.key = b.key1 and c.key = b.key2)

7、 内连接注意事项 
要使用 a join b on a.key=b.key, 
下面写法在mysql/oracle等价于内连接,但是在Hive中会导致笛卡尔积,会跑不出来的 
From a ,b where a.key=b.key

8、 join的两个表中有一个表应该是distinct的,但如果实际的数据并非distinct的,这个时候应该做一次select distinct放到子查询,再join

9.hive sql中匹配 ‘\’,竟然用四个,如:channel not like ‘%\\\\’ 
10.设置执行sql的内存: 
set mapreduce.map.memory.mb=8192; 
set mapred.map.child.java.opts=-Xmx7792m; 
set mapreduce.reduce.memory.mb=8192; 
set mapred.reduce.child.java.opts=-Xmx7792m;

原文地址 https://blog.csdn.net/Java_Soldier/article/details/81410839
相关文章
|
9月前
|
SQL HIVE
【Hive SQL 每日一题】环比增长率、环比增长率、复合增长率
该文介绍了环比增长率、同比增长率和复合增长率的概念及计算公式,并提供了SQL代码示例来计算商品的月度增长率。环比增长率是相邻两期数据的增长率,同比增长率是与去年同期相比的增长率,复合增长率则是连续时间段内平均增长的速率。文章还包含了一组销售数据用于演示如何运用这些增长率进行计算。
320 4
|
4月前
|
SQL 存储 数据可视化
SQL中文字符旋转90度的处理:技巧、方法与注意事项
在SQL数据库中,直接对文本数据进行90度旋转并不是数据库系统的原生功能
|
4月前
|
SQL 分布式计算 Hadoop
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
156 3
|
4月前
|
SQL 分布式计算 Java
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
大数据-96 Spark 集群 SparkSQL Scala编写SQL操作SparkSQL的数据源:JSON、CSV、JDBC、Hive
117 0
|
4月前
|
SQL 分布式计算 关系型数据库
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
Hadoop-24 Sqoop迁移 MySQL到Hive 与 Hive到MySQL SQL生成数据 HDFS集群 Sqoop import jdbc ETL MapReduce
171 0
|
6月前
|
SQL 监控 安全
SQL Server的安全注意事项
将上述注意事项纳入日常的数据库管理中,有助于确保SQL Server数据库的安全稳定运行。除了遵循这些最佳实践外,定期进行安全审计也是确保环境持续安全的关键。
107 7
|
6月前
|
SQL 存储 分布式计算
插入Hive表数据SQL
【8月更文挑战第10天】
|
6月前
|
SQL 物联网 数据处理
"颠覆传统,Hive SQL与Flink激情碰撞!解锁流批一体数据处理新纪元,让数据决策力瞬间爆表,你准备好了吗?"
【8月更文挑战第9天】数据时代,实时性和准确性至关重要。传统上,批处理与流处理各司其职,但Apache Flink打破了这一界限,尤其Flink与Hive SQL的结合,开创了流批一体的数据处理新时代。这不仅简化了数据处理流程,还极大提升了效率和灵活性。例如,通过Flink SQL,可以轻松实现流数据与批数据的融合分析,无需在两者间切换。这种融合不仅降低了技术门槛,还为企业提供了更强大的数据支持,无论是在金融、电商还是物联网领域,都将发挥巨大作用。
85 6
|
7月前
|
SQL 分布式计算 关系型数据库
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
Hadoop-12-Hive 基本介绍 下载安装配置 MariaDB安装 3台云服务Hadoop集群 架构图 对比SQL HQL
104 2

热门文章

最新文章