### 个人SQL总结 在本篇文章中,我们将深入探讨作者所总结的一系列HSQL(HyperSQL)相关的SQL语句,并重点分析几个特定的表创建语句及其用途。这些语句涉及了数据仓库中的常见操作,如表的创建、分区、字段格式定义以及更复杂的SQL函数使用,比如`parse_url_tuple()`。 #### 表创建语句详解 我们来看一下作者创建的几个主要表结构: 1. **ods_weblog_origin**:此表存储原始Web日志数据。 - 字段: - `valid`: 数据的有效性标记。 - `remote_addr`: 客户端IP地址。 - `remote_user`: 远程用户标识。 - `time_local`: 访问时间。 - `request`: 请求方法与路径。 - `status`: HTTP响应状态码。 - `body_bytes_sent`: 发送的主体数据大小。 - `http_referer`: 引荐页面。 - `http_user_agent`: 用户代理信息。 - 分区键:`datestr` - 字段分隔符:`\001` 2. **ods_click_pageviews**:此表用于记录用户的页面浏览行为。 - 字段: - `session`: 会话ID。 - `remote_addr`: 客户端IP地址。 - `remote_user`: 远程用户标识。 - `time_local`: 访问时间。 - `request`: 请求方法与路径。 - `visit_step`: 访问步骤。 - `page_staylong`: 页面停留时间。 - `http_referer`: 引荐页面。 - `http_user_agent`: 用户代理信息。 - `body_bytes_sent`: 发送的主体数据大小。 - `status`: HTTP响应状态码。 - 分区键:`datestr` - 字段分隔符:`\001` 3. **ods_click_stream_visit**:此表记录用户访问流数据。 - 字段: - `session`: 会话ID。 - `remote_addr`: 客户端IP地址。 - `inTime`: 进入时间。 - `outTime`: 退出时间。 - `inPage`: 入口页面。 - `outPage`: 出口页面。 - `referal`: 引荐页面。 - `pageVisits`: 页面访问次数。 - 分区键:`datestr` - 字段分隔符:`\001` 4. **t_dim_time**:这是一个时间维度表,用于存储日期相关信息。 - 字段: - `date_key`: 日期键值。 - `year`: 年份。 - `month`: 月份。 - `day`: 日。 - `hour`: 小时。 - 字段分隔符:`,` #### 复杂功能:`parse_url_tuple()`函数解析 接下来,我们重点关注一下`parse_url_tuple()`函数的使用。该函数主要用于从URL中提取多个部分。它接受一个URL和一个或多个部分名称作为参数,并返回一个包含所有指定部分的元组。例如,如果需要从URL中提取主机名、路径、查询字符串和查询字符串中的特定键值,可以这样调用: ```sql SELECT b.* FROM src LATERAL VIEW parse_url_tuple(fullurl, 'HOST', 'PATH', 'QUERY', 'QUERY:id') b AS host, path, query, query_id LIMIT 1; ``` - **函数参数**: - `url`: 要解析的URL。 - `partname`: 需要提取的部分名称。部分名称包括: - `HOST`: 主机名。 - `PATH`: 路径。 - `QUERY`: 查询字符串。 - `QUERY:<KEY_NAME>`: 查询字符串中的特定键值。 - `REF`: 引用。 - `PROTOCOL`: 协议。 - `AUTHORITY`: 权限。 - `FILE`: 文件名。 - `USERINFO`: 用户信息。 - **注意点**: - 所有输入参数和输出列类型均为字符串。 - 部分名称区分大小写,且不应包含不必要的空格。 此外,作者还提到了使用`regexp_replace`函数将双引号替换为空字符串,这是为了适应`parse_url_tuple()`函数的使用,因为它不处理双引号内的内容。使用`substring`和`substr`函数也可以实现字符串截取的功能。 #### 宽表设计与优化 作者提到的“宽表”概念也是值得我们关注的一个点。宽表通常是指通过连接多个表并选择出需要的字段来构建的一个表,其目的是简化查询过程,提高查询效率。对于`ods_weblog_origin`表中的URL字段拓宽,作者使用了`parse_url_tuple()`函数来解析URL,并进一步拓宽了字段。这种做法不仅可以减少查询时的数据扫描量,还能提高查询性能。 通过上述总结可以看出,作者通过一系列具体的SQL语句实例展示了如何在HSQL中进行数据建模和处理,特别是在数据仓库环境中。这些技巧不仅适用于HSQL,也广泛应用于其他数据库系统中。
valid string,
remote_addr string,
remote_user string,
time_local string,
request string,
status string,
body_bytes_sent string,
http_referer string,
http_user_agent string)
partitioned by (datestr string)
row format delimited fields terminated by '\001';
create table ods_click_pageviews(
session string,
remote_addr string,
remote_user string,
time_local string,
request string,
visit_step string,
page_staylong string,
http_referer string,
http_user_agent string,
body_bytes_sent string,
status string)
partitioned by (datestr string)
row format delimited fields terminated by '\001';
session string,
remote_addr string,
inTime string,
outTime string,
inPage string,
outPage string,
referal string,
pageVisits int)
partitioned by (datestr string)
row format delimited fields terminated by '\001';
create table t_dim_time(
date_key int,
year string,
month string,
day string,
hour string)
row format delimited fields terminated by ',';
(宽表:对'ods_weblog_origin'表中的'url'字段进行拓宽,和访问日期进行拓宽)
对url解析用到了lateral view , 对字段rul拓宽 拆分,用到了 parse_url_tuple() 字段, regexp_replace 替换格式是:(str,regexp,rep),把"" 替换成空,因为parse_url_tuple() 字段
只解析url,在这个日志中用到了"",所以要把"" 替换成空。 substring 和 sunstr 都能对字符串进行截取。
parse_url_tuple()字段 的详细解析
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+--+
| parse_url_tuple(url, partname1, partname2, ..., partnameN) - extracts N (N>=1) parts from a URL. |
| It takes a URL and one or multiple partnames, and returns a tuple. All the input parameters and output column types are string. |
| Partname: HOST, PATH, QUERY, REF, PROTOCOL, AUTHORITY, FILE, USERINFO, QUERY:<KEY_NAME> |
剩余7页未读,继续阅读
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- ModifyJSON.zip
- 各种系统编程和并行编程作业实验C和C++源码(含任务管理、进程间通信、并行算法等).zip
- 基于人工神经网络-随机森林-LSTM的径流预测项目源码(Python期末大作业)
- open固件库001.7z
- WinDDK 配置过的驱动模板
- WinDBG-10.0.16299.15.zip
- VMware-workstation-full-16.2.4-20089737.zip
- 章节2:编程基本概念之变量的声明-初始化-垃圾回收机制.rar
- 【java毕业设计】SpringBoot+Vue大学生就业(信息管理)服务平台 源码+sql脚本+论文 完整版
- 基于类关键路径的神经网络通道量化框架python实现源码.zip