更新时间:2024-07-24 GMT+08:00

CREATE TABLE

命令功能

CREATE TABLE命令通过指定带有表属性的字段列表来创建CarbonData Table。

命令格式

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name

[(col_name data_type, ...)]

STORED AS carbondata

[TBLPROPERTIES (property_name=property_value, ...)];

所有表的附加属性都会放到TBLPROPERTIES中来定义。

参数描述

表1 CREATE TABLE参数描述

参数

描述

db_name

Database名称,由字母、数字和下划线(_)组成。

col_name data_type

以逗号分隔的带数据类型的列表。列名由字母、数字和下划线(_)组成。

说明:

在CarbonData表创建过程中,不允许使用tupleId,PositionId和PositionReference为列命名,因为具有这些名称的列由二级索引命令在内部使用。

table_name

Database中的表名,由字母、数字和下划线(_)组成。

STORED AS

参数carbondata,定义和创建CarbonData table。

TBLPROPERTIES

CarbonData table属性列表。

注意事项

以下是表格属性的使用。
  • Block大小

    单个表的数据文件block大小可以通过TBLPROPERTIES进行定义,系统会选择数据文件实际大小和设置的blocksize大小中的较大值,作为该数据文件在HDFS上存储的实际blocksize大小。单位为MB,默认值为1024MB,范围为1MB~2048MB。若设置值不在[1, 2048]之间,系统将会报错。

    一旦block大小达到配置值,写入程序将启动新的CarbonData数据的block。数据以页面大小(32000个记录)的倍数写入,因此边界在字节级别上不严格。 如果新页面跨越配置block的边界,则不会将其写入当前block,而是写入新的block。

    TBLPROPERTIES('table_blocksize'='128')

    • 当在CarbonData表中配置了较小的blocksize,而加载的数据生成的数据文件比较大时,在HDFS上显示的blocksize会与设置值不同。这是因为,对于每一个本地block文件的首次写入,即使待写入数据的大小大于blocksize的配置值,也直接将待写入数据写入此block。所以,HDFS上blocksize的实际值为待写入数据大小与blocksize配置值中的较大值。
    • 当CarbonData表中的数据文件block.num小于任务并行度(parellelism)时,CarbonData数据文件的block会被切为新的block,使得blocks.num大于parellelism,这样所有core均可被使用。这种优化称为block distribution。
  • SORT_SCOPE:指定表创建时的排序范围。如下为四种排序范围。
    • GLOBAL_SORT:它提高了查询性能,特别是点查询。TBLPROPERTIES('SORT_SCOPE'='GLOBAL_SORT')
    • LOCAL_SORT:数据会本地排序(任务级别排序)。

      LOCAL_SORT与分区表的DDL操作存在冲突,不能同时使用,且对分区表性能提升不明显,不建议在分区表上启用该特性。

    • NO_SORT:默认排序。它将以不排序的方式加载数据,这将显著提升加载性能。
  • SORT_COLUMNS

    此表属性指定排序列的顺序。

    TBLPROPERTIES('SORT_COLUMNS'='column1, column3')

    • 如果未指定此属性,则默认情况下,没有列会被排序。
    • 如果指定了此属性,但具有空参数,则表将被加载而不进行排序。例如,('SORT_COLUMNS'='')
    • SORT_COLUMNS将接受string,date,timestamp,short,int,long,byte和boolean数据类型。
  • RANGE_COLUMN

    此表属性指定一列,该列将会按照一个范围值来对输入的数据进行分区。仅可配置一列。在数据导入过程中,可以使用“global_sort_partitions”或者“scale_factor”来避免生成小文件。

    TBLPROPERTIES('RANGE_COLUMN'='column1')

  • LONG_STRING_COLUMNS

    普通String类型的长度不能超过32000字符,如果需要存储超过32000字符的字符串,指定LONG_STRING_COLUMNS配置为该列。

    TBLPROPERTIES('LONG_STRING_COLUMNS'='column1, column3')

    LONG_STRING_COLUMNS仅可以设置string/char/varchar类型的列,并且不能为SORT_COLUMNS和复杂列。

使用场景

通过指定列创建表

CREATE TABLE命令与Hive DDL相同。CarbonData的额外配置将作为表格属性给出。

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name

[(col_name data_type , ...)]

STORED AS carbondata

[TBLPROPERTIES (property_name=property_value, ...)];

示例

CREATE TABLE IF NOT EXISTS productdb.productSalesTable (

productNumber Int,

productName String,

storeCity String,

storeProvince String,

productCategory String,

productBatch String,

saleQuantity Int,

revenue Int)

STORED AS carbondata

TBLPROPERTIES (

'table_blocksize'='128',

'SORT_COLUMNS'='productBatch, productName')

系统响应

Table创建成功,创建成功的消息将被记录在系统日志中。