创建外部表

首先启动gpfdist服务:

nohup gpfdist -d /home/dyt/PJ4 -p 9058 -l /home/dyt/PJ4/gpfdist.log &

查看是否启动成功:

ps -ef | grep gpfdist

log1

创建外部表

1,123432423,2019-03-15 23:12:25,zsl
2,123657567,2019-03-15 23:12:26,sdf
3,123482825,2019-03-15 23:12:27,fgd

进入云数据库

 psql -U dyt -h udw.lurymd.m0.service.ucloud.cn -p 5432 -d db_dyt -W

创建外部表

注意,这里端口号后,默认会转到之前确认的文件夹下,也就是/home/dyt/PJ4

drop external table test001_ext_1;
create external table public.test001_ext_1(
    id integer,
    phoneno varchar(20),
    time date,
    name varchar(128)
)
location(
    'gpfdist://10.11.10.9:9058/test001_ext_1.txt'
)
Format 'TEXT' (delimiter as E',' null as '' escape 'OFF');

log2

查看创建的表:

log3

尝试在外部表中更新数据,并查看table:

log4

发现table也同样变化了。

日志分析

日志分析是网站分析的基础,通过对网站浏览的日志进行分析,可以为网站优化提供数据支持,了解用户群以及用户浏览特性,对改进网站体验,提升流量有非常重要的意义。

创建外部表

我们已经有了一万行的网站数据data.txt,首先还是创建外部表导入数据

drop external table test001_ext_2;
create external table public.test001_ext_2(
    log_time timestamp(0),       -- 浏览时间
    cookie_id varchar(256),      -- 浏览的id
    url varchar(1024),             -- 浏览的页面
    ip varchar(64),              -- 用户ip
    refer_url varchar(1024)      -- 域名
)
location(
    'gpfdist://10.11.10.9:9058/data.txt'
)
Format 'TEXT' (delimiter as E',' null as '' escape 'OFF');

创建内部表

创建一个新的内部表,将外部表的数据进行导入:

drop table if exists log_path;
create table log_path(
    log_time timestamp(0),       -- 浏览时间
    cookie_id varchar(256),      -- 浏览的id
    url varchar(1024),             -- 浏览的页面
    ip varchar(64),              -- 用户ip
    refer_url varchar(1024)      -- 域名
)distributed by(cookie_id);

insert into log_path select * from test001_ext_2;

查看数据是否成功导入:

log5

查询PV、UV分布

cookie_id可以视为唯一的用户标识,故UV可视为去重后的cookie_id数。SQL如下:

drop table if exists log_pv_uv_result;

create table log_pv_uv_result(
    log_time varchar(1024),       
    pv integer,     
    uv integer   
)distributed by(log_time);

insert into log_pv_uv_result
select to_char(log_time,'yyyy-mm-dd HH24:mi:00'),
       COUNT(1) pv,
       COUNT(distinct cookie_id) uv
from log_path
group by 1
order by 1;

查看数据:

log6

导出数据

使用copy命令导出

\copy log_pv_uv_result to '/home/dyt/PJ4/log_pv_uv.csv' csv;

这样我们就可以用csv对数据进行操作并简单画图

log7

解析URL

  1. 解析URL,是指通过substring对URL进行正则表达式匹配,正则表达式\w+://([\w.]+)可以将域名匹配出来。
  2. 同样的,可以将参数后面关键字(member_idmemberId)的值获取出来,作为字段member_id
  3. split_part函数可以将字符串按照某个字符串分割,然后获取其中一个子串。
  4. regexp_split_to_array函数可以将字符串按照某个字符串分割,然后转换为数组变量。

主要熟悉数据仓库分析函数的使用

drop table if exists log_path_tmp1;
create table log_path_tmp1 as
(select
    log_time,
    cookie_id,
    substring(url,E'\\w+://([\w.]+)') AS host,
    split_part(url,'?',1) AS url,
    substring(url,E'member[_]?[i|I]d=(\\w+)') AS member_id,
    regexp_split_to_array(split_part(url,'?',2),'&') AS paras,
    ip,
    refer_url
from log_path)
distributed by (cookie_id);

显示结果为:

55313165500

用户浏览次数区间分析

select case when cnt>100 then '100+'
            when cnt>50 then '51-100'
            when cnt>10 then '11-50'
            when cnt>5 then '6-10'
            else '<=5' end tag,
       count(1) as number
from (
    select cookie_id,
    count(1) cnt
    from log_path_tmp1
    group by 1
)t
group by 1;

log8

results matching ""

    No results matching ""