数据集主表是 `data_source`,当前状态在 `data_source.status`,数据集元信息更新时间在 `data_source.utime`。
如果要看最近一次数据刷新执行情况,需要关联 `resource_update_history`:
- `resource_update_history.resource_id = data_source.ds_id`
- `resource_update_history.resource_type = 1` 表示数据集
- 最近一次执行记录可按 `resource_update_history.id DESC` 取最新
- 最近一次成功刷新时间可取 `status = 4` 的最大 `end_time`
状态枚举如下:
```text
0 CREATED
1 WAITING
2 PROCESSING
3 PAUSED
4 FINISHED
5 FAILED
6 CANCELED
7 CREATING
8 UPDATING
9 CLEARING
10 CHANGING_KEYS
11 TIMEOUT
12 CHANGE_SCHEMA
```
示例 SQL:
```sql
SELECT
ds.ds_id,
ds.name AS ds_name,
ds.dom_id,
ds.status AS current_status_code,
CASE ds.status
WHEN 0 THEN 'CREATED'
WHEN 1 THEN 'WAITING'
WHEN 2 THEN 'PROCESSING'
WHEN 3 THEN 'PAUSED'
WHEN 4 THEN 'FINISHED'
WHEN 5 THEN 'FAILED'
WHEN 6 THEN 'CANCELED'
WHEN 7 THEN 'CREATING'
WHEN 8 THEN 'UPDATING'
WHEN 9 THEN 'CLEARING'
WHEN 10 THEN 'CHANGING_KEYS'
WHEN 11 THEN 'TIMEOUT'
WHEN 12 THEN 'CHANGE_SCHEMA'
ELSE CONCAT('UNKNOWN:', ds.status)
END AS current_status,
ds.utime AS metadata_update_time,
ds.last_exec_start_time,
ds.last_exec_end_time,
latest_his.begin_time AS latest_update_begin_time,
latest_his.end_time AS latest_update_end_time,
latest_his.status AS latest_update_status_code,
latest_success.latest_success_end_time
FROM data_source ds
LEFT JOIN resource_update_history latest_his
ON latest_his.id = (
SELECT h.id
FROM resource_update_history h
WHERE h.dom_id = ds.dom_id
AND h.resource_id = ds.ds_id
AND h.resource_type = 1
ORDER BY h.id DESC
LIMIT 1
)
LEFT JOIN (
SELECT
resource_id,
MAX(end_time) AS latest_success_end_time
FROM resource_update_history
WHERE dom_id = '${dom_id}'
AND resource_type = 1
AND status = 4
GROUP BY resource_id
) latest_success
ON latest_success.resource_id = ds.ds_id
WHERE ds.dom_id = '${dom_id}'
AND ds.is_del = 0
-- AND ds.ds_id = '${ds_id}'
ORDER BY ds.utime DESC;
```
如果关注“数据集配置或元信息最后变更时间”,看 `data_source.utime`;如果关注“数据最近一次刷新成功完成时间”,看 `latest_success_end_time`。
|