복붙노트

[HADOOP] 스파이크 HiveContext에서 하이브 병합 명령이 작동하지 않습니다.

HADOOP

스파이크 HiveContext에서 하이브 병합 명령이 작동하지 않습니다.

1.6.3 spark 버전의 Spark HiveContext를 사용하여 하이브 병합 명령을 실행 중입니다. 그러나 아래 오류와 함께 실패합니다.

2017-09-11 18:30:33 Driver [INFO ] ParseDriver - Parse Completed
2017-09-11 18:30:34 Driver [INFO ] ParseDriver - Parsing command: MERGE INTO emp_with_orc AS T USING SOURCE_TABLE AS S 
ON T.id = S.id 
WHEN MATCHED AND (S.operation = 1) THEN UPDATE SET a = S.a,b = S.b 
WHEN MATCHED AND (S.operation = 2) THEN DELETE 
WHEN NOT MATCHED THEN INSERT VALUES (S.id, S.a, S.b)
2017-09-11 18:30:34 Driver [ERROR] HiveWriter - Error while executing the merge query.
org.apache.spark.sql.AnalysisException: cannot recognize input near 'MERGE' 'INTO' 'emp_with_orc'; line 1 pos 0
    at org.apache.spark.sql.hive.HiveQl$.createPlan(HiveQl.scala:318)
    at org.apache.spark.sql.hive.ExtendedHiveQlParser$$anonfun$hiveQl$1.apply(ExtendedHiveQlParser.scala:41)
    at org.apache.spark.sql.hive.ExtendedHiveQlParser$$anonfun$hiveQl$1.apply(ExtendedHiveQlParser.scala:40)
    at scala.util.parsing.combinator.Parsers$Success.map(Parsers.scala:136)
    at scala.util.parsing.combinator.Parsers$Success.map(Parsers.scala:135)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$map$1.apply(Parsers.scala:242)
    at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1$$anonfun$apply$2.apply(Parsers.scala:254)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1$$anonfun$apply$2.apply(Parsers.scala:254)
    at scala.util.parsing.combinator.Parsers$Failure.append(Parsers.scala:202)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1.apply(Parsers.scala:254)
    at scala.util.parsing.combinator.Parsers$Parser$$anonfun$append$1.apply(Parsers.scala:254)
    at scala.util.parsing.combinator.Parsers$$anon$3.apply(Parsers.scala:222)

나는 ACID 트랜잭션 병합 명령이 지원되는지 또는 스파크의 HiveContext에 있는지 확실하지 않습니다.

이것에 대한 도움을 주시면 감사하겠습니다.

해결법

  1. ==============================

    1.MERGE 연산을 사용하려면 MERGE가 현재의 Spark SQL에서 지원되지 않으므로 HIVE JDBC를 통해 실행해야합니다.

    MERGE 연산을 사용하려면 MERGE가 현재의 Spark SQL에서 지원되지 않으므로 HIVE JDBC를 통해 실행해야합니다.

  2. ==============================

    2.Spark는 UPDATES 또는 DELETES를 지원하지 않으므로 예외가 예상되는 동작입니다.

    Spark는 UPDATES 또는 DELETES를 지원하지 않으므로 예외가 예상되는 동작입니다.

  3. from https://stackoverflow.com/questions/46156660/hive-merge-command-is-not-working-in-spark-hivecontext by cc-by-sa and MIT license