ES数据处理方法
由于日志数据存在ES项目里,需要从ES中获取日志进行分析,使用SQL数据进行处理,如下:
select
traceid-- STRING COMMENT '流程id',
,appnum -- BIGINT COMMENT '迭代号',
,appversion --STRING COMMENT 'APP版本',
,appcode -- STRING COMMENT '应用编码',
,type -- STRING COMMENT '类型',
,spanid -- STRING COMMENT '模块id',
,apptype -- STRING COMMENT '应用类型详情见定义',
,eventtime -- DATETIME COMMENT '日期',
,name -- STRING COMMENT '名称',
,id -- STRING COMMENT 'id',
,theid -- STRING COMMENT 'theId'
,preid
-------------data----------------
,GET_JSON_OBJECT(data_tmp,'$.allInOne') AS allInOne
,GET_JSON_OBJECT(data_tmp,'$.class') AS class
,GET_JSON_OBJECT(data_tmp,'$.classCode') AS classCode
,GET_JSON_OBJECT(data_tmp,'$.deviceId') AS deviceId
,GET_JSON_OBJECT(data_tmp,'$.grade') AS grade
,GET_JSON_OBJECT(data_tmp,'$.gradeCode') AS gradeCode
,GET_JSON_OBJECT(data_tmp,'$.handleTime') AS handleTime
,GET_JSON_OBJECT(data_tmp,'$.heigth') AS heigth
,cast(ipint(GET_JSON_OBJECT(json_build,'$.ip')) as string) AS ipAddr
,GET_JSON_OBJECT(data_tmp,'$.isSuccess') AS isSuccess --isSuccess(1.是 0否)
,GET_JSON_OBJECT(data_tmp,'$.loginMode') AS loginMode -- 登陆模式 1 游客登陆 2 账户登陆
,GET_JSON_OBJECT(data_tmp,'$.loginType') AS loginType -- 登陆方式 1:在线登陆 2 离线登陆
,GET_JSON_OBJECT(data_tmp,'$.school') AS school
,GET_JSON_OBJECT(data_tmp,'$.schoolCode') AS schoolCode
,GET_JSON_OBJECT(data_tmp,'$.width') AS width
,GET_JSON_OBJECT(data_tmp,'$.subject') AS subject
,GET_JSON_OBJECT(data_tmp,'$.subjectCode') AS subjectCode
,GET_JSON_OBJECT(data_tmp,'$.classTime') AS classTime
,GET_JSON_OBJECT(data_tmp,'$.reason') AS reason
,GET_JSON_OBJECT(data_tmp,'$.operateVersion') AS operateVersion
----------新增---------
,CASE WHEN GET_JSON_OBJECT(data_tmp,'$.userId') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.userId')
WHEN GET_JSON_OBJECT(data_tmp,'$.teacherCode') is not null THEN GET_JSON_OBJECT(data_tmp,'$.teacherCode')
ELSE GET_JSON_OBJECT(data_tmp,'$.userId')
END AS userId
,GET_JSON_OBJECT(data_tmp,'$.userName') AS userName
,GET_JSON_OBJECT(data_tmp,'$.userType') AS userType
,GET_JSON_OBJECT(data_tmp,'$.account') AS account
,GET_JSON_OBJECT(data_tmp,'$.courseId') AS courseId
,GET_JSON_OBJECT(data_tmp,'$.pageName') AS pageName
,GET_JSON_OBJECT(data_tmp,'$.pageTitle') AS pageTitle
,CASE WHEN GET_JSON_OBJECT(data_tmp,'$.describe') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.describe')
WHEN GET_JSON_OBJECT(data_tmp,'$.eventDesc') is not NULL THEN GET_JSON_OBJECT(data_tmp,'$.eventDesc')
ELSE ''
END AS describes
,GET_JSON_OBJECT(data_tmp,'$.source') AS source
,GET_JSON_OBJECT(data_tmp,'$.topDistance') AS topDistance
,GET_JSON_OBJECT(data_tmp,'$.size') AS sizes
---------------json_build--------------------
,GET_JSON_OBJECT(json_build,'$.sysVersion') AS sysVersion
,GET_JSON_OBJECT(json_build,'$.cpuType') AS cpuType
,GET_JSON_OBJECT(json_build,'$.memory') AS memory
,GET_JSON_OBJECT(json_build,'$.netType') AS netType
,GET_JSON_OBJECT(json_build,'$.sysName') AS sysName
,GET_JSON_OBJECT(json_build,'$.deviceModel') AS deviceModel
,GET_JSON_OBJECT(json_build,'$.deviceNo') AS deviceNo
-------------------新增--------------------
,GET_JSON_OBJECT(json_build,'$.screenHeight') AS screenHeight
,GET_JSON_OBJECT(json_build,'$.screenWidth') AS screenWidth
,GET_JSON_OBJECT(json_build,'$.browserName') AS browserName
,GET_JSON_OBJECT(json_build,'$.browserVersion') AS browserVersion
,GET_JSON_OBJECT(json_build,'$.browserWidth') AS browserWidth
,GET_JSON_OBJECT(json_build,'$.browserHeight') AS browserHeight
,GET_JSON_OBJECT(json_build,'$.ip') AS ip
,GET_JSON_OBJECT(json_build,'$.remoteIp') AS remoteIp
,GET_JSON_OBJECT(data_tmp,'$.actionName') AS actionName
,GET_JSON_OBJECT(data_tmp,'$.finishStatus') AS finishStatus
,GET_JSON_OBJECT(data_tmp,'$.isFirst') AS isFirst
,GET_JSON_OBJECT(data_tmp,'$.bankType') AS bankType
,GET_JSON_OBJECT(data_tmp,'$.book') AS book
,GET_JSON_OBJECT(data_tmp,'$.mode') AS mode
,GET_JSON_OBJECT(data_tmp,'$.chapter') AS chapter
,GET_JSON_OBJECT(data_tmp,'$.result') AS result
,GET_JSON_OBJECT(data_tmp,'$.knowledgeCount') AS knowledgeCount
,GET_JSON_OBJECT(data_tmp,'$.questCount') AS questCount
,GET_JSON_OBJECT(data_tmp,'$.scoreType') AS scoreType
,GET_JSON_OBJECT(data_tmp,'$.scoreModule') AS scoreModule
,GET_JSON_OBJECT(data_tmp,'$.appName') AS appName
,GET_JSON_OBJECT(data_tmp,'$.voteNumber') AS voteNumber
,GET_JSON_OBJECT(data_tmp,'$.perVoteNubmer') AS perVoteNubmer
,GET_JSON_OBJECT(data_tmp,'$.type') AS attributeType
--- 新增 2022-12-09 ----
,GET_JSON_OBJECT(data_tmp,'$.loginTypeName') AS loginTypeName
,GET_JSON_OBJECT(data_tmp,'$.name') AS noteName
,GET_JSON_OBJECT(data_tmp,'$.notes') AS notes
,GET_JSON_OBJECT(data_tmp,'$.pageNum') AS pageNum
,GET_JSON_OBJECT(data_tmp,'$.color') AS color
,GET_JSON_OBJECT(data_tmp,'$.event') AS event
,GET_JSON_OBJECT(data_tmp,'$.date') AS switchDate
,GET_JSON_OBJECT(data_tmp,'$.input') AS inputValue
,GET_JSON_OBJECT(data_tmp,'$.title') AS title
,GET_JSON_OBJECT(data_tmp,'$.fileName') AS fileName --文件名
-- 1.文档:doc、docx、PDF
-- 2.音频:WAV、ape、AIFF、CD、AU、MP3、WMA、VQF、FLAC、MIDI、Ogg、U-Law、VOC、aac、RA/.RM/.RAM
-- 3.视频:avi、MOV/.QT、MKV、MP4、WMV、MPEG、BD、HDVD、RMVB、PROPER、R5、Watermarks、TS、DAT、SWF、ASF、3GP、FLV、HDRIP、IMAX
-- 4.课件:ppt、pptx、pps、ppsx、ppa、ppam、pot、potx、thmx
-- 5.图片:Webp、BMP、PCX、TIF、GIF、JPEG、TGA、EXIF、FPX、SVG、PSD、CDR、PCD、DXF、UFO、EPS、AI、PNG、HDRI、RAW、WMF、FLIC、EMF、ICO
-- 6.表格:xls、csv、CSS、XPS、xlsm、et、
-- 7.压缩包:RAR、ZIP、ARJ、Z、LZH、JAR
-- 8.其他
,GET_JSON_OBJECT(data_tmp,'$.fileId') AS fileId
,GET_JSON_OBJECT(data_tmp,'$.fileNames') AS fileNames
,GET_JSON_OBJECT(data_tmp,'$.beginDate') AS beginDate
,GET_JSON_OBJECT(data_tmp,'$.endDate') AS endDate
,GET_JSON_OBJECT(data_tmp,'$.questionId') AS questionId --题号
,GET_JSON_OBJECT(data_tmp,'$.packageName') AS packageName
,GET_JSON_OBJECT(data_tmp,'$.versionName') AS versionName
,GET_JSON_OBJECT(data_tmp,'$.versionCode') AS versionCode
,GET_JSON_OBJECT(data_tmp,'$.jobId') AS jobId
,GET_JSON_OBJECT(data_tmp,'$.answer') AS answer
,GET_JSON_OBJECT(data_tmp,'$.wrong') AS wrong
,GET_JSON_OBJECT(data_tmp,'$.correct') AS correct
,GET_JSON_OBJECT(data_tmp,'$.unanswered') AS unanswered
,GET_JSON_OBJECT(data_tmp,'$.finishNumber') AS finishNumber
,GET_JSON_OBJECT(data_tmp,'$.totalNumber') AS totalNumber
,GET_JSON_OBJECT(data_tmp,'$.word') AS word
,GET_JSON_OBJECT(data_tmp,'$.msg') AS msg
,GET_JSON_OBJECT(data_tmp,'$.count') AS impCount
,GET_JSON_OBJECT(json_build,'$.pageHeight') AS pageHeight --页面高度
,GET_JSON_OBJECT(data_tmp,'$.answers') AS answers --答题情况
--新增--
,GET_JSON_OBJECT(data_tmp,'$.num') AS num --题目数量
,GET_JSON_OBJECT(data_tmp,'$.op') AS op --随机选人 选项 op(清除(NULL)、A、B、C) op(不随机(0)、1、2、3)
,GET_JSON_OBJECT(data_tmp,'$.leaveTime') AS leaveTime --收卷倒计时
,GET_JSON_OBJECT(data_tmp,'$.examId') AS examId --考试id
,GET_JSON_OBJECT(data_tmp,'$.id') AS idCode --id,用英文逗号隔开,组code
,GET_JSON_OBJECT(data_tmp,'$.code') AS code --对调学生
,GET_JSON_OBJECT(data_tmp,'$.rol') AS rol --对调学生 位置rol
,GET_JSON_OBJECT(data_tmp,'$.col') AS col --对调学生 位置col
,GET_JSON_OBJECT(data_tmp,'$.stage') AS stage --学段
,GET_JSON_OBJECT(data_tmp,'$.version') AS versions --学段
-- ,GET_JSON_OBJECT(data_tmp,'$.type') AS 见 attributeType --类型 type(1.批注作答 2.画板作答)
-- ,GET_JSON_OBJECT(data_tmp,'$.actionName') AS actionName --活动名称
-- ,GET_JSON_OBJECT(data_tmp,'$.answer') AS answer --答案
--,GET_JSON_OBJECT(data_tmp,'$.color') AS color --颜色
-- ,GET_JSON_OBJECT(data_tmp,'$.finishNumber') AS finishNumber --找到的数量
--,GET_JSON_OBJECT(data_tmp,'$.totalNumber') AS totalNumber --总词数
-- ,GET_JSON_OBJECT(data_tmp,'$.word') AS word --未答数
-- `completionStatus` varchar(100) DEFAULT NULL COMMENT '完成情况',
-- ,GET_JSON_OBJECT(data_tmp,'$.event') AS event --收起/展开事件
--,GET_JSON_OBJECT(data_tmp,'$.fileId') AS fileId --云端文件ID
--,GET_JSON_OBJECT(data_tmp,'$.fileNames') AS fileNames --文件名列表
--,GET_JSON_OBJECT(data_tmp,'$.fileName') AS fileName --文件名
--,GET_JSON_OBJECT(data_tmp,'$.date') AS dates --日期筛选类型
--,GET_JSON_OBJECT(data_tmp,'$.result') AS isfinish --完成情况 result:true/false
-- ,GET_JSON_OBJECT(data_tmp,'$.input') AS inputValue --输入值
--,GET_JSON_OBJECT(data_tmp,'$.jobId') AS jobId --作业ID
--,GET_JSON_OBJECT(data_tmp,'$.name') AS name --名称
--,GET_JSON_OBJECT(data_tmp,'$.questionId') AS questionId --题目ID
--`jobType` varchar(50) DEFAULT NULL COMMENT '作业类型',
--`noteName` varchar(50) DEFAULT NULL COMMENT '笔记本名称',
--`signName` varchar(100) DEFAULT NULL COMMENT '标签名',
--`switchDate` datetime DEFAULT NULL COMMENT '日期切换日期值',
--`thickNess` varchar(10) DEFAULT NULL COMMENT '粗细值',
--`timeSlot` varchar(10) DEFAULT NULL COMMENT '时间段',
--`toolName` varchar(50) DEFAULT NULL COMMENT '工具名称',
--`wrongBookName` varchar(50) DEFAULT NULL COMMENT '错题本名称',
-- ,GET_JSON_OBJECT(json_build,'$.loginTypeName') AS appcode
-- ,GET_JSON_OBJECT(json_build,'$.appVersion') AS appVersion
,createtime --创建时间
from (
select theid,
id,
name,
eventtime,
apptype,
regexp_replace(regexp_replace(regexp_replace(build,'^\\[',''),'\\]$',''),'},\\{','}|{') AS json_build,
spanid,
type,
appcode,
regexp_replace(regexp_replace(regexp_replace(data,'^\\[',''),'\\]$',''),'},\\{','}|{') AS json_data,
appversion,
appnum,
preid,
traceid,
createtime
from dw_es_action_log_inc_new
WHERE
-- DATETRUNC(eventtime,'hh') >= DATETRUNC(dateadd(TO_DATE('${cyctime}','yyyymmddhhmiss'), -1, 'hh'),'hh') or
DATETRUNC(createtime,'DD') >= DATETRUNC(TO_DATE('${bizdate}','yyyymmdd'),'DD') --测试使用
) a0
lateral view explode(split(json_data,'\\|')) b AS data_tmp;
从中可以发现,针对很多不同格式的 数据,可以进行这种分解处理。
select bh,bjmc,nj,xxbm,xxmc,xnid,xn,xnmc,xd,rnk from (SELECT bh,bjmc,nj,xxbm,xxmc,xnid,xn,xnmc,xd, Row_Number() OVER (partition by bh,xxbm ORDER BY nj desc) rnk
FROM dw_class where zt='1' and bjlxm = '1' and xnid <> '' ) aa where rnk='1'
同时可以使用Row_Number,进行数据处理,获取最大年级数据。
相关文章:

ES数据处理方法
由于日志数据存在ES项目里,需要从ES中获取日志进行分析,使用SQL数据进行处理,如下: select traceid-- STRING COMMENT 流程id, ,appnum -- BIGINT COMMENT 迭代号, ,appversion --STRING COMMENT APP版本, ,appc…...

STM32实现软件IIC协议操作OLED显示屏(2)
时间记录:2024/1/27 一、OLED相关介绍 (1)显示分辨率128*64点阵 (2)IIC作为从机的地址0x78 (3)操作步骤:主机先发送IIC起始信号S,然后发送OLED的地址0x78,然…...

【linux】远程桌面连接到Debian
远程桌面连接到Debian系统,可以使用以下几种工具: 1. VNC (Virtual Network Computing) VNC(Virtual Network Computing)是一种流行的远程桌面解决方案,它使用RFB(Remote Framebuffer Protocol࿰…...

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-菜单管理实现
锋哥原创的SpringbootLayui python222网站实战: python222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程(SpringBootPython爬虫实战) ( 火…...

JS之隐式转换与布尔判定
大家思考一下 [ ] [ ] ? 答案是空字符串 为什么呢? 当做加法运算的时候,发现左右两端存在非原始类型,也就是引用类型对象,就会对对象做隐式类型转换 如何执行的?或者说怎么查找的? 第一步&…...

ubuntu20根目录扩容
ubuntu根目录/ 或者 /home文件夹有时出现空间满了的情况,可以用gparted工具进行空间的重新分配。 首先,如果你是双系统,需要从windows系统下磁盘压缩分配一部分未使用的空间给ubuntu,注意压缩的空间要邻接ubuntu所在盘的位置。 …...

(四)DQL数据查询语言
基础语法 SELECT {*,列名,函数} FROM 表名 [WHERE 条件]; 说明: -SELECT检索关键字 *匹配所有列 , 匹配指定列 -FROM 所提供的数据源(表,视图,另一个查询机制反馈的结果) -WHERE 条件(控制查询的区…...

网络安全03---Nginx 解析漏洞复现
目录 一、准备环境 二、实验开始 2.1上传压缩包并解压 2.2进入目录,开始制作镜像 2.3可能会受之前环境影响,删除即可 编辑 2.4制作成功结果 2.5我们的环境一个nginx一个php 2.6访问漏洞 2.7漏洞触发结果 2.8上传代码不存在漏洞 2.9补充&#…...

第十四届蓝桥杯C组题目 三国游戏
4965. 三国游戏 - AcWing题库 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 00)。 游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分…...

【LeetCode-435】无重叠区间(贪心)
题目链接 题目简介 给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。 注意: 可以认为区间的终点总是大于它的起点。 区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。 示例 1: 输入: [ [1,2], [2,3], [3,4…...

写读后感的时候,可以适当地引用书中的内容吗?
写读后感时,适当地引用书中的内容是可以的,这样可以更好地支持你的观点和感受,增强文章的可信度和说服力。 引用书中的内容可以帮助读者更好地理解你所讨论的主题和人物,同时也可以展示你对原著的深入理解和阅读能力。但是&#…...

RockChip DRM Display Driver
资料来源: 《Rockchip_DRM_Display_Driver_Development_Guide_V1.0.pdf》 《Rockchip_Developer_Guide_DRM_Display_Driver_CN.pdf》 一:DRM概述 DRM(Direct Rendering Manager)直接渲染管理,buffer分配,帧缓冲。对应userspace库位libdrm,libdrm库提供了一系列友好的…...

【数据库】GaussDB数据类型和简单DDL概述
GaussDB是一款华为公司开发的关系型数据库管理系统(RDBMS),提供了多种数据类型用于存储和处理不同类型的数据。以下是GaussDB常见的数据类型: 1、GaussDB常见的数据类型 1.1、数值型(Numeric Types)&…...

malloc/free和new/delete相关问题:
面试题: 1、两种方式的区别: (1)malloc需要强制类型转换,new不需要 (2)malloc需要计算空间大小,new不需要 例如:创建5个int类型的空间 int*p(int *)malloc(sizeof(i…...

设计一套扑克牌
约束和假设 这是一幅用于类似扑克和二十一点等游戏的通用扑克牌吗? 我们可以假设这副牌有52张(2-10,杰克,女王,国王,埃斯)和4种花色吗? 我们可以假设输入是有效的,还是需…...

ubuntu20.04 外接hdmi没有声音
pulseaudio -k 请尝试执行该命令...

Mybatis 拦截器注册方式
在MyBatis中注册拦截器可以通过以下三种方式: 1. XML配置文件方式 在Mybatis的核心配置文件(mybatis-config.xml)中的标签下定义拦截器,并指定实现类。 <configuration><!-- ...其他配置... --><plugins><…...

[嵌入式软件][启蒙篇][仿真平台] STM32F103实现SPI控制OLED屏幕
上一篇: [嵌入式软件][启蒙篇][仿真平台] STM32F103实现LED、按键 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现串口输出输入、ADC采集 [嵌入式软件][启蒙篇][仿真平台]STM32F103实现定时器 [嵌入式软件][启蒙篇][仿真平台] STM32F103实现IIC控制OLED屏幕 文章目…...

个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程
个体诊所电子处方系统设计,社区门诊处方开单管理系统软件教程 一、前言 以下软件程序操作教程以 佳易王诊所电子处方管理系统软件V17.3为例说明 如图,在基本信息设置里,可以设置处方配方模板,这样在开电子处方的时候可以一键导入…...

数据结构(1)--> 顺序表
定义: 顺序表存储定义: 把逻辑上相邻的数据元素存储在物理上相邻的存储单元中的存储结构,顺序表功能的实现借助于数组,通过对数组进行封装,从而实现增删查改的功能,严格意义上来说(数组无法实现…...

排序算法经典模型: 梯度提升决策树(GBDT)的应用实战
目录 一、Boosting训练与预测 二、梯度增强的思想核心 三、如何构造弱学习器和加权平均的权重 四、损失函数 五、梯度增强决策树 六、GBDT生成新特征 主要思想 构造流程 七、梯度增强决策树以及在搜索的应用 7.1 GDBT模型调参 7.1.1 框架层面参数 n_estimators su…...

【揭秘】ForkJoinTask全面解析
内容摘要 ForkJoinTask的显著优点在于其高效的并行处理能力,它能够将复杂任务拆分成多个子任务,并利用多核处理器同时执行,从而显著提升计算性能,此外,ForkJoinTask还提供了简洁的API和强大的任务管理机制,…...

如何利用数据压缩提高高性能存储的效率?
在当前信息爆炸的时代,大数据存储和管理成为了各大企业和组织面临的重要挑战之一。高性能存储系统的效率对于数据处理和应用的性能至关重要。而数据压缩技术的应用可以在一定程度上提高高性能存储的效率。 数据压缩技术的作用 数据压缩是通过对数据进行编码和压缩…...

前端工程化之:webpack1-2(安装与使用)
一、webpack简介 webpack中文网 webpack 是基于模块化的打包(构建)工具,它把一切视为模块它通过一个开发时态的入口模块为起点,分析出所有的依赖关系,然后经过一系列的过程(压缩、合并),最终生成运行时态的文件。 webpack的特点&a…...

MySQL索引类型及数据结构【笔记】
1 索引类型 返回面试宝典 主键索引(PRIMARY):数据列不允许重复,不允许为NULL,一个表只能有一个主键。 唯一索引(UNIQUE):数据列不允许重复,允许为NULL,一个表允许多个列创建唯一索引…...

成熟的内外网数据交换方案,如何实现跨网传输?
网络迅速发展,我们可以从网络上查找到各式各样的信息,但是同时网络安全问题也随之严重。近几年,各种有关网络安全的新闻不断被报道,数据泄露给很多企业带来了严重打击,不仅是经济损失,严重者还会对企业的声…...

python11-Python的字符串之repr
有时候,我们需要将字符串与数值进行拼接,而 Python 不允许直接拼接数值和字符串,程序必须先将数值转换成字符串。 为了将数值转换成字符串,可以使用str0或repr()函数,例如如下代码。 # !/usr/bin/env python# -*- co…...

python小项目:口令保管箱
代码: #! python3 # python 编程-----口令保管箱passwords{emails: F7minlBDDuvMJuxESSKHFhTxFtjVB6,blog:VmALvQyKAxiVH5G8v01if1MLZF3sdt,luggage:12345,} import sys,pyperclip if len(sys.argv)<2:print(usage:python python3文件[accout]-copy accout pass…...

微认证 openEuler社区开源贡献实践
文章目录 1. 开源与开源社区2. openEuler 社区概述3.参与openEuler社区贡献4.openEuler软件包开发Linux软件管理——源码编译 1. 开源与开源社区 Richard Matthew Stallman,1983年9月推出GNU项目,并发起自由软件运动(free software movement或free/open…...

紫光展锐M6780丨超分辨率技术——画质重构还原经典
上一期,我们揭秘了让画质更加炫彩的AI-PQ技术。面对分辨率较低的老电影,光有高饱和度的色彩是不够的,如何能够提高视频影像的分辨率,使画质更加清晰,实现老片新看? 本期带大家揭晓紫光展锐首颗AI8K超高清智…...