问题遇到的现象和发生背景
问题现象使用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表结果不一样