5. 在Spark-shell上使用CarbonData
用户若需要在Spark-shell上使用CarbonData,需通过如下方式进行创建CarbonData Table,加载数据到CarbonData Table和在CarbonData中查询数据的操作。
spark.sql("CREATE TABLE x2(imei string, deviceInformationId int, mac string, productdate timestamp, updatetime timestamp, gamePointId double, contractNumber double) STORED BY 'org.apache.carbondata.format'")
spark.sql("LOAD DATA inpath 'hdfs://hacluster/data/x1_without_header.csv' into table x2 options('DELIMITER'=',', 'QUOTECHAR'='"','FILEHEADER'='imei, deviceinformationid,mac, productdate,updatetime, gamepointid,contractnumber')")
spark.sql("SELECT * FROM x2").show()
CarbonData Table简介
简介
CarbonData中的数据存储在table实体中。CarbonData table与RDBMS中的表类似。RDBMS数据存储在由行和列构成的表中。CarbonData table存储的也是结构化的数据,拥有固定列和数据类型。
支持数据类型
CarbonData支持以下数据类型:
Int
String
BigInt
Smallint
Char
Varchar
Boolean
Decimal
Double
TimeStamp
Date
下表对所支持的数据类型及其各自的范围进行了详细说明。
表1CarbonData数据类型
数据类型范围Int
4字节有符号整数,从-2,147,483,648到2,147,483,647
说明:
非字典列如果是Int类型,会在内部存储为BigInt类型。
String
100000字符
说明:
如果在CREATE TABLE中使用CHAR或VARCHAR数据类型,则这两种数据类型将自动转换为String数据类型。
BigInt
64-bit,从-9,223,372,036,854,775,808到9,223,372,036,854,775,807
SmallInt
范围-32,768到32,767
Char
范围A到Z&a到z
Varchar
范围A到Z&a到z&0到9
Boolean
范围true或者false
Decimal
默认值是(10,0) ,最大值是(38,38)
说明:
当进行带过滤条件的查询时,为了得到准确的结果,需要在数字后面加上BD。例如,select * from carbon_table where num = 1234567890123456.22BD.
Double
64-bit,从4.9E-324到1.7976931348623157E308
TimeStamp
NA,默认格式为“yyyy-MM-dd HH:mm:ss”。
Date
DATE数据类型用于存储日历日期。 默认格式为“yyyy-MM-DD”。
新建CarbonData Table
操作场景
使用CarbonData前需先创建表,才可在其中加载数据和查询数据。可通过Create Table命令来创建表。该命令支持使用自定义列创建表。
使用自定义列创建表
可通过指定各列及其数据类型来创建表。
命令示例:
CREATE TABLE IF NOT EXISTS productdb.productSalesTable (
productNumber Int,
productName String,
storeCity String,
storeProvince String,
productCategory String,
productBatch String,
saleQuantity Int,
revenue Int)
STORED BY 'org.apache.carbondata.format'
TBLPROPERTIES (
'table_blocksize'='128',
'DICTIONARY_EXCLUDE'='productName',
'DICTIONARY_INCLUDE'='productNumber');
上述命令所创建的表的详细信息如下:
表1表信息定义
参数描述productSalesTable
待创建的表的名称。该表用于加载数据进行分析。
表名由字母、数字、下划线组成。
productdb
数据库名称。该数据库将与其中的表保持逻辑连接以便于识别和管理。
数据库名称由字母、数字、下划线组成。
productName
storeCity
storeProvince
procuctCategory
productBatch
saleQuantity
revenue
表中的列,代表执行分析所需的业务实体。
列名(字段名)由字母、数字、下划线组成。
table_blocksize
CarbonData表使用的数据文件的block大小,默认值为1024,最小值为1,最大值为2048,单位为MB。
如果“table_blocksize”值太小,数据加载时,生成过多的小数据文件,可能会影响HDFS的使用性能。
如果“table_blocksize”值太大,数据查询时,索引匹配的block数据量较大,某些block会包含较多的blocklet,导致读取并发度不高,从而降低查询性能。
一般情况下,建议根据数据量级别来选择大小。例如:GB级别用256,TB级别用512,PB级别用1024。
DICTIONARY_EXCLUDE
不生成字典。适用于high-cardinality列,系统默认的行为是为string类型的列做字典编码,但是,如果字典值过多,会导致字典转换操作成为性能瓶颈,反而降低了性能。一般情况下,列的cardinality高于5万,可以被认定为high-cardinality,应该使用DICTIONARY_EXCLUDE排除掉字典编码,该参数为可选参数。
说明:
非字典列支持Int,String,BigInt,Long和TimeStamp数据类型。
TimeStamp数据类型默认为DICTIONARY_EXCLUDE列。
DICTIONARY_INCLUDE
对指定列生成字典。适用于非high-cardinality列,可以提升字典列上的groupby性能,为可选参数。一般情况下,DICTIONARY_INCLUDE包含的列的cardinality不应该高于5万。
说明:
所有integer类型度量均以BigInt类型进行处理与显示。
CarbonData遵循严格解析,因此任何不可解析的数据都会被保存为null。例如,在BigInt列中加载double值(3.14),将会保存为null。
在Create Table中使用的Short和Long数据类型在DESCRIBE命令中分别显示为smallint和bigint。
可以使用DESCRIBE格式化命令查看表数据大小和表索引大小。
操作结果
根据命令创建表。
删除CarbonData Table
操作场景
可使用DROP TABLE命令删除表。删除表后,所有metadata以及表中已加载的数据都会被删除。
操作步骤
运行如下命令删除表。
命令:
DROP TABLE [IF EXISTS] [db_name.]table_name;
一旦执行该命令,将会从系统中删除表。命令中的“db_name”为可选参数。如果没有指定“db_name”,那么将会删除当前数据库下名为“table_name”的表。
示例:
DROP TABLE productdb.productSalesTable;
通过上述命令,删除数据库“productdb”下的表“productSalesTable”。
操作结果