Gadaite 2022-03-27 14:34 采纳率: 100%
浏览 135
已结题

为什么SparkSQL,dbeaver,hive命令行使用相同的语句操作hive表的结果不一样

问题遇到的现象和发生背景

问题现象使用pyspark,dbeaver以及hive命令对hive表的数据进行插入和删除的时候,有些方式不一定能够正常执行
hive表为未进行分区的表
删除使用的是筛选内容重写的方式

问题相关代码

情景1:插入数据的时候:
sparkSQL使用语句:

spark.sql("""
    INSERT INTO hive_test_one.djia_table(`date`, `open`, high, low, `close`, volume, adj_close) VALUES('2022-03-27', 0, 0, 0, 0, 0, 0)
""")

dbeaver上使用语句:

INSERT INTO hive_test_one.djia_table
(`date`, `open`, high, low, `close`, volume, adj_close)
VALUES('2022-03-27', 0, 0, 0, 0, 0, 0);

hive命令行使用语句:

INSERT INTO hive_test_one.djia_table(`date`, `open`, high, low, `close`, volume, adj_close) VALUES('2022-03-27', 0, 0, 0, 0, 0, 0);

情景2:删除数据的时候:
sparkSQL使用语句:

spark.sql("""
    spark.sql("""insert overwrite table djia_table select * FROM DJIA_table where Date != '2022-03-27'""")
""")

dbeaver上使用语句:

insert overwrite table djia_table  select * from djia_table WHERE `date` != '2022-03-27';

hive命令行使用语句:

insert overwrite table djia_table  select * from djia_table WHERE `date` != '2022-03-27';
运行结果及报错内容

情景1:dbeaver,hive命令行执行都通过,但是SparkSQL上报错:
SparkSQL报错内容如下:

pyspark.sql.utils.ParseException: "\nmismatched input '`date`' expecting {'(', 'SELECT', 'FROM', 'VALUES', 'TABLE', 'INSERT', 'MAP', 'REDUCE'}(line 3, pos 5)\n\n== SQL ==\n\n    INSERT INTO hive_test_one.djia_table\n    (`date`, `open`, high, low, `close`, volume, adj_close)\n-----^^^\n    VALUES('2022-03-27', 0, 0, 0, 0, 0, 0)\n"

情景2:SparkSQL,dbeaver上执行通过,但是hive命令行报错:
hive命令行报错信息如下:

hive> use hive_test_one;
OK
Time taken: 0.021 seconds
hive> insert overwrite table djia_table select * FROM DJIA_table where date != '2022-03-27';
NoViableAltException(339@[412:1: atomExpression : ( constant | ( intervalExpression )=> intervalExpression | castExpression | extractExpression | floorExpression | caseExpression | whenExpression | ( subQueryExpression )=> ( subQueryExpression ) -> ^( TOK_SUBQUERY_EXPR TOK_SUBQUERY_OP subQueryExpression ) | ( functionName LPAREN )=> function | tableOrColumn | expressionsInParenthesis[true] );])
     ....................................................
FAILED: ParseException line 1:70 cannot recognize input near 'date' '!=' ''2022-03-27'' in expression specification

我的解答思路和尝试过的方法

情景一:将SparkSQL的语句改为如下

spark.sql("""INSERT INTO hive_test_one.djia_table 
VALUES('2022-03-27', 0, 0, 0, 0, 0, 0)
""")

我想要达到的结果
理解为什么不同的方式操作hive表结果不一样

  • 写回答

2条回答 默认 最新

  • DarkAthena ORACLE应用及数据库设计方案咨询师 2022-03-27 14:49
    关注
    1. 把情景一改成这样试试
      spark.sql("""
       INSERT INTO hive_test_one.djia_table(date, open, high, low, close, volume, adj_close) VALUES('2022-03-27', 0, 0, 0, 0, 0, 0)
      """)
      
    2. 尝试不要使用date这种关键词作为字段名

    以上主要是考虑重音符号及sql保留关键词在各sql语法解析中的兼容性问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集