DM8 数据库查询版本号以及授权到期时间SQL

1.查看操作系统信息

[root@localhost ~]# cat /etc/.kyinfo 
[dist]
name=Kylin
milestone=Server-V10-GFB-Release-ZF9_01-2204-Build03
arch=arm64
beta=False
time=2023-01-09 11:04:36
dist_id=Kylin-Server-V10-GFB-Release-ZF9_01-2204-Build03-arm64-2023-01-09 11:04:36

[servicekey]
key=0080176

[os]
to=
term=2024-05-16

2. 查看达梦数据库授权过期时间

[root@localhost bin]#./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 15.170(ms)
上次登录ip       : 
上次登录时间   : 
登录失败次数   : 0
口令是否过期   : 未过期
disql V8
SQL>select * from v$license;

行号     LIC_VERSION SERIES_NO  SERVER_SERIES SERVER_TYPE SERVER_VER EXPIRED_DATE AUTHORIZED_CUSTOMER      AUTHORIZED_USER_NUMBER
---------- ----------- ---------- ------------- ----------- ---------- ------------ ------------------------ ------------

先mysql中有一个字段的值是[{"param_name":"db_code_src","param_value":"doris_dc","required":1,"description":"数据库代号,如不清楚,可联系管理员"},{"param_name":"sql","param_value":"SELECT GROUP_CONCAT(position_id,',') AS position_id\nFROM\n (\n SELECT t1.position_id,SUM(open_pv) AS open_pv\n FROM ads_hd.dm_ad_position_hourly t1\n JOIN ctl_mysql_media.ads_media.app_entrance t2 ON t2.position_id=t1.position_id\n WHERE thedate>=%year%%month%%day%@-169hour AND thedate<=%year%%month%%day%@-1hour\n AND CONCAT(thedate+0,thehour)>=%year%%month%%day%%hour%@-169hour\n AND CONCAT(thedate+0,thehour)<%year%%month%%day%%hour%@-1hour\n GROUP BY position_id\n ) t\nWHERE open_pv>0 AND open_pv<1000","required":1,"description":"查询hive表格中的数据"},{"param_name":"redis_host","param_value":"r-bp1d0291c2eba514202.redis.rds.aliyuncs.com","required":1,"description":"redis账号"},{"param_name":"redis_port","param_value":"6379","required":1,"description":"redis端口"},{"param_name":"redis_password","param_value":"bxm1122AdnewZ05A02542R","required":1,"description":"redis密码"},{"param_name":"redis_db","param_value":"0","required":1,"description":"redis数据库"},{"param_name":"key","param_value":"AD:NEW:POSITIONS","required":1,"description":"key中的变量值要和sql中的字段一样,并用{}括住:例子:k:{k1}:{k2}"},{"param_name":"field","param_value":"","required":0,"description":"field中的变量值要和sql中的字段一样,并用{}括住:例子:field:{field},非hashKey可以不填写"},{"param_name":"value","param_value":"{position_id}","required":0,"description":"value中的变量值要和sql中的字段一样,并用{}括住:例子:{\"k\":{v},如果value最外层是{},那就要多写成{{\"k\":{v}}}"},{"param_name":"expire","param_value":"","description":"过期时间,格式:5s, 5m, 5h分别代表秒,分,时","required":0},{"param_name":"delete_field","param_value":"","description":"删除的数据标记,例子:data_type:1","required":0}],这个字段值中包含多个json对象,想要把这些json对象拆分开
03-25
<think>好的,用户之前询问过MySQL中的“炸裂函数”,现在他有一个具体的JSON数组需要拆分成多行。看起来他有一个包含多个JSON对象的字段,想要把这些对象拆分开成单独的行。首先,我需要确定用户使用的MySQL版本,因为处理JSON的功能在8.0及以上版本才有支持。如果用户使用的是8.0以上,推荐使用JSON_TABLE函数,这样效率更高也更方便。如果版本较低,可能需要用其他方法,比如递归CTE或者结合JSON函数。 用户提供的字段值是一个JSON数组,里面每个元素都是一个JSON对象。目标是将每个对象拆分为单独的行。首先,我需要验证这个JSON数组的格式是否正确,是否有正确的括号和引号。然后,根据MySQL版本选择合适的方法。假设用户使用的是MySQL 8.0+,JSON_TABLE是最佳选择。需要构造正确的JSON路径,提取每个对象的各个字段。用户可能还需要每个对象的各个参数,比如param_name, param_value等,所以需要确保查询能够正确提取这些字段。 另外,需要检查用户提供的示例数据是否有语法错误,比如转义字符是否正确,特别是SQL语句中的引号和换行符是否处理得当。在SQL查询中,可能需要使用适当的转义或者使用RAW_STRING来避免错误。此外,用户可能希望保留每个JSON对象中的所有字段,因此需要确保在JSON_TABLE中正确映射每个字段的路径和类型。 如果用户的数据量很大,还需要考虑性能问题,使用JSON_TABLE通常比递归CTE更高效。但也要注意,如果JSON数组非常庞大,可能会影响查询性能,这时候可能需要建议在应用层处理或者在ETL过程中预处理数据。 最后,需要给出一个清晰的示例,展示如何将用户提供的JSON数组拆分成多行,并提取所需的字段。同时,提醒用户注意版本兼容性和数据格式的正确性,避免常见的错误如JSON格式不正确或者路径错误。</think>在 MySQL 8.0+ 中,可以通过 `JSON_TABLE` 函数高效解析 JSON 数组。以下是针对该 JSON 数组字段的完整拆分方案: --- ### 一、数据结构分析 字段值为 **JSON 数组**,每个元素包含: ```json { "param_name": "...", "param_value": "...", "required": 0/1, "description": "..." } ``` --- ### 二、使用 JSON_TABLE 拆解步骤 #### 1. 基础拆分(提取所有字段) ```sql SELECT jt.param_name, jt.param_value, jt.required, jt.description FROM your_table, JSON_TABLE( your_json_column, -- 替换为实际字段名 '$[*]' COLUMNS ( param_name VARCHAR(255) PATH '$.param_name', param_value TEXT PATH '$.param_value', required TINYINT PATH '$.required', description TEXT PATH '$.description' ) ) AS jt; ``` #### 2. 输出示例 | param_name | param_value | required | description | |----------------|----------------------------------------------------------------------------|----------|-----------------------------------------------------------------------------| | db_code_src | doris_dc | 1 | 数据库代号,如不清楚,可联系管理员 | | sql | SELECT GROUP_CONCAT(...) | 1 | 查询hive表格中的数据 | | redis_host | r-bp1d0291c2eba514202.redis.rds.aliyuncs.com | 1 | redis账号 | --- ### 三、特别处理建议 #### 1. **SQL 语句换行符处理** 示例数据中的 `\n` 是转义后的换行符,实际存储时会变为普通字符。若需保留原始格式: ```sql REPLACE(jt.param_value, '\n', CHAR(10)) AS formatted_sql -- 转换为真实换行符 ``` #### 2. **动态参数标记识别** 针对 `param_value` 中的变量占位符(如 `%year%`、`{position_id}`): ```sql SELECT param_name, CASE WHEN param_value REGEXP '%[a-z_]+%' THEN '含动态参数' WHEN param_value REGEXP '\\{[^}]+\\}' THEN '含变量占位符' ELSE '静态值' END AS value_type FROM (...上文的 JSON_TABLE 查询...); ``` --- ### 四、低版本 MySQL 替代方案 若版本低于 8.0,使用 **字符串函数 + 数字辅助表**: ```sql SELECT JSON_EXTRACT(your_json_column, CONCAT('$[', n.num, ']')) AS json_obj, JSON_EXTRACT(JSON_EXTRACT(your_json_column, CONCAT('$[', n.num, ']')), '$.param_name') AS param_name FROM your_table CROSS JOIN ( SELECT 0 AS num UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 ) AS n WHERE n.num < JSON_LENGTH(your_json_column); ``` --- ### 五、性能优化建议 1. **数据预处理**:若频繁访问 JSON 字段,建议将数据解析后存入关系型结构 2. **虚拟列加速**(MySQL 8.0+): ```sql ALTER TABLE your_table ADD COLUMN parsed_params JSON GENERATED ALWAYS AS (JSON_EXTRACT(your_json_column, '$[*]')) VIRTUAL; ``` --- 如果需要进一步分析特定参数间的关联逻辑(如 `sql` 与 `key` 参数的变量映射关系),可提供更多业务场景描述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mindfulness code

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值