创建表
建表之后,不建议删除后重建,因为table 只能映射 建表后的数据,也就是不能识别历史数据(关闭列优化可以直接映射历史数据)
建表字段尽可能齐全,否则不能插入数据(spark使用)
字段类型初始建议全部设为varchar, 否则会类型冲突(当然也可以慢慢解决,笔者在这 就不一一验证了)
表名大写,因为表数据量超过两百万之后,需要异步更新索引时,表名必须大写,否则更新不了(笔者修改了异步检索引源码,自己打包使用,实现了小写表名异步建索引)
Phoenix 4.10 版本以上默认创建表进行列映射优化,COLUMN_ENCODED_BYTES = 0可关闭表列映射优化
创建列映射优化关闭表
CREATE TABLE phoenix_test_no(
id varchar not null,
"cf"."hbase_test_column" varchar(50),
"cf"."etl_time" varchar
CONSTRAINT pk PRIMARY KEY (id)
)COLUMN_ENCODED_BYTES = 0;
创建 列映射优化表
create table f_fact_ad_keyword(
id varchar not null,
"cf"."sys_code" varchar,
"cf"."page_url" varchar,
"cf"."call_corp_code" varchar
CONSTRAINT pk PRIMARY KEY (id)
);
创建索引
CREATE LOCAL INDEX f_fact_ad_keyword_idx ON f_fact_ad_keyword ("cf"."sys_code");
//异步创建索引 cf 是列簇
CREATE LOCAL INDEX t_info_submit_log_idx ON t_info_submit_log ("cf"."etl_time","cf"."flow_corp_name") INCLUDE("cf"."call_corp_code") ASYNC;
// mapreduce 创建索引
./bin/hbase org.apache.phoenix.mapreduce.index.IndexTool --data-table t_info_submit_log --index-table T_INFO_SUBMIT_LOG_IDX --output-path hdfs:///wordcount/out
如果表新加字段需要在 phoenix 表中更新字段,否则更新失败
alter table f_fact_ad_keyword add "cf"."etl_time" varchar;
ALTER TABLE F_FACT_URL_ACCOUNT_STATUS dROP column "t_ad_keyword_day_id";
phoenix 表数据从一个表迁移到另外一个表
UPSERT INTO F_FACT_AD_KEYWORD(
ID,"cash_amount"
)
SELECT
ID, "cash_amount"
FROM "f_fact_ad_keyword" where "business_date" < '2019-02-08';
外表建表
create external table F_FACT_AD_KEYWORD (
ID string,
sys_code string
)
STORED BY 'org.apache.phoenix.hive.PhoenixStorageHandler'
TBLPROPERTIES (
"phoenix.table.name" = "F_FACT_AD_KEYWORD",
"phoenix.zookeeper.quorum" = "eagle73",
"phoenix.zookeeper.znode.parent" = "/hbase",
"phoenix.zookeeper.client.port" = "2181",
"phoenix.rowkeys" = "ID",
"phoenix.column.mapping" = "id:ID, sys_code:sys_code"
);