Инструкция Hive CREATE TABLE с SERDEPROPERTIES выдает ошибку - PullRequest
0 голосов
/ 16 ноября 2018

Я нахожусь в процессе перехода от HDP к AWS EMR. В рамках этой работы мы создаем таблицы в EMR Hive, используя операторы CREATE TABLE из HDP, которые мы получаем с помощью команды show create table. Один такой CREATE TABLE DDL выглядит следующим образом:

CREATE TABLE test_table(column_list)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
  LINES TERMINATED BY '\n'
WITH SERDEPROPERTIES (
  'serialization.encoding'='ISO-8859-1')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://path/to/data'

В рамках процесса мы запустили измененный оператор следующим образом:

CREATE TABLE test_table(column_list)
ROW FORMAT DELIMITED
  FIELDS TERMINATED BY '|'
  LINES TERMINATED BY '\n'
WITH SERDEPROPERTIES (
  'serialization.encoding'='ISO-8859-1')
STORED AS TEXTFILE
LOCATION
  's3://path/to/data'

Когда мы запустили это, это не удалось со следующей ошибкой:

Error: Error while compiling statement: FAILED: ParseException line 28:0 missing EOF at 'WITH' near ''org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'' (state=42000,code=40000)

Посмотрев его в StackOverflow, мы получили этот улей с использованием serdeproperties, который выдает ошибку , и просмотрели комментарии, оставленные для вопроса. Мы решили удалить часть WITH SERDEPROPERTIES и запустили ее снова. На этот раз он не выдал никакой ошибки. Затем мы сделали ALTER TABLE test_table SET SERDEPROPERTIES('serialization.encoding'='ISO-8859-1'), который сработал. Любопытно, мы сделали show create table на EMR и получили это:

CREATE TABLE test_table(column_list)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe'
WITH SERDEPROPERTIES (
  'field.delim'='|',
  'line.delim'='\n',
  'serialization.encoding'='ISO-8859-1',
  'serialization.format'='|')
STORED AS INPUTFORMAT
  'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  's3://path/to/data'

Как видно, это немного отличается от того, что показывает нам HDP. Каков был бы хороший, минимально инвазивный способ заставить сценарий из HDP беспрепятственно работать на EMR? Кроме того, почему возникает ошибка? Любое понимание будет с благодарностью.

1 Ответ

0 голосов
/ 22 июля 2019

Пожалуйста, избегайте любых специальных символов в запросе.как '|'как '\ |'

...