1.要取得Phoenix映射Hbase表,需要在Phoenix中创建与hbase中表结构一样的表
获取hbase tables 建表语句
查询Phoenix所有表
执行脚本:for i in `cat tb`;do sh -x get_sql.sh $i;done
get_sql.sh
:
ns_table=$(echo $1 |cut -d ':' -f1)
num_region=$(echo $1 |cut -d ':' -f2)
echo $ns_table
echo $num_region
echo \!describe $ns_table | /usr/hdp/3.1.4.0-315/phoenix/bin/sqlline.py |grep IDC|awk -F '|' '{print $5,$7}'| sed 's/^ *//g' | grep [A-Z]|grep -v "ROWKEY"|sed s/^/INFO./g|tr '\n' ',' |sed s/^/"CREATE TABLE IF NOT EXISTS $ns_table \ (ROWKEY VARCHAR NOT NULL PRIMARY KEY,"/g|sed s/$/\)\ COMPRESSION=\'GZ\',VERSIONS=1,SALT_BUCKETS=$num_region\;/g | sed 's/,)/)/g' >>sql.text
sql.text(还要自行切割语句)
EG: CREATE TABLE IF NOT EXISTS IDC.$table_name
2.创建namespace
3.执行sql.test创建Phoenix表
for i in `cat tb`;do sh -x sql.test $i;done
Exception:
创建表时由于COLUMN_FAMILY类型创建错误会导致Phoenix表无法查询
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException): org.apache.hadoop.hbase.regionserver.NoSuchColumnFamilyException: Column family INFO does not exist in region
需要重新删除表并创建表
正常执行步骤
{
Phoenix操作
删表(同时会删除Hbase中的表)
drop table IDC.$$tables;
查源(不在)
select * from SYSTEM.CATALOG where TABLE_NAME = '$table_name';
建表(同时会创建Hbase中表)
注意:注意
CREATE TABLE IF NOT EXISTS "$namespace"."$table_name" (
ROWKEY VARCHAR NOT NULL PRIMARY KEY,
"0"."IDCARD_NO_ENCODE" VARCHAR,
"0"."IDCARD_NO_EQ" VARCHAR,
"0"."IDCARD_NO_FUZZY" VARCHAR
) COMPRESSION='GZ',VERSIONS=1,SALT_BUCKETS=null;
查源(正常)
select * from SYSTEM.CATALOG where TABLE_NAME = '$table_name';
Hbase操作
下线表(停顿一下,有可能未下线完成 is_disabled 命令查看是否完成)
disable 'IDC:WULIANG_SEALED_TEST'
删表(不会删除Phoenix中新建表)
drop 'namespace:$table_name'
解析快照
restore_snapshot '$table_name'
上线表
enable 'namespace:$table_name'
查看表(如果表很大要加过滤条件或者去Phoenix中limit查询)
scan 'namespace:$table_name'
Phoenix操作
查表
select * from 'namespace.$table_name' limit 10;
完美
}