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中来定义。
参数描述
参数 |
描述 |
---|---|
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创建成功,创建成功的消息将被记录在系统日志中。