万能建表语句
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS]
[<database_name>.]<table_name> 指定数据库下创表
[(<column_name> <data_type> [COMMENT '<column_comment>'] ⾏名和数据类型,以及注释
[, <column_name> <data_type> ...])]
[COMMENT '<table_comment>']
[PARTITIONED BY (<part_key分区字段> <data_type> 分区
[CLUSTERED BY (<col_name> [, <col_name>...])
软件开发安卓培训课程[SORTED BY (<col_name> [ASC|DESC] [, <col_name> [ASC|DESC]...])]
INTO <num_buckets> BUCKETS] 分桶排序
[
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '分割符号'] ⾏分割
[STORED AS (TEXTFILE|ORC|CSVFILE)] 建表类型如 TEXTFILE ORC CSVFILE
| STORED BY '<storage.handler.class.name>' [WITH SERDEPROPERTIES (<...>)]
] 指定使⽤的storage handler
[LOCATION '<hdfs_path>'] 指定hdfs上的⽬录⼀般创建外表时使⽤
[TBLPROPERTIES ('<property_name>'='<property_value>', ...)] 表属性,由键值对表⽰,在建Holodesk表,ORC事务表和CSV表时使⽤,具体细节请参考“ORC表”,“Holodesk表”和“CSV表”。
表名使⽤场景不适⽤场景建表语句注意事项
TEXT表 text表是⽂本格式的表,是inceptor的默认格式,通常⽤于将⽂本⽂件中的原始数据导⼊到inceptor中,并且针对不同的使⽤场景,可以将其中的数据放⼊到ORC表或holodesk表中。数据量较⼤的情况下 CREATE [TEMPORARY] [EXTERNAL] TABLE <table_name> 表名
(<column_name> <data_type>, <column_name> <data_type>, ...) ⾏名及⾏数据类型
[PARTITIONED BY (分区字段)字段数据类型] 分区
[CLUSTERED BY (分桶字段)INTO 桶数 BUCKETS] 分桶
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '分割符号'] ⾏分割
[STORED AS TEXTFILE] 建表类型如TEXTFILE类型
[LOCATION '<hdfs_path>'] 指定hdfs上的⼀个⽬录
[TBLPROPERTIES ('<property_name>'='<property_value>', ...)]; 表属性,由键值对表是,在建其他类型表时⽤到 Inceptor提供两种⽅式将⽂本⽂件中的数据导⼊TEXT表中
因为text表的统计和查询能⼒都⽐较低 1:建外表,直接指向hdfs上的⼀个⽬录
⽆压缩,⾏存储,只⽀持批量insert [LOCATION '<hdfs_path>']
主要是对导⼊⽂本数据建⽴过度表 2:创建表后,使⽤load data(不建议使⽤)
CSV表 CSV表的数据来源是CSV⽂件。CSV⽂件是纯⽂本⽂件,⽂件中包含数据以及分隔符。和TEXT表相似,CSV表最常见的使⽤场景是⽤于建外表,将CSV ⽂件中的数据导⼊Inceptor 不建议再任何的计算场景使⽤CSV表 CREATE EXTERNAL TABLE <table_name>
(<column_name> <data_type>, <column_name> <data_type>, ...)
STORED AS CSVFILE
[LOCATION '<hdfs_path>']
[TBLPROPERTIES ( 可以指定CSV⽂件中的分隔符
['field.delim'='<field_delimiter>'], 指定字段分隔符,默认值是","
['line.delim'='<newline_char>'], 指定换⾏符,默认是“\n”
['serialization.null.format'=''], 指定 NULL值字符,默认为空字段
['quote.delim'='<quote_delimiter>'], 指定类似转译符,默认为" " ",就是出现特殊字符,如上⾯提及的, \n等被“”包裹,则包裹的内容作为数据处理
['ding'='<encoding_type>'], 指定CSV⽂件的编码类型
['<property_name>'='<property_value>'], ...)]; TBLPROPERTIES 中可以包含⽤户⾃定义属性在 TBLPROPERTIES 中⾃定义分隔符和NULL字符
计算时,应该总是将CSV表中的数据⽤ INSERT INTO 表名SELECT 语句插⼊ORC或者Holodesk表
CSV格式不⽀持在Map阶段对⼤⽂件进⾏切割,所以建议CSV单⽂件不要超过1G,如果单⽂件⽐较⼤建议使⽤TXT格式
• ⽬前,field.delim,line.delim,quote.delim 和 serialization.null.format 的值都只能是单个字符(⼀个CHAR),不⽀持多字符。
• 暂时不⽀持复杂数据类型MAP, STRUCT和ARRAY。
ORC表 ORC表 -- ⾮分区表
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true"); ORC事务表相对与Inceptor中的其他表⽀持更多CRUD(增删改)语法,包括:
优化的列式存储,轻量级索引,压缩⽐⾼, -- 单值分区表(Unique Value Partition)
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
PARTITIONED BY (<partition_key> <data_type>)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true"); • INSERT INTO …VALUES
只⽀持insert,incerptor中数仓分析的主要表类型,可由TEXT表⽣成 -- 范围分区表(Range Partition)
CREATE TABLE <table_name> (<column> <data_type>, <column> <data_type>, ...)
PARTITIONED BY RANGE(<partition_key1> <data_type>, <partition_key2> <data_type>, ...) (
PARTITION [<partition_name_1>] VALUES LESS THAN(<key1_bound_value1>, <key2_bound_value1>, ...),
webapps rootPARTITION [partition_name_2] VALUES LESS THAN(key1_bound_value2, key2_bound_value2, ...),
...
)
CLUSTERED BY (<bucket_key>) INTO <n> BUCKETS
STORED AS ORC
TBLPROPERTIES ("transactional"="true"); • UPDATE
ORC事务表 • DELETE
由ORC表衍⽣⽽出,⽀持insert、update、delete以及事务操作 • MERGE INTO
多版本⽂件存储,定期做compaction,10%~20%的性能损失
事务处理
建⽴事务表 ORC⾮事务表的建表只需在建表语句中⽤ STORED AS ORC • 下⾯将要介绍的ORC事务表CRUD操作必须在事务处理模式(Transaction Mod e)下进⾏。默认情况下Inceptor关闭Transaction Mode,要对ORC表进⾏事务处理,需要通过下⾯的开关打开ORC表对应的Transaction Mode:
pe = inceptor;
• Inceptor⽀持常见的 BEGIN TRANSACTION/COMMIT/ROLLBACK 事务处理语⾔(TCL)。在不使⽤这些关键词的情况下默认为⾃动提交——每个CRUD 操作都⽴即⽣效。
ORC事务表的建表
position和location的区别• 为表分桶:为了保证增删改过程中的性能,我们要求ORC事务表必须是部分排序或者全局排序的,但是全局排序⼜过于耗费计算资源,因此我们要求ORC表必须是分桶表。
• 在 TBLPROPERTIES ⾥需要加上 "transactional"="true",以标识这是⼀个要⽤作事务操作的表。
• 如果表的数据量特别⼤,建议在分桶的基础上再分区,ORC事务表⽀持单值分区和范围分区。
HOLODESK表创建普通表它着⼒于交互式分析中即时查询效率的提⾼且能够保证扩展性与稳定性。Transwarp Holodesk 通过 Zookeeper 来管理元数据,从⽽避免因为单点故障⽽导致的数据丢失,数据checkpoint 在 HDFS 中。服务在故障恢复之后,Holodesk 能够通过 Zookeeper 中的信息⾃动重建数据与索引,因此有很⾼的可靠性
• 当机器拥有很⼤的内存或者部署了SSD时。机器的内存和SSD没有时,或者⽐较⼩的时候 CREATE TABLE <holodesk_table_name> (
<column_name1> <DATATYPE1>,
<column_name2> <DATATYPE2>,
<column_name3> <DATATYPE3>,
...
) STORED AS HOLODESK;
• 过滤⾼的场景,包括单表扫描和多表MapJoin等。
• 聚合率⾼的场景,例如GROUP BY之后,信息被⼤量聚合。 CREATE TABLE <holodesk_table_name> STORED AS HOLODESK
AS SELECT ... FROM ...; 在使⽤Holodesk之前,必须在Tranwarp Manager的Inceptor设置页⾯中合理配置以下三个相关资源:ngmr.fastdisk.dir、ngmr.fastdi sk.size以及ngmr.localdir,分别代表Holodesk的实际所位置、Holodesk占⽤资源的⽐例、Shuffle数据的本地存放位置。
过滤率⾼或聚合率⾼的场景,我们提供Cube、Index两种⼿段来帮助优化业务执⾏。在运⽤Index以及Cube加速的过程中,Index与Cube的定义是关键。Inde x字段与Cube组合字段的选取,主要来⾃于对业务逻辑中维度的取舍,以及对度量条件的选择等。为达到较好的优化效果,Index字段通常为过滤字段,Cube字段通常为聚合字段如gourp by 则⽤Cube where的过滤条件,则⽤Index
基于内存的/SSD的分布式列式存储,内含索引和cube,压缩率⽐orc略低,,只⽀持insert操作创建Index的语法。
主要⽤于数据交互式分析,以及报表⼯具的实时展现 CREATE TABLE <holodesk_table_name>(
<column_name1> <DATATYPE1>,
<column_name2> <DATATYPE2>,
mousemove怎么使用...
) STORED AS HOLODESK
TBLPROPERTIES (
'holodesk.index' = '<column_name_index1>,<column_name_index2>,...'
);
创建Cube的语法。
CREATE TABLE <holodesk_table_name>(
<column_name1> <DATATYPE1>,
<column_name2> <DATATYPE2>,
...
) STORED AS HOLODESK
TBLPROPERTIES (
'holodesk.dimension' = '<column_name_a_dim1>, <column_name_a_dim2>, ... |
<column_name_b_dim1>, <column_name_b_dim2>, ...|
...'
oracle判断小数点后有几位) ;
表名使⽤场景不适⽤场景建表语句例⼦注意事项
TEXT表 text表是⽂本格式的表,是inceptor的默认格式,通常⽤于将⽂本⽂件中的原始数据导⼊到inceptor中,并且针对不同的使⽤场景,可以将其中的数据放⼊到ORC表或holodesk表中。数据量较⼤的情况下 CREATE [TEMPORARY] [EXTERNAL] TABLE <table_name> 表名
(<column_name> <data_type>, <column_name> <data_type>, ...) ⾏名及⾏数据类型
[PARTITIONED BY (分区字段)字段数据类型] 分区
[CLUSTERED BY (分桶字段)INTO 桶数 BUCKETS] 分桶
[ROW FORMAT DELIMITED FIELDS TERMINATED BY '分割符号'] ⾏分割
[STORED AS TEXTFILE] 建表类型如TEXTFILE类型
[LOCATION '<hdfs_path>'] 指定hdfs上的⼀个⽬录
[TBLPROPERTIES ('<property_name>'='<property_value>', ...)]; 表属性,由键值对表是,在建其他类型表时⽤到已知有⼀份原始数据在HDFS上的⽬录下,内容如下: Inceptor提供两种⽅式将⽂本⽂件中的数据导⼊TEXT表中
因为text表的统计和查询能⼒都⽐较低 1,Alice,2013:120000|2014:125000|2015:130000
2,Bob,2014:150000|2015:160000 1:建外表,直接指向hdfs上的⼀个⽬录
数据记录了员⼯的ID、名字和历年的薪酬状况,列分隔符为“,”。我们需要把历年的薪酬状况放在⼀个MAP中,以年份为键、薪酬为值。键值对之间的分隔符为“|”;每个键值对之内,键和值之间的分隔符为“:”。以这份数据为源建表,MAP中键值对之间的分隔符由 COLLECTION ITEMS TERMINATED BY 指定,键值对内键和值之间的分隔符由 MAP KEYS TERMINATED BY 指定: [LOCATION '<hdfs_path>']
⽆压缩,⾏存储,只⽀持批量insert DROP TABLE IF EXISTS employee_salary;
CREATE TABLE employee_salary (
id INT, name STRING, salary MAP<STRING, DOUBLE>
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
COLLECTION ITEMS TERMINATED BY '|'
MAP KEYS TERMINATED BY ':'
LOCATION '/manual_crud_tmp/employee_salary';
SELECT * FROM employee_salary; 2:创建表后,使⽤load data(不建议使⽤)
主要是对导⼊⽂本数据建⽴过度表
java前端和后端哪个工资高CSV表 CSV表的数据来源是CSV⽂件。CSV⽂件是纯⽂本⽂件,⽂件中包含数据以及分隔符。和TEXT表相似,CSV表最常见的使⽤场景是⽤于建外表,将CSV ⽂件中的数据导⼊Inceptor 不建议再任何的计算场景使⽤CSV表 CREATE EXTERNAL TABLE <table_name>
(<column_name> <data_type>, <column_name> <data_type>, ...)
STORED AS CSVFILE
[LOCATION '<hdfs_path>']
[TBLPROPERTIES ( 可以指定CSV⽂件中的分隔符
['field.delim'='<field_delimiter>'], 指定字段分隔符,默认值是","
['line.delim'='<newline_char>'], 指定换⾏符,默认是“\n”
['serialization.null.format'=''], 指定 NULL值字符,默认为空字段
['quote.delim'='<quote_delimiter>'], 指定类似转译符,默认为" " ",就是出现特殊字符,如上⾯提及的, \n等被“”包裹,则包裹的内容作为数据处理
['ding'='<encoding_type>'], 指定CSV⽂件的编码类型
['<property_name>'='<property_value>'], ...)]; TBLPROPERTIES 中可以包含⽤户⾃定义属性假设我们有这样⼀份CSV⽂件,在本地⽬录下,⽂件内容如下:在 TBLPROPERTIES 中⾃定义分隔
符和NULL字符
计算时,应该总是将CSV表中的数据⽤ INSERT INTO 表名SELECT 语句插⼊ORC或者Holodesk表 aaa,,ccc,"",ddd
fff,,hhh,"",jjj
对这个⽂件这样建外表:(执⾏LOAD DATA之前请注意如何访问本地⽂件)
CSV格式不⽀持在Map阶段对⼤⽂件进⾏切割,所以建议CSV单⽂件不要超过1G,如果单⽂件⽐较⼤建议使⽤TXT格式 DROP TABLE IF EXISTS csv_table_ 2;
CREATE EXTERNAL TABLE csv_table_2
(
col1 STRING,
col2 STRING,
col3 STRING,
col4 STRING,
col5 STRING
)
STORED AS CSVFILE
TBLPROPERTIES('serialization.null.format'='');
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论