数分实习踩坑笔记:Hive SQL

数分实习中踩过的坑

记录一下数分实习中踩过的坑,好记性不如烂笔头,更何况我记性差到不能行,离职后能带走的也就只有自己的笔记经验和感受。

Hive SQL篇

  • SQL执行顺序

    1. from:作from子句前两个表的笛卡尔积
    2. on:应用on筛选器,筛选出满足on逻辑表达式的行
    3. join:根据join的条件选择是上一步的行还是外部行
    4. where:应用where筛选器
    5. group by:开始分组
    6. having:对groupby 生成的虚拟表应用having条件
    7. select:想要的字段列
    8. distinct:删除掉重复的行
    9. order by:根据条件进行排序
  • union 和 union all 的区别
    1. union 对两个结果集进行并集操作,不包括重复行;且对结果排序。
    2. union all 对两个结果集进行并集操作,包括重复行;不对结果排序。

  • 去掉string中部分字符
    1. substring( 字段名, 起始位置,截取长度)
    注:截取长度可省略
    2. regexp_replace( 字段名, 被替换字符,替换字符)

  • count一定要distinct否则计数无意义 (当然也可以group by啦)
    关于两者性能之间的差别:
    1. distinct 空间换时间,当数据集中时效率高,离散时效率低。
    2. group by 时间换空间,当数据集中时效率低,离散时效率高。

  • 解析json字段
    get_json_object( 字段名,$表示json变量标识然后用 . 或 [] 读取对象或数组 )
    第二个参数具体要看要解析的json的结构是什么样的,然后再拆。
    我会用网上json解析(eg:菜鸟json在线解析)看清结构再拆。

  • 跑数前检查分区
    避免数还没产出就跑,区分清楚全量表和增量表

  • date_sub() date_add()很好用
    方便限定日期和分区统一一起改日期,第一个参数:日期,第二个参数:天数。

  • 窗口函数 很重要:
    <窗口函数> over (partition by <用于分组的列名>
    order by <用于排序的列名>)<

### 回答1: 在生产环境中使用Hive on Spark时,可能会遇到连接超时的问题。这可能是由于网络延迟、资源不足或配置错误等原因引起的。为了解决这个问题,可以尝试以下几个步骤: 1. 检查网络连接是否正常,确保网络延迟不是导致连接超时的原因。 2. 检查集群资源是否充足,如果资源不足可能会导致连接超时。 3. 检查Hive on Spark的配置是否正确,特别是与Spark相关的配置,如spark.executor.memory、spark.driver.memory等。 4. 尝试增加连接超时时间,可以通过设置hive.server2.long.polling.timeout属性来实现。 5. 如果以上步骤都无法解决问题,可以尝试升级Hive on Spark版本或者联系Hive on Spark的支持团队寻求帮助。 ### 回答2: 最近在实际工作中遇到了一个生产环境的问题,即hive on spark连接hive时出现了connection timeout的错误。具体的错误信息是Failed to execute spark task, caused by org.apache.hive.service.cli.HiveSQLException:Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.spark.SparkTask。经过排查,我们最终找到了解决方法。 首先,我们查看hive on spark的运行环境,发现问题出在了spark executor的内存配置上。由于我们的hive on spark需要在大数据量的情况下进行数据处理,而我们的spark executor的内存配置过小,导致了程序执行时卡顿或者超时的情况。 其次,我们对比了生产环境和测试环境的配置,发现测试环境的spark executor内存配置远远大于生产环境的内存配置,因此我们决定适当调整生产环境的内存配置,使其与测试环境的配置相近。 最后,我们重启了hive on spark的服务,并重新运行任务,发现问题已经解决了。经过排查,我们认为这个问题主要是由于内存配置过小导致的,而调整内存配置可以有效地解决这个问题。 总之,这个问题是我们在实际生产环境中遇到的一个常见问题,需要结合具体情况进行有效的排查和解决。我们需要关注系统运行环境的配置情况,适时调整系统参数,确保系统可以稳定地运行。同时,我们也需要注意日常工作中的数据处理任务,优化处理任务的算法和代码,减少系统资源消耗,提高系统的运行效率。 ### 回答3: 在使用Hive on Spark时,会经常遇到Connection Timeout的问题。这个问题通常是由于Spark的GC(垃圾回收)所导致的。因为默认情况下,Spark的垃圾回收器会频繁地进行垃圾回收,从而导致连接超时问题。 解决这个问题的方法有几种: 1. 增加Hive on Spark的硬件资源 如果系统的硬件资源不足,例如CPU、内存等,可能会导致连接超时的问题。因此,建议增加硬件资源,以提高Hive on Spark的性能和稳定性。 2. 调整Spark的GC参数 可以通过调整Spark的GC参数,来减少垃圾回收的频率,从而避免连接超时的问题。例如,可以将Spark的GC内存阈值和GC线程数进行调整。 3. 提高网络性能 Hive on Spark的连接超时问题可能还与网络性能有关。如果网络速度较慢或带宽不足,可能会导致连接超时的问题。可以通过提高网络带宽或网络优化来解决这个问题。 4. 升级Hive on Spark版本 如果以上三种方法都无法解决连接超时的问题,可以考虑升级Hive on Spark到最新版本。最新版本通常会修复已知的问题,并提供更好的性能和稳定性。 总之,要解决Hive on Spark的连接超时问题,需要多方面考虑,包括硬件资源、Spark的GC参数、网络性能和软件版本等。只有在综合考虑多个因素的情况下,才能够有效地解决这个问题,从而提高Hive on Spark的稳定性和性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值