我正在进行从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上无缝运行?还有,为什么会发生错误?任何见解都将不胜感激。
1条答案
按热度按时间b1payxdu1#
请转义查询中的任何特殊字符。像“|”和“|”