hbase建表没用到过,有用到过的具体使用方法自行研究吧。
本篇为个人工作及学习中自行整理的TDH的部分建表语句,各位可以参考一下,有过时的、理解错的,欢迎各位指正。
orc表建表语句,带有分区,开启事务功能
create table if not exists orc_table_lee
(table_key string comment '主键'
,data_date string comment '数据日期')
comment 'ORC分区表'
partitioned by (partid string) --分区键
clustered by (table_key) --分桶键
into 23buckets
stored as orc
tblproperties('transactional' = 'true')
;
external外表建表语句
create [EXTERNAL] table if not exists orc_table_lee
(table_key string comment '主键'
,data_date string comment '数据日期')
comment '外表'
row format delimited
fields terminated by '|' --数据分隔符
location '/insepter1/data/lee/orc_table_lee' --hdfs路径
external外表+数据稽查功能
CREATE EXTERNAL TABLE table_lee (column1 datatype1, column2 datatype2, ...)
LOG ERRORS INTO error_table_name [OVERWRITE] --关键字 `log errors into`;`overwrite` 数据重写
[SEGMENT REJECT LIMIT n [ ROWS | Percent ] ]
关键字说明:
error_table_name是存放当前表脏数据信息的Error
Table的名称,如果不存在系统会自动创建一个。只能在创建表时指定。注意关键字LOG ERRORS INTO。
若允许Overwrite Error
Table,需在相应位置写“OVERWRITE”,否则忽略。禁止Overwrite的坏处是每次都会在原有记录的基础上写入脏数据信息,使该Error
Table不断扩增;好处是能追溯至更久远的信息。用户应根据需求设置。
若需执行REJECT策略,应补充“SEGMENT REJECT LIMIT
n…”部分,如果没有需求可忽略。n是REJECT阈值,表示REJECT之前允许的非法数据的行数或比例。脏数据数量超过n的限定时,会直接报错,且错误信息不录入Error
Table。 应注意
,分布式结构下,由于语句的执行被切分交给不同task实现,所以n是相对于一个task中的数据行数而言的,而并非总数据行数。
没有指定Error Table的表也可以受到数据稽查的保护,只是错误信息不会收录于Error Table。
指定了Error Table并不代表启动了数据稽查,需要通过后面将介绍的开关控制。
下面是和数据稽查相关的三个开关,用于控制其工作特性:
SET inceptor.data.audit = true/false;
SET inceptor.strict.evaluate = true/false;
SET inceptor.notnull.audit = true/false; 数据稽查总开关,开启时会做脏数据和NOT
NULL检查,默认关闭。 是否在遇到脏数据时报Exception,默认关闭。 是否对NOT NULL
Constraint进行检查,默认关闭。 inceptor.data.audit是Top
Level开关,设为true后,后面两个开关强制为true,启动inceptor.data.audit之后再对两个子开关进行设置将不起作用。
后两个开关可以在inceptor.data.audit关闭时做设置。区别在于,如果开启data.audit,关于脏数据和NOT
NULL限制的报错都会写入Error
Table;若在关闭data.audit后启动strict.evaluate或notnull.audit,执行对应检测时报错将被打印于界面。
数据导入:
[LOCAL]
是本地路径选项,加上选项后 <path>
是 inceptor server 所在节点的本地目录。
不加[LOCAL]
是指HDFS上的文件。
LOAD DATA [LOCAL] INPATH '/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/table_lee.txt' OVERWRITE INTO TABLE employee_err;
Error Table的属性控制:
通过如下语句停止对table_name数据稽查,不再对其记录脏数据信息。注意这只是针对table_name的变化,不影响其他表。
ALTER TABLE table_name SET ERRORS LOG OFF;
使数据稽查重新作用于table_name,此时必须设置OVERWRITE和REJECT的开关状态,n必须为整数。也可以用于修改OVERWRITE和REJECT的设置。
ALTER TABLE table_name SET ERRORS LOG ON OVERWRITE [on|off] REJECT [on|off] LIMIT n ROWS;
hbase外表建表语句,与hbase的表不进行绑定的建表方式
create table table_lee
(table_key string comment '主键'
,data_date string comment '数据日期')
ROW FORMAT SERDE
'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
'colelction.delim'='|',
'serialization.format'='1','hbase.columns.mapping'=':key,f0:begin_time,f0:over_time,f0:pro_name,f0:log_object,f0:row_count,f0:log_action,f0:log_code,f0:log_desc')
TBLPROPERTIES (
'hbase.table.name'='table_lee');
hbase外表建表语句,与hbase的表不进行绑定的建表方式
create external table table_lee
(table_key string comment '主键'
,data_date string comment '数据日期')
ROW FORMAT SERDE
'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES (
'colelction.delim'='|',
'serialization.format'='1', 'hbase.columns.mapping'=':key,f0:begin_time,f0:over_time,f0:pro_name,f0:log_object,f0:row_count,f0:log_action,f0:log_code,f0:log_desc')
TBLPROPERTIES (
'hbase.table.name'='table_lee');