You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kylin.apache.org by 奥威软件 <35...@qq.com> on 2019/03/05 07:25:55 UTC

hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Hi,
hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
kylin2.6.0 hadoop3
错误如下:


NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
是kylin生成的语句缺少了 单反引号 `。


手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
正常的sql语句如下:
CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
(
`ICSTOCKBILL_1W_C_mdID` int
,`ICSTOCKBILL_1W_C_khID` int
,`ICSTOCKBILL_1W_C_sj` timestamp
,`ICSTOCKBILL_1W_C_spID` int
,`GOODS_C_spID` int
,`GOODS_C_plID` int
,`DEPARTMENT_C_mdID` int
,`DEPARTMENT_C_qyuID` int
,`GOODSCLASS_C_plID` int
,`DEPARTMENTCLASS_C_quyID` int
,`ICSTOCKBILL_1W_C_shul` int
,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
)
STORED AS SEQUENCEFILE;



 请帮忙看下怎么解决,谢谢!


 Best regards
-- 
Regards!
Aron Tao

Re: 回复: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Posted by Xiaoxiang Yu <xi...@kyligence.io>.
Hi, 
Thanks for your reporting, it does has such issue. If you have fix this, please submit your PR.

----------------
Best wishes,
Xiaoxiang Yu 
 

On 2019/3/6, 14:18, "奥威软件" <35...@qq.com> wrote:

    The datasource is hive as described in the title
    
    
    
    
    ------------------ 原始邮件 ------------------
    发件人: "PENG Zhengshuai"<co...@hotmail.com>;
    发送时间: 2019年3月6日(星期三) 下午2:07
    收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;
    
    主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
    
    
    
    Hi,
    
    Let’s make sure the below things:
    1. The datasource is hive or RDBMS?
    2. If use RDBMS as datasource, which RDBMS? Mysql or Mssql
    3. Do you have change some configurations like disable quote in sql?
    
    BR
    PENG Zhengshuai
    
    > On Mar 6, 2019, at 1:28 PM, 奥威软件 <35...@qq.com> wrote:
    > 
    > kylin生成的sql语句(在hive):
    > CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
    > (
    > ICSTOCKBILL_1W_C_门店ID int
    > ,ICSTOCKBILL_1W_C_客户ID int
    > ,ICSTOCKBILL_1W_C_时间 timestamp
    > ,ICSTOCKBILL_1W_C_商品ID int
    > ,GOODS_C_商品ID int
    > ,GOODS_C_品类ID int
    > ,DEPARTMENT_C_门店ID int
    > ,DEPARTMENT_C_区域ID int
    > ,GOODSCLASS_C_品类ID int
    > ,DEPARTMENTCLASS_C_区域ID int
    > ,ICSTOCKBILL_1W_C_数量 int
    > ,ICSTOCKBILL_1W_C_进货价 decimal(20,3)
    > ,ICSTOCKBILL_1W_C_总售价 decimal(20,3)
    > ,ICSTOCKBILL_1W_C_售价 decimal(20,3)
    > ,ICSTOCKBILL_1W_C_总成本 decimal(20,3)
    > )
    > STORED AS SEQUENCEFILE
    > 
    > LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
    > 
    > 
    > 
    > 错误信息为:FAILED: ParseException line 3:19 cannot recognize input near 'ID' 'int' ',' in column type
    > 
    > 
    > 
    > 
    > 能正常使用的hive sql语句(区别是表名都添加了但反引号 ` ):
    > CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
    > (
    > `ICSTOCKBILL_1W_C_门店ID` int
    > ,`ICSTOCKBILL_1W_C_客户ID` int
    > ,`ICSTOCKBILL_1W_C_时间` timestamp
    > ,`ICSTOCKBILL_1W_C_商品ID` int
    > ,`GOODS_C_商品ID` int
    > ,`GOODS_C_品类ID` int
    > ,`DEPARTMENT_C_门店ID` int
    > ,`DEPARTMENT_C_区域ID` int
    > ,`GOODSCLASS_C_品类ID` int
    > ,`DEPARTMENTCLASS_C_区域ID` int
    > ,`ICSTOCKBILL_1W_C_数量` int
    > ,`ICSTOCKBILL_1W_C_进货价` decimal(20,3)
    > ,`ICSTOCKBILL_1W_C_总售价` decimal(20,3)
    > ,`ICSTOCKBILL_1W_C_售价` decimal(20,3)
    > ,`ICSTOCKBILL_1W_C_总成本` decimal(20,3)
    > )
    > STORED AS SEQUENCEFILE
    > 
    > LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
    > 
    > 
    > 
    > 
    > 
    > 
    > 
    > ------------------ 原始邮件 ------------------
    > 发件人: "PENG Zhengshuai"<co...@hotmail.com>;
    > 发送时间: 2019年3月6日(星期三) 中午1:09
    > 收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;
    > 
    > 主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
    > 
    > 
    > 
    > Hi,
    > 
    > Can you show the Hive Sql in Kylin.log when cube building?
    > 
    > BR
    > PENG Zhengshuai
    > 
    >> On Mar 5, 2019, at 3:25 PM, 奥威软件 <35...@qq.com> wrote:
    >> 
    >> Hi,
    >> hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
    >> kylin2.6.0 hadoop3
    >> 错误如下:
    >> 
    >> 
    >> NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
    >> 是kylin生成的语句缺少了 单反引号 `。
    >> 
    >> 
    >> 手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
    >> 正常的sql语句如下:
    >> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
    >> (
    >> `ICSTOCKBILL_1W_C_mdID` int
    >> ,`ICSTOCKBILL_1W_C_khID` int
    >> ,`ICSTOCKBILL_1W_C_sj` timestamp
    >> ,`ICSTOCKBILL_1W_C_spID` int
    >> ,`GOODS_C_spID` int
    >> ,`GOODS_C_plID` int
    >> ,`DEPARTMENT_C_mdID` int
    >> ,`DEPARTMENT_C_qyuID` int
    >> ,`GOODSCLASS_C_plID` int
    >> ,`DEPARTMENTCLASS_C_quyID` int
    >> ,`ICSTOCKBILL_1W_C_shul` int
    >> ,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
    >> ,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
    >> ,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
    >> ,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
    >> )
    >> STORED AS SEQUENCEFILE;
    >> 
    >> 
    >> 
    >> 请帮忙看下怎么解决,谢谢!
    >> 
    >> 
    >> Best regards
    >> -- 
    >> Regards!
    >> Aron Tao


回复: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Posted by 奥威软件 <35...@qq.com>.
The datasource is hive as described in the title




------------------ 原始邮件 ------------------
发件人: "PENG Zhengshuai"<co...@hotmail.com>;
发送时间: 2019年3月6日(星期三) 下午2:07
收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;

主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错



Hi,

Let’s make sure the below things:
1. The datasource is hive or RDBMS?
2. If use RDBMS as datasource, which RDBMS? Mysql or Mssql
3. Do you have change some configurations like disable quote in sql?

BR
PENG Zhengshuai

> On Mar 6, 2019, at 1:28 PM, 奥威软件 <35...@qq.com> wrote:
> 
> kylin生成的sql语句(在hive):
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> ICSTOCKBILL_1W_C_门店ID int
> ,ICSTOCKBILL_1W_C_客户ID int
> ,ICSTOCKBILL_1W_C_时间 timestamp
> ,ICSTOCKBILL_1W_C_商品ID int
> ,GOODS_C_商品ID int
> ,GOODS_C_品类ID int
> ,DEPARTMENT_C_门店ID int
> ,DEPARTMENT_C_区域ID int
> ,GOODSCLASS_C_品类ID int
> ,DEPARTMENTCLASS_C_区域ID int
> ,ICSTOCKBILL_1W_C_数量 int
> ,ICSTOCKBILL_1W_C_进货价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_总售价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_售价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_总成本 decimal(20,3)
> )
> STORED AS SEQUENCEFILE
> 
> LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 
> 
> 
> 错误信息为:FAILED: ParseException line 3:19 cannot recognize input near 'ID' 'int' ',' in column type
> 
> 
> 
> 
> 能正常使用的hive sql语句(区别是表名都添加了但反引号 ` ):
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> `ICSTOCKBILL_1W_C_门店ID` int
> ,`ICSTOCKBILL_1W_C_客户ID` int
> ,`ICSTOCKBILL_1W_C_时间` timestamp
> ,`ICSTOCKBILL_1W_C_商品ID` int
> ,`GOODS_C_商品ID` int
> ,`GOODS_C_品类ID` int
> ,`DEPARTMENT_C_门店ID` int
> ,`DEPARTMENT_C_区域ID` int
> ,`GOODSCLASS_C_品类ID` int
> ,`DEPARTMENTCLASS_C_区域ID` int
> ,`ICSTOCKBILL_1W_C_数量` int
> ,`ICSTOCKBILL_1W_C_进货价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_总售价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_售价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_总成本` decimal(20,3)
> )
> STORED AS SEQUENCEFILE
> 
> LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 
> 
> 
> 
> 
> 
> 
> ------------------ 原始邮件 ------------------
> 发件人: "PENG Zhengshuai"<co...@hotmail.com>;
> 发送时间: 2019年3月6日(星期三) 中午1:09
> 收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;
> 
> 主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
> 
> 
> 
> Hi,
> 
> Can you show the Hive Sql in Kylin.log when cube building?
> 
> BR
> PENG Zhengshuai
> 
>> On Mar 5, 2019, at 3:25 PM, 奥威软件 <35...@qq.com> wrote:
>> 
>> Hi,
>> hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
>> kylin2.6.0 hadoop3
>> 错误如下:
>> 
>> 
>> NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
>> 是kylin生成的语句缺少了 单反引号 `。
>> 
>> 
>> 手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
>> 正常的sql语句如下:
>> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
>> (
>> `ICSTOCKBILL_1W_C_mdID` int
>> ,`ICSTOCKBILL_1W_C_khID` int
>> ,`ICSTOCKBILL_1W_C_sj` timestamp
>> ,`ICSTOCKBILL_1W_C_spID` int
>> ,`GOODS_C_spID` int
>> ,`GOODS_C_plID` int
>> ,`DEPARTMENT_C_mdID` int
>> ,`DEPARTMENT_C_qyuID` int
>> ,`GOODSCLASS_C_plID` int
>> ,`DEPARTMENTCLASS_C_quyID` int
>> ,`ICSTOCKBILL_1W_C_shul` int
>> ,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
>> )
>> STORED AS SEQUENCEFILE;
>> 
>> 
>> 
>> 请帮忙看下怎么解决,谢谢!
>> 
>> 
>> Best regards
>> -- 
>> Regards!
>> Aron Tao

Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Posted by PENG Zhengshuai <co...@hotmail.com>.
Hi,

Let’s make sure the below things:
1. The datasource is hive or RDBMS?
2. If use RDBMS as datasource, which RDBMS? Mysql or Mssql
3. Do you have change some configurations like disable quote in sql?

BR
PENG Zhengshuai

> On Mar 6, 2019, at 1:28 PM, 奥威软件 <35...@qq.com> wrote:
> 
> kylin生成的sql语句(在hive):
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> ICSTOCKBILL_1W_C_门店ID int
> ,ICSTOCKBILL_1W_C_客户ID int
> ,ICSTOCKBILL_1W_C_时间 timestamp
> ,ICSTOCKBILL_1W_C_商品ID int
> ,GOODS_C_商品ID int
> ,GOODS_C_品类ID int
> ,DEPARTMENT_C_门店ID int
> ,DEPARTMENT_C_区域ID int
> ,GOODSCLASS_C_品类ID int
> ,DEPARTMENTCLASS_C_区域ID int
> ,ICSTOCKBILL_1W_C_数量 int
> ,ICSTOCKBILL_1W_C_进货价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_总售价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_售价 decimal(20,3)
> ,ICSTOCKBILL_1W_C_总成本 decimal(20,3)
> )
> STORED AS SEQUENCEFILE
> 
> LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 
> 
> 
> 错误信息为:FAILED: ParseException line 3:19 cannot recognize input near 'ID' 'int' ',' in column type
> 
> 
> 
> 
> 能正常使用的hive sql语句(区别是表名都添加了但反引号 ` ):
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> `ICSTOCKBILL_1W_C_门店ID` int
> ,`ICSTOCKBILL_1W_C_客户ID` int
> ,`ICSTOCKBILL_1W_C_时间` timestamp
> ,`ICSTOCKBILL_1W_C_商品ID` int
> ,`GOODS_C_商品ID` int
> ,`GOODS_C_品类ID` int
> ,`DEPARTMENT_C_门店ID` int
> ,`DEPARTMENT_C_区域ID` int
> ,`GOODSCLASS_C_品类ID` int
> ,`DEPARTMENTCLASS_C_区域ID` int
> ,`ICSTOCKBILL_1W_C_数量` int
> ,`ICSTOCKBILL_1W_C_进货价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_总售价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_售价` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_总成本` decimal(20,3)
> )
> STORED AS SEQUENCEFILE
> 
> LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 
> 
> 
> 
> 
> 
> 
> ------------------ 原始邮件 ------------------
> 发件人: "PENG Zhengshuai"<co...@hotmail.com>;
> 发送时间: 2019年3月6日(星期三) 中午1:09
> 收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;
> 
> 主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
> 
> 
> 
> Hi,
> 
> Can you show the Hive Sql in Kylin.log when cube building?
> 
> BR
> PENG Zhengshuai
> 
>> On Mar 5, 2019, at 3:25 PM, 奥威软件 <35...@qq.com> wrote:
>> 
>> Hi,
>> hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
>> kylin2.6.0 hadoop3
>> 错误如下:
>> 
>> 
>> NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
>> 是kylin生成的语句缺少了 单反引号 `。
>> 
>> 
>> 手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
>> 正常的sql语句如下:
>> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
>> (
>> `ICSTOCKBILL_1W_C_mdID` int
>> ,`ICSTOCKBILL_1W_C_khID` int
>> ,`ICSTOCKBILL_1W_C_sj` timestamp
>> ,`ICSTOCKBILL_1W_C_spID` int
>> ,`GOODS_C_spID` int
>> ,`GOODS_C_plID` int
>> ,`DEPARTMENT_C_mdID` int
>> ,`DEPARTMENT_C_qyuID` int
>> ,`GOODSCLASS_C_plID` int
>> ,`DEPARTMENTCLASS_C_quyID` int
>> ,`ICSTOCKBILL_1W_C_shul` int
>> ,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
>> ,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
>> )
>> STORED AS SEQUENCEFILE;
>> 
>> 
>> 
>> 请帮忙看下怎么解决,谢谢!
>> 
>> 
>> Best regards
>> -- 
>> Regards!
>> Aron Tao


回复: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Posted by 奥威软件 <35...@qq.com>.
kylin生成的sql语句(在hive):
CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
(
ICSTOCKBILL_1W_C_门店ID int
,ICSTOCKBILL_1W_C_客户ID int
,ICSTOCKBILL_1W_C_时间 timestamp
,ICSTOCKBILL_1W_C_商品ID int
,GOODS_C_商品ID int
,GOODS_C_品类ID int
,DEPARTMENT_C_门店ID int
,DEPARTMENT_C_区域ID int
,GOODSCLASS_C_品类ID int
,DEPARTMENTCLASS_C_区域ID int
,ICSTOCKBILL_1W_C_数量 int
,ICSTOCKBILL_1W_C_进货价 decimal(20,3)
,ICSTOCKBILL_1W_C_总售价 decimal(20,3)
,ICSTOCKBILL_1W_C_售价 decimal(20,3)
,ICSTOCKBILL_1W_C_总成本 decimal(20,3)
)
STORED AS SEQUENCEFILE

LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';



错误信息为:FAILED: ParseException line 3:19 cannot recognize input near 'ID' 'int' ',' in column type




能正常使用的hive sql语句(区别是表名都添加了但反引号 ` ):
CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
(
`ICSTOCKBILL_1W_C_门店ID` int
,`ICSTOCKBILL_1W_C_客户ID` int
,`ICSTOCKBILL_1W_C_时间` timestamp
,`ICSTOCKBILL_1W_C_商品ID` int
,`GOODS_C_商品ID` int
,`GOODS_C_品类ID` int
,`DEPARTMENT_C_门店ID` int
,`DEPARTMENT_C_区域ID` int
,`GOODSCLASS_C_品类ID` int
,`DEPARTMENTCLASS_C_区域ID` int
,`ICSTOCKBILL_1W_C_数量` int
,`ICSTOCKBILL_1W_C_进货价` decimal(20,3)
,`ICSTOCKBILL_1W_C_总售价` decimal(20,3)
,`ICSTOCKBILL_1W_C_售价` decimal(20,3)
,`ICSTOCKBILL_1W_C_总成本` decimal(20,3)
)
STORED AS SEQUENCEFILE

LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';







------------------ 原始邮件 ------------------
发件人: "PENG Zhengshuai"<co...@hotmail.com>;
发送时间: 2019年3月6日(星期三) 中午1:09
收件人: "dev@kylin.apache.org"<de...@kylin.apache.org>;

主题: Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错



Hi,

Can you show the Hive Sql in Kylin.log when cube building?

BR
PENG Zhengshuai

> On Mar 5, 2019, at 3:25 PM, 奥威软件 <35...@qq.com> wrote:
> 
> Hi,
> hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
> kylin2.6.0 hadoop3
> 错误如下:
> 
> 
> NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 是kylin生成的语句缺少了 单反引号 `。
> 
> 
> 手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
> 正常的sql语句如下:
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> `ICSTOCKBILL_1W_C_mdID` int
> ,`ICSTOCKBILL_1W_C_khID` int
> ,`ICSTOCKBILL_1W_C_sj` timestamp
> ,`ICSTOCKBILL_1W_C_spID` int
> ,`GOODS_C_spID` int
> ,`GOODS_C_plID` int
> ,`DEPARTMENT_C_mdID` int
> ,`DEPARTMENT_C_qyuID` int
> ,`GOODSCLASS_C_plID` int
> ,`DEPARTMENTCLASS_C_quyID` int
> ,`ICSTOCKBILL_1W_C_shul` int
> ,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
> )
> STORED AS SEQUENCEFILE;
> 
> 
> 
> 请帮忙看下怎么解决,谢谢!
> 
> 
> Best regards
> -- 
> Regards!
> Aron Tao

Re: hive表数据源: 当hive的table中某列名含有中文,build cube 会报错

Posted by PENG Zhengshuai <co...@hotmail.com>.
Hi,

Can you show the Hive Sql in Kylin.log when cube building?

BR
PENG Zhengshuai

> On Mar 5, 2019, at 3:25 PM, 奥威软件 <35...@qq.com> wrote:
> 
> Hi,
> hive表数据源: 当hive的table中某列名含有中文,build cube 会报错
> kylin2.6.0 hadoop3
> 错误如下:
> 
> 
> NoViableAltException(24@[]) 	at org.apache.hadoop.hive.ql.parse.HiveParser.type(HiveParser.java:36813) 	at org.apache.hadoop.hive.ql.parse.HiveParser.colType(HiveParser.java:36595) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeConstraint(HiveParser.java:34322) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraint(HiveParser.java:34075) 	at org.apache.hadoop.hive.ql.parse.HiveParser.columnNameTypeOrConstraintList(HiveParser.java:29819) 	at org.apache.hadoop.hive.ql.parse.HiveParser.createTableStatement(HiveParser.java:6662) 	at org.apache.hadoop.hive.ql.parse.HiveParser.ddlStatement(HiveParser.java:4295) 	at org.apache.hadoop.hive.ql.parse.HiveParser.execStatement(HiveParser.java:2494) 	at org.apache.hadoop.hive.ql.parse.HiveParser.statement(HiveParser.java:1420) 	at org.apache.hadoop.hive.ql.parse.ParseDriver.parse(ParseDriver.java:220) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:74) 	at org.apache.hadoop.hive.ql.parse.ParseUtils.parse(ParseUtils.java:67) 	at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:616) 	at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1826) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1773) 	at org.apache.hadoop.hive.ql.Driver.compileAndRespond(Driver.java:1768) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.compileAndRespond(ReExecDriver.java:126) 	at org.apache.hadoop.hive.ql.reexec.ReExecDriver.run(ReExecDriver.java:214) 	at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:239) 	at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:188) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:402) 	at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:335) 	at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:787) 	at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:759) 	at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 	at java.lang.reflect.Method.invoke(Method.java:498) 	at org.apache.hadoop.util.RunJar.run(RunJar.java:318) 	at org.apache.hadoop.util.RunJar.main(RunJar.java:232) FAILED: ParseException line 4:19 cannot recognize input near 'ID' 'int' ',' in column type The command is:  hive -e "USE default; DROP TABLE IF EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b; CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b ( ICSTOCKBILL_1W_C_门店ID int ,ICSTOCKBILL_1W_C_客户ID int ,ICSTOCKBILL_1W_C_时间 timestamp ,ICSTOCKBILL_1W_C_商品ID int ,GOODS_C_商品ID int ,GOODS_C_品类ID int ,DEPARTMENT_C_门店ID int ,DEPARTMENT_C_区域ID int ,GOODSCLASS_C_品类ID int ,DEPARTMENTCLASS_C_区域ID int ,ICSTOCKBILL_1W_C_数量 int ,ICSTOCKBILL_1W_C_进货价 decimal(20,3) ,ICSTOCKBILL_1W_C_总售价 decimal(20,3) ,ICSTOCKBILL_1W_C_售价 decimal(20,3) ,ICSTOCKBILL_1W_C_总成本 decimal(20,3) ) STORED AS SEQUENCEFILE LOCATION 'hdfs://kylincluster/kylin/kylin_metadata/kylin-6613a735-0452-1bd5-aa22-e63013366c2a/kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b';
> 是kylin生成的语句缺少了 单反引号 `。
> 
> 
> 手动给每个表名添加单反引号 `,然后执行上述sql命令,是正常的。
> 正常的sql语句如下:
> CREATE EXTERNAL TABLE IF NOT EXISTS kylin_intermediate_ch_cube_5cc15555_a6f3_f9f8_b90a_3e52abe0760b
> (
> `ICSTOCKBILL_1W_C_mdID` int
> ,`ICSTOCKBILL_1W_C_khID` int
> ,`ICSTOCKBILL_1W_C_sj` timestamp
> ,`ICSTOCKBILL_1W_C_spID` int
> ,`GOODS_C_spID` int
> ,`GOODS_C_plID` int
> ,`DEPARTMENT_C_mdID` int
> ,`DEPARTMENT_C_qyuID` int
> ,`GOODSCLASS_C_plID` int
> ,`DEPARTMENTCLASS_C_quyID` int
> ,`ICSTOCKBILL_1W_C_shul` int
> ,`ICSTOCKBILL_1W_C_jhj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_zsj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_sj` decimal(20,3)
> ,`ICSTOCKBILL_1W_C_zcb` decimal(20,3)
> )
> STORED AS SEQUENCEFILE;
> 
> 
> 
> 请帮忙看下怎么解决,谢谢!
> 
> 
> Best regards
> -- 
> Regards!
> Aron Tao