跳到主要内容

跨源配置复杂场景及SQL样例

最近更新 2026/10/03

1. 跨源事件表​

1.1 事件时间​

常见的时间信息记录形式及处理方法如下:

假设字段名假设值样例数据类型备注
event_time2025-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'文本

特殊格式

日月年_时分秒_毫秒

使用解析函数

页面配置

  • 取值方式= 自定义SQL
try( date_parse( time_str_b, '%d/%b/%Y %H:%i:%s.%f' ) )

更多特征字符可参考: SQL手册


假设字段名假设值样例数据类型备注
time_str_c'25/10/15 08:12:34'文本

特殊格式

年月日_时分秒

使用解析函数

页面配置

  • 取值方式= 自定义SQL
try( date_parse( time_str_c, '%y/%m/%d %H:%i:%s' ) )

更多特征字符可参考: SQL手册


假设字段名假设值样例数据类型备注
ts_101760506518数值

10位数字 时间戳

使用解析函数

*时区为查询引擎的安装时区

页面配置

  • 取值方式= 自定义SQL
try( from_unixtime( ts_10 ) )

假设字段名假设值样例数据类型备注
ts_101760506518数值

10位数字 时间戳

使用解析函数

*时区为查询引擎的安装时区

tzAsia/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_datedata...
2025-10-01......
2025-10-02......
2025-10-03......
2025-10-04......
2025-10-05......
查看原图

样例: 底表存在part_date分区列

用户在页面选择日期范围

part_datedata...
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_datedata...
'2025-10-01'......
'2025-10-02'......
'2025-10-03'......
'2025-10-04'......
'2025-10-05'......
查看原图
  • 内容为横杠分隔的年月日, 类型为 文本
  • 与AE系统的结构一致
  • 直接选择 日期信息列 和 格式 即可

part_datedata...
'2025/10/01'......
'2025/10/02'......
'2025/10/03'......
'2025/10/04'......
'2025/10/05'......
查看原图
  • 内容为斜杠分隔的年月日, 类型为 文本
  • 直接选择 日期信息列 和 格式 即可

part_datedata...
20251001......
20251002......
20251003......
20251004......
20251005......
查看原图
  • 内容为年月日的数字, 类型为 数值

类型为文本时也适用

  • 直接选择 日期信息列 和 格式 即可

part_datedata...
1759248000......
1759334400......
1759420800......
1759507200......
1759593600......
查看原图
  • 内容为每日零点的 10位数字时间戳, 类型为 数值

文本类型时需先转换成 数值

若为 13位数字时间戳, 则将变量转换为时间戳后需乘以一千

  • 选择 自定义下推逻辑 并 设置SQL
part_date between
try( to_unixtime( ${start_date} ) )
and
try( to_unixtime( ${end_date} ) )

year_pmonth_pday_pdata...
2025101......
2025102......
2025103......
2025104......
2025105......
查看原图
  • 使用 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(转换后)
SVAPU01SVAPU01
查看原图
  • 原始数据中的用户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 ) )
这篇文档对你有帮助吗?