代码改变世界

Vertica 业务用户指定资源池加载数据

2015-10-28 12:29  AlfredZhao  阅读(...)  评论(... 编辑 收藏

之前在“Vertica 安装,建库,新建测试用户并授予权限,建表,入库”这篇文章也简单介绍过入库部分的内容。
但之前测试用例若用于生产环境有明显的局限性:
1.是用dbadmin管理员用户入库的。
2.没有建立和指定入库专用资源池。

现在我们需要规范下入库,用普通业务用户test进行入库测试,并指定入库资源池load_pool。

1.创建业务用户test和测试表t_jingyu

创建业务用户test

CREATE USER test IDENTIFIED BY 'testpwd';
CREATE SCHEMA test AUTHORIZATION test;

创建测试表t_jingyu

vsql -Utest -wtestpwd

create table t_jingyu(
col1 int,
col2 varchar,
col3 timestamp not null)
PARTITION BY (date_part('doy', t_jingyu.col3));

2.创建入库专用load_pool资源池并赋权给业务用户test

2.1 创建入库专用load_pool资源池

使用dbadmin用户登录数据库创建load_pool资源池:

CREATE RESOURCE POOL load_pool PRIORITY 2 RUNTIMEPRIORITY MEDIUM PLANNEDCONCURRENCY 12 MAXCONCURRENCY 5 QUEUETIMEOUT NONE;

因为入库任务往往是很耗费资源,为避免争抢过度general资源池的资源,所以就单独设定一个资源池load_pool用来入库,这样只需要限制这个资源池的总资源就可以了。

2.2 赋给业务用户test使用资源池的权限

默认业务用户test是没有使用新建资源池的权限,需要赋予其使用权。

GRANT USAGE ON RESOURCE POOL load_pool TO test;

3.准备入库脚本loadData.sh和入库文件sourceData.dat

3.1 准备入库脚本loadData.sh

/tmp/loadData.sh

#!/bin/bash
# loading data
vsql -U test -w testpwd <<-EOF 2>&1
\timing
set role all;
set session resource_pool=load_pool;
copy test.t_jingyu(
col1,
col2,
col3
)
 from '$1' on  v_testdb_node0001
  delimiter E'|' NULL '' NO ESCAPE DIRECT;
EOF

3.2 准备入库文件sourceData.dat

/tmp/sourceData.dat

1|jingyu|2014-06-19
2|xiaobei|2014-06-20
3|alfred|2014-05-20
4|martin|2014-06-20
5|靖宇|2014-06-19

4.赋予业务用户test入库文件sourceData.dat所在目录/tmp的权限

注:这里测试举例入库文件是存放在/tmp目录,实际的存放目录,同样需要有良好的读写性能。

CREATE LOCATION '/tmp' NODE 'v_testdb_node0001' USAGE 'USER';
GRANT READ ON LOCATION '/tmp' TO test;

5.调用入库脚本入库数据

sh /tmp/loadData.sh /tmp/sourceData.dat

脚本运行结果如下:

[dbadmin@vertica1 ~]$ sh /tmp/loadData.sh /tmp/sourceData.dat
Timing is on.
SET
Time: First fetch (0 rows): 23.649 ms. All rows formatted: 23.703 ms
SET
Time: First fetch (0 rows): 33.587 ms. All rows formatted: 33.612 ms
 Rows Loaded 
-------------
           5
(1 row)

Time: First fetch (1 row): 116.278 ms. All rows formatted: 116.461 ms

至此,Vertica 利用普通业务用户test,指定专有入库资源池load_pool,测试入库数据成功。