manuallatest产品手册 / 跨源配置复杂场景及SQL样例
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
查看原图
跨源配置复杂场景及SQL样例
1. 跨源事件表
1.1 事件时间
常见的时间信息记录形式及处理方法如下:
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| event_time | 2025-10-15 08:12:34 | 时间 | 内容&类型均正确 |
页面配置
- 取值方式= 读取列值
- 事件时间列= event_time
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| time_str_a | '2025-10-15 08:12:34' | 文本 | 内容正确 转换类型 |
页面配置
- 取值方式= 自定义SQL
try_cast( time_str_a as timestamp )
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
time_str_b | '15/Oct/2025 13:56:36.864' | 文本 | 特殊格式 日月年_时分秒_毫秒 使用解析函数 |
页面配置
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| time_str_c | '25/10/15 08:12:34' | 文本 | 特殊格式 年月日_时分秒 使用解析函数 |
页面配置
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| ts_10 | 1760506518 | 数值 | 10位数字 时间戳 使用解析函数 *时区为查询引擎的安装时区 |
页面配置
- 取值方式= 自定义SQL
try( from_unixtime( ts_10 ) )
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| ts_10 | 1760506518 | 数值 | 10位数字 时间戳 使用解析函数 *时区为查询引擎的安装时区 |
| tz | Asia/Kolkata | 文本 | *数据上报时的时区, 需还原至当地时间 |
页面配置
- 取值方式= 自定义SQL
try( from_unixtime( ts_10, tz ) )
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| ts_13 | 1760506518123 | 数值 | 13位数字 时间戳 *时区为查询引擎的安装时区 |
页面配置
- 取值方式= 自定义SQL
try( from_unixtime( ts_13 / 1000.000 ) )
1.2 事件时区
常见的时区记录方法如下:
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| TIMEZONE | 8 | 数值 | 内容&类型均正确 |
页面配置
- 取值方式= 读取列值
- 事件时区列= TIMEZONE
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| TIMEZONE_A | '8' | 文本 | 内容正确 使用类型转换 |
页面配置
- 取值方式= 自定义SQL
try_cast( TIMEZONE_A as double )
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| TIMEZONE_B | 'Asia/Shanghai' | 文本 | 地理信息时区 文本类型 使用时差推算转换 |
页面配置
- 取值方式= 自定义SQL
try(
date_diff( /*两个时刻相减*/
'minute', /*计算分钟数*/
cast( '2018-01-01 00:00:00'||"TIMEZONE_B" as timestamp with time zone ),
timestamp'2018-01-01 00:00:00+00:00'
)
/60.0 /*转换为小时,带小数点*/
)
| 假设字段名 | 假设值样例 | 数据类型 | 备注 |
|---|---|---|---|
| TIMEZONE_C | '08:00' | 文本 | 时刻信息时区 文本类型 使用时差推算转换 |
- 取值方式= 自定义SQL
try(
date_diff( /*两个时刻相减*/
'minute', /*计算分钟数*/
cast( '2018-01-01 00:00:00'||"TIMEZONE_C" as timestamp with time zone ),
timestamp'2018-01-01 00:00:00+00:00'
)
/60.0 /*转换为小时,带小数点*/
)
1.3 分区方式与下推逻辑
1.3.1 基本说明
分析模型查询时, 前端页面会让用户选择需要查询的日期范围, 系统会根据该范围对数据进行筛选
通常底表存在按日期记录的分区字段, 基于该字段先过滤不需要的数据, 可提升查询性能
| part_date | data | ... |
|---|---|---|
| 2025-10-01 | ... | ... |
| 2025-10-02 | ... | ... |
| 2025-10-03 | ... | ... |
| 2025-10-04 | ... | ... |
| 2025-10-05 | ... | ... |
样例: 底表存在part_date分区列
用户在页面选择日期范围
| part_date | data | ... |
|---|---|---|
| 2025-10-01 | ... | ... |
| 2025-10-02 | ... | ... |
| 2025-10-03 | ... | ... |
| 2025-10-04 | ... | ... |
| 2025-10-05 | ... | ... |
系统仅查询必要的数据
前端发送给后端的分区筛选逻辑
part_date between
date'2025-10-01' /*日期起点*/
and
date'2025-10-03' /*日期终点*/
其中的变量部分如下:
part_date between
${start_date} /*日期起点*/
and
${end_date} /*日期终点*/
/* 变量的数据类型为 date */
/* 该SQL即为下推逻辑,查询时系统将其拼接在 WHERE 语句内 */
警告
由于涉及时区偏移问题, 分区的下推逻辑筛选仅作为第一步筛选逻辑
完成后会进一步根据实际的 "事件时间" 对数据进行二次筛选
1.3.2 分区方式样例
| part_date | data | ... |
|---|---|---|
| '2025-10-01' | ... | ... |
| '2025-10-02' | ... | ... |
| '2025-10-03' | ... | ... |
| '2025-10-04' | ... | ... |
| '2025-10-05' | ... | ... |
- 内容为横杠分隔的年月日, 类型为 文本
- 与AE系统的结构一致
- 直接选择 日期信息列 和 格式 即可
| part_date | data | ... |
|---|---|---|
| '2025/10/01' | ... | ... |
| '2025/10/02' | ... | ... |
| '2025/10/03' | ... | ... |
| '2025/10/04' | ... | ... |
| '2025/10/05' | ... | ... |
- 内容为斜杠分隔的年月日, 类型为 文本
- 直接选择 日期信息列 和 格式 即可
| part_date | data | ... |
|---|---|---|
| 20251001 | ... | ... |
| 20251002 | ... | ... |
| 20251003 | ... | ... |
| 20251004 | ... | ... |
| 20251005 | ... | ... |
- 内容为年月日的数字, 类型为 数值
类型为文本时也适用
- 直接选择 日期信息列 和 格式 即可
| part_date | data | ... |
|---|---|---|
| 1759248000 | ... | ... |
| 1759334400 | ... | ... |
| 1759420800 | ... | ... |
| 1759507200 | ... | ... |
| 1759593600 | ... | ... |
- 内容为每日零点的 10位数字时间戳, 类型为 数值
文本类型时需先转换成 数值
若为 13位数字时间戳, 则将变量转换为时间戳后需乘以一千
- 选择 自定义下推逻辑 并 设置SQL
part_date between
try( to_unixtime( ${start_date} ) )
and
try( to_unixtime( ${end_date} ) )
| year_p | month_p | day_p | data | ... |
|---|---|---|---|---|
| 2025 | 10 | 1 | ... | ... |
| 2025 | 10 | 2 | ... | ... |
| 2025 | 10 | 3 | ... | ... |
| 2025 | 10 | 4 | ... | ... |
| 2025 | 10 | 5 | ... | ... |
- 使用 3个分区列分别记录 年/月/日 信息, 类型为数值
- 选择 自定义下推逻辑 并 设置SQL
array_position( transform(sequence( ${start_date} , ${end_date} ), x -> year(x) ) , "year_p" ) > 0
and array_position( transform(sequence( ${start_date} , ${end_date} ), x -> month(x) ) , "month_p" ) > 0
and array_position( transform(sequence( ${start_date} , ${end_date} ), x -> day(x) ) , "day_p" ) > 0
/*需考虑跨月跨年问题*/
2. 资产列表取值方式
假设原始的列名称为
prop1,prop2,prop3...截图里较长的 SQL 可能显示不全,完整 SQL 以各小节的代码块为准。
2.1 类型转换
| 获取金币(原始数据) | 获取金币(转换后) |
|---|---|
| '1024' | 1024 |
- 原始数据中的 "获取金币" 列使用文本类型
- 无法进行数值运算
- 需将其转换为 数值类型
- 在取值方式中设置SQL
try_cast( prop1 as double )
2.2 文本拼接
| 区服ID(原始数据) | 用户ID(原始数据) | 用户唯一ID(转换后) |
|---|---|---|
| SVAP | U01 | SVAPU01 |
- 原始数据中的用户ID在不同区服内可能存在重复
- 需要结合区服ID才能确认用户唯一ID
- 需要将二者进行拼接
- 在取值方式中设置SQL
try( concat( "prop1", "prop2" ) )
2.3 文本拆分
| 投放信息(原始数据) | 地区(转换后) | 组别(转换后) | 成员(转换后) |
|---|---|---|---|
| 华东,一组,张三 | 华东 | 一组 | 张三 |
- 原始数据中的文本包含了多个信息
- 使用时希望拆分并分别使用
- 在取值方式中设置SQL
try( split_part( "prop1" , ',', 1 ) )
/*用逗号拆分并取 第1部分,注意单引号和双引号*/
try( split_part( "prop1" , ',', 2 ) )
/*用逗号拆分并取 第2部分,注意单引号和双引号*/
try( split_part( "prop1" , ',', 3 ) )
/*用逗号拆分并取 第3部分,注意单引号和双引号*/
2.4 从对象中提取子属性
| 物品信息(原始数据) | 物品价格(转换后) |
|---|---|
| {"item_id":"apple","item_price":88} | 88 |
- 原始数据中的对象包含了物品id与物品价格
- 使用时希望提取其中的物品价格
- 在取值方式中设置SQL
try( "prop1"."item_price" )
2.5 将文本转换为对象
| 物品信息文本(原始数据) | 物品信息(转换后) |
|---|---|
| '{"item_id":"apple","item_price":88}' | {"item_id":"apple","item_price":88} |
- 原始数据使用JSON文本记录了道具信息
- 使用时希望将其转换为"对象"数据类型
- 在取值方式中设置SQL
try_cast( json_parse( "prop1" ) as row( item_id varchar, item_price double ) )
这篇文档对你有帮助吗?

