达梦数据库处理JSON文本的方法

JSON是基于纯文本的轻量级数据交换格式,在web应用端有广泛的应用。在DM中JSON数据以字符串类型储存,可以支持对于要存入的JSON数据格式的正确性检查,存储JSON数据并提供函数对于JSON文本进行查询。下面用几个例子来说明在DM中操作JSON文本的方法。

创建TEST1表并在TEST1表中存储JSON文本,INFO列的数据类型需要为字符类型,可以选择varchar、varchar2、char、clob等作为储存字段的数据类型。

create table TEST1 (INFO varchar(100));
insert into TEST1 values ('{"db_name":"DM","version":8}');
select * from TEST1;

在这里插入图片描述

对于储存下来的JSON数据,DM提供了函数json_value和json_query对于JSON文本中的值进行查询。现运用json_value函数查询键为db_name所对应的值。使用函数json_value必须给定两个参数,第一个为查询表中的列名,第二个为查找值的路径表达式。在路径中array对象和object对象必须以“$”开头。

select json_value(INFO,'$.db_name') from TEST1;

在这里插入图片描述
通过查询可以获取到db_name所对应的值为“DM”。除了如上例中object对象外,DM还可以存储array对象并查询array中的值。数组的下标从0开始,利用“[下标]”的方式可以查找到对应的值。

create table TEST2 (INFO char(100));
insert into TEST2 values ('["DAMENG",8,true,null]'); 
select * from TEST2;

在这里插入图片描述

 select json_value(INFO,'$[0]') from TEST2;

在这里插入图片描述
对于需要储存的数据检查其是否为json文本,可以加入IS JSON条件进行判断。可以在建表的过程中加入到检查约束中进行判断,也可以在插入数据时添加条件,对于插入的数据进行筛选。

create table TEST3(ID int,INFO varchar(100) constraint json_check check (INFO is json));
insert into TEST3 values (1,'{"db_name":"DM","version":8}');

在这里插入图片描述
符合json数据格式的值会被存储下来,而错误的格式在插入数据时不能满足IS JSON的检查约束,会提示“违反CHECK约束[JSON_CHECK]”。

insert into TEST3 values (2,'{"db_name":"DM","version":8,????:!!!!}');

在这里插入图片描述

 insert into TEST3 values (3,'DAMENG');

在这里插入图片描述
如果不添加约束,也可以在条件中筛选json格式的数据,例如在下面的示例中我们创建TEST4表,并插入四行数据,其中两行符合json数据的合法性。

create table TEST4(ID int,INFO varchar(100));
insert into TEST4 values (1,'{"db_name":"DM","version":8}');
insert into TEST4 values (2,'{"db_name":"DM","version":8,????:!!!!}');
insert into TEST4 values (3,'DAMENG');
insert into TEST4 values (4,'["DAMENG",8,true,null]');

而在创建TEST5表的时候在where子句中带上对于json数据的检查条件,可以仅将符合json数据插入到TEST5中。

create table TEST5 as select * from TEST4 where INFO is json;
select * from TEST5;

在这里插入图片描述
在筛选时也可以指定条件为IS NOT JSON来排除掉json格式的数据。

insert into TEST5 select * from TEST4 where INFO is not json;
select * from TEST5;

在这里插入图片描述

函数json_query的参数必选项与json_value相似,都需要列名与路径表达式。而不同的是json_query返回单值或多值,在返回多值时必须指定WITH WRAPPER。json_query函数返回的结果是数组类型。

create table TEST6 (ID int,INFO varchar(100));
insert into TEST6 values (1,'{"db_name":"DM","edition":"开发版"}');
insert into TEST6 values (2,'{"db_name":"DM","edition":"标准版"}');
insert into TEST6 values (3,'{"db_name":"DM","edition":"企业版"}');
insert into TEST6 values (4,'{"db_name":"DM","edition":"安全版"}');
select json_query(INFO,'$.edition' with wrapper) from TEST6;

在这里插入图片描述
对于带有json数据的检查约束进行查询,可以通过数据字典user_json_columns、all_json_columns、dba_json_columns查询到相关的结果。在前面的例子中TEST3表添加了列级的检查约束用于检查该列json格式的合法性,以查询all_json_columns为例,查询结果如下:

select * from all_json_columns;

在这里插入图片描述
而对于与JSON相关的表级约束,如果约束中的判断条件为“与”关系,则在数据字典all_json_columns中相关列的信息都会显示在其中;而如果约束中判断条件为“或”关系,则两者都不会在all_json_columns中体现,即使“或”关系中两者的判断条件都是IS JSON。而IS NOT JSON的条件在无论是单独的约束,或者和其他条件以“与”或者“或”关系一起进行组成约束条件,都不会在all_json_columns中出现。

create table TEST7 (ID int,INFO varchar(100));
alter table TEST7 add constraint json_check1 check (ID ='1' and INFO is json);

create table TEST8 (name varchar(100),INFO varchar(100));
alter table TEST8 add constraint json_check3 check (NAME is json or INFO is json);

select * from all_json_columns;

在这里插入图片描述
从结果中可以看到TEST7的两列都在all_json_columns中,而TEST8中约束条件里的列都不在all_json_columns中,因此有可能部分约束中对于是否json数据的判断起到了约束作用,而all_json_columns中没有反映出,我们在设置json的约束时应该注意到这一点。

### 使用 Swift 对 DeepSeek 大语言模型进行微调 目前关于使用 Swift 编程语言直接对 DeepSeek 的大语言模型(如 DeepSeek R1)进行微调的具体方法尚未有官方支持或广泛讨论[^1]。然而,可以基于现有的 Python 工具链以及跨平台框架来实现这一目标。 #### 跨平台工具的支持 尽管主流的大规模语言模型微调流程通常依赖于 Python 生态中的库(例如 Hugging Face Transformers 和 PyTorch),但可以通过以下方式间接利用 Swift 进行操作: 1. **借助 TensorFlow 或 ONNX 实现桥接** 如果希望在 Swift 中处理深度学习任务,TensorFlow 提供了一个较为成熟的 Swift API 支持环境。通过将预训练的 DeepSeek 模型导出为 ONNX 格式并加载到 TensorFlow-Swift 环境中,可以在一定程度上完成参数调整的任务[^2]。 2. **远程服务化接口设计** 利用 vllm serve 命令启动的服务端口作为中间层,允许前端应用以 RESTful API 形式发送请求给后端运行的 GPU 加速推理引擎。此时虽然主要逻辑仍由 Python 执行,但是客户端部分完全可以采用 Swift 开发移动应用程序或者桌面软件界面。 #### 示例代码片段展示 以下是假设场景下的一段伪代码表示如何可能设置这样的工作流: ```swift import Foundation // Assume we have a library that can interact with the model server. let client = ModelClient(baseURL: URL(string:"http://localhost:8000")!) func fineTuneModel(dataSetPath:String){ do { let response = try client.post(path: "/finetune", body:["dataset": dataSetPath]) print(response.text) } catch(let error){ print(error.localizedDescription) } } ``` 此脚本仅用于说明目的,在实际开发过程中还需要考虑更多细节比如错误处理机制、并发控制等方面的内容。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值