文档首页 > > SQL语法参考> 创建OBS表> 使用Hive语法创建OBS表

使用Hive语法创建OBS表

分享
更新时间: 2019/10/24 GMT+08:00

功能描述

使用Hive语法创建OBS表。

语法格式

1
2
3
4
5
6
7
8
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name 
  [(col_name1 col_type1 [COMMENT col_comment1], ...)]
  [COMMENT table_comment] 
  [PARTITIONED BY (col_name2 col_type2, [COMMENT col_comment2], ...)] 
  STORED AS file_format 
  LOCATION 'obs_path'
  [TBLPROPERTIES (key1=val1, key2=val2, ...)]
  [AS select_statement];

关键字

  • EXTERNAL:指创建OBS表。
  • IF NOT EXISTS:指定该关键字以避免表已经存在时报错。
  • COMMENT:字段或表描述。
  • PARTITIONED BY:指定分区字段。
  • STORED AS:指定所存储的文件格式,当前该关键字只支持指定PARQUET和ORC两种格式。
  • LOCATION:指定OBS的路径。创建OBS表时必须指定此关键字。
  • TBLPROPERTIES:TBLPROPERTIES子句允许用户给表添加key/value的属性。
  • AS:使用CTAS创建表。

参数说明

表1 CREATE TABLE参数说明

参数

描述

db_name

Database名称,由字母、数字和下划线(_)组成。不能是纯数字,且不能以下划线开头。

table_name

Database中的表名,由字母、数字和下划线(_)组成。不能是纯数字,且不能以下划线开头。

col_name

字段名称。

col_type

字段类型。

col_comment

字段描述。

file_format

OBS表数据存储格式,支持orc,parquet,json,csv,carbon,avro类型。

table_comment

表描述。

select_statement

用于CTAS命令,将源表的select查询结果或某条数据插入到新创建的OBS表中。

表2 TBLPROPERTIES参数

参数

描述

默认值

multiLevelDirEnable

是否迭代查询子目录中的数据。当配置为true时,查询该表时会迭代读取该表路径中所有文件,包含子目录中的文件。

false

当file_format为csv时,还可以设置以下TBLPROPERTIES参数。
表3 CSV数据格式TBLPROPERTIES参数说明

参数

描述

默认值

delimiter

数据分隔符。

逗号(即",”)

quote

引用字符。

双引号(即“"”)

escape

转义字符。

反斜杠(即“\”)

multiLine

列数据中是否包含回车符或转行符,true为包含,false为不包含

false

dateFormat

指定CSV文件中date字段的日期格式

yyyy-MM-dd

timestampFormat

指定CSV文件中timestamp字段的日期格式

yyyy-MM-dd HH:mm:ss

mode

指定解析CSV时的模式,有三种模式。

  • PERMISSIVE:宽容模式,遇到错误的字段时,设置该行整行为Null。
  • DROPMALFORMED: 遇到错误的字段时,丢弃整行。
  • FAILFAST:报错模式,遇到错误的字段时直接报错。

PERMISSIVE

header

CSV是否包含表头信息,true表示包含表头信息,false为不包含。

false

注意事项

  • 表名与列名为大小写不敏感,即不区分大小写。
  • 表名及列名的描述仅支持字符串常量。
  • 创建表时要声明列名及对应的数据类型,数据类型为原生类型。
  • 当OBS的目录下文件夹与文件同名时,创建OBS表指向的路径会优先指向文件而非文件夹。
  • 创建表时,若指定路径为OBS上的目录,且该目录下包含子目录(或嵌套子目录),则子目录下的所有文件类型及其内容也是表内容。用户需要保证所指定的目录及其子目录下所有文件类型和建表语句中指定的存储格式一致,所有文件内容和表中的字段一致,否则查询将报错。用户可以在建表语句OPTIONS中设置“multiLevelDirEnable”为true以查询子目录下的内容,此参数默认值为false(注意,此配置项为表属性,请谨慎配置)。
  • 创建分区表时,PARTITONED BY中指定分区列必须是不在表中的列,且需要指定数据类型。分区列只支持string, boolean, tinyint, smallint, short, int, bigint, long, decimal, float, double, date, timestamp类型。
  • 支持指定多个分区字段,分区字段只需在PARTITIONED BY关键字后指定,不能像普通字段一样在表名后指定,否则将出错。
  • 单表分区数最多允许7000个。
  • CTAS建表语句不能指定表的属性,不支持创建分区表。

示例

  • 创建一张名为student的parquet格式表,该表包含字段id,name,score,其对应的数据类型分别是INT,STRING,FLOAT。
    1
    CREATE TABLE student (id INT, name STRING, score FLOAT) STORED AS PARQUET LOCATION 's3a://bucketName/filePath';
    
  • 以班级号(classNo)为分区字段,创建一张名为student的表,包含姓名(name)与分数(score)两个字段。
    1
    CREATE TABLE IF NOT EXISTS student(name STRING, score DOUBLE) PARTITIONED BY (classNo INT) STORED AS PARQUET LOCATION 's3a://bucketName/filePath';
    
  • 创建表t1,并将表t2的数据插入到表t1中(Hive语法)。
    1
    CREATE TABLE t1 STORED AS parquet LOCATION 's3a://bucketName/filePath' as select * from t2;
    
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区