hive create table语句与serdeproperties一起抛出错误

f0brbegy  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(548)

我正在进行从hdp到aws emr的迁移项目。作为工作的一部分,我们正在使用 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 gives error的配置单元,并查看了为该问题留下的注解。我们决定把那个 WITH SERDEPROPERTIES 分开,再跑一遍。这次它没有抛出任何错误。然后我们做了一个 ALTER TABLE test_table SET SERDEPROPERTIES('serialization.encoding'='ISO-8859-1') ,有效。出于好奇,我们做了一个 show create table 在电子病历上得到这个:

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上无缝运行?还有,为什么会发生错误?任何见解都将不胜感激。

b1payxdu

b1payxdu1#

请转义查询中的任何特殊字符。像“|”和“|”

相关问题