Impala实践之十三:Impala建表时的关键字

前言

由于经常要帮数据分析抽表,因此自己写了个自动生成impala和sqoop脚本的工具,结果今天发现一个库中17张表,只成功导入了12张。仔细检查才发现是是由于impala建表时候字段使用了location关键字的原因。

分析

建表语句

impala-shell -i ip:25004 -q "
DROP TABLE IF EXISTS database.table;
CREATE EXTERNAL TABLE database.table(
id string,
location string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001‘
STORED AS PARQUET
LOCATION ‘/path‘;
"

错误

ERROR: AnalysisException: Syntax error in line 3:
location string
^
Encountered: LOCATION
Expected: IDENTIFIER

CAUSED BY: Exception: Syntax error
Could not execute command: create EXTERNAL TABLE dante_test.testtable1(
id string,
location string
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\001‘
STORED AS PARQUET
LOCATION ‘/path‘

经过几次试验,发现不管加什么符号(或者 `),都会报错。

暂时的猜测是location占用了impala的关键字,只要遇到location就会认为是读到了设置hdfs路径的位置,因此就会出现语法错误。由于需求要的比较急,没有细究,暂时给表中的字段改了个名字。



2016-06-27 22:32:00 rljp

时间: 2024-10-28 22:01:02

Impala实践之十三:Impala建表时的关键字的相关文章

Mysql 建表时,日期时间类型选择

mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  DATETIME  8 bytes  YYYY-MM-DD HH:MM:SS  1000-01-01 00:00:00 9999-12-31 23:59:59 0000-00-00 00:00:00  TIMESTAMP  4 bytes  YYYY-MM-DD HH:MM:SS  197001010

beego orm自动建表时字段default值不设置的解决办法

在使用beego的orm建表时,我的模型是这样建立的 type Test struct { Id int64 Name string Sex int64 `orm:"default(1)"` Age int64 Content string `orm:"default('')"` } content字段设置默认为空,Sex字段设置默认为1,那么生成的表确并没有default,这不科学,于是我翻了下源码,发现设置default的这段被注释了,位置在 github.co

mysql workbench建表时PK,NN,UQ,BIN,UN,ZF,AI

[intrinsic column flags] (基本字段类型标识) - PK: primary key (column is part of a pk) 主键 - NN: not null (column is nullable) 非空 - UQ: unique (column is part of a unique key) 唯一 - AI: auto increment (the column is auto incremented when rows are inserted) 自增

MySQL建表时列名同保留字重复问题解决办法

建表时遇到遇到属性名同MySQL的保留字相同导致不能建表的问题,如下SQL语句: CREATE TABLE TBL_ACCOUNT_FROZEN_RECORD ( ID BIGINT NOT NULL AUTO_INCREMENT, TRADE_FLOW_ID VARCHAR(60) NOT NULL, ACCOUNT_NO VARCHAR(32) NOT NULL, INITIATOR VARCHAR(16) NOT NULL, OPERATE_TYPE VARCHAR(32) NOT NUL

mysql workbench 建表时 PK,NN,UQ,BIN,UN,ZF,AI解释

mysql workbench 建表时 - PK: primary key (column is part of a pk) 主键 - NN: not null (column is nullable) 非空 - UQ: unique (column is part of a unique key) 唯一 - AI: auto increment (the column is auto incremented when rows are inserted) 自增 - BIN: binary (i

初触hibernate01--MYSQL建表时type=InnoDB和Engine=InnoDB注意点

第一次运行程序时,将Hibernte中的hibernate.hbm2ddl.auto设置成create(或者是update),让Hibernate帮助自动建表,但不成功,报了如下信息: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'type=InnoDB' at line 1

建表时和建表后的级联更新和删除

--对表建立级联更新或级联删除方法--1.在建表时直接定义级联更新和级联删除create table pktable(ID int primary key,SCD int, SName varchar(20)) create table fktable(ID int primary key,SCD int references pktable(ID) on delete cascade on update cascade, Age tinyint) insert into pktable val

数据库建表时出现的org.hibernate.HibernateException: The database returned no natively generated identity value的错误

错误原因: 我设置的Id的类型是:自动增长型(如下),但是我在数据库中设置的Id确是:int类型.所以类型不匹配.导致返回: org.hibernate.HibernateException:数据库返回的没有本地生成的标识值的错误. @Id @GeneratedValue public int getId() { return id; } public void setId(int id) { this.id = id; } 改正方法: 在cmd中操作数据库输入: ALTER TABLE tea

关于数据库建表时的有趣实例--关键字重复

今天 使用CMD连接mysql进行简单的数据库的建表操作.信心满满的写了如下的代码: 然后就爆了个大大的错误 .简直有点莫名其妙的感觉,我是按照昨天学习的步骤写的代码,为什么会出错? 初步开始怀疑: 第一.自己的SQL语句写错了.找来了教程上的语句比较.没什么差别. 第二.是不是大小写的问题,我重新换成了大写  依旧失败. 在不知道怎么办的时候 ,我开始怀疑 这个order是不是数据库的关键字 ,因为数据排序里面有个 "order by",于是上网查找资料: 大大的英文单词摆在了那里.