如何在mysql中向表的列中插入向量?

zxlwwiss  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(358)

在r中,我有一个向量“myvector”,字符串,我想把它插入mysql表“mytable”的列“mycolumn”中。我知道我可以编写sql查询并使用dbsendquery在r中运行它。所以,让我们先找出sql查询。举个例子:

myVector = c("hi","I", "am")

让我们在mytable的mycolumn列中插入myvector,行号从3到5,这里是sql查询,除了我不知道的最后一行之外,它还能工作:

UPDATE myTable t JOIN
       (SELECT id
        FROM myTable tt
        LIMIT 3, 3
       ) tt
       ON tt.id = t.id
    SET myColumn = myVector;

谢谢

bvn4nwqk

bvn4nwqk1#

你应该做的是导出你的 R 矢量组件 JSON 使用 toJSON() 函数,例如:

myJSONVector = toJSON(c("hi","I", "am"))

也可以创建或更改 myTable 以便 myColumn 有适当的 JSON Data Type 如果值是有效的json值,则尝试将值插入json列会成功,如果不是,则会失败:
例子

CREATE TABLE `myTable` (`myColumn` JSON);
INSERT INTO `myTable` VALUES(myJSONVector); // will fail if myJSONVector is not valid JSON
// update query would be
UPDATE `myTable` SET `myColumn` = myJSONVector
WHERE `id` IN (3,4,5);

此外,你还可以 R 矢量自 JSON 使用函数 fromJSON() .

dw1jzc5e

dw1jzc5e2#

我不知道,如果mysql支持 Vector 数据类型,但您可以将表设计为解决方法 Vector 可以存储在不同的表中并与 myTable 作为 1-M .
这有助于您轻松管理和检索详细信息。所以,假设 myTable 是您的table,它的现有设计是:

myTable
-------
id
col1
vectorCol

所以,你的主桌可以

CREATE TABLE myTable (
    id        INT NOT NULL AUTO_INCREMENT,
    col1  varchar(50),
    PRIMARY KEY (id)
);

以及存储向量的表。

CREATE TABLE vectorTab ( 
    id    INT NOT NULL AUTO_INCREMENT, -- in case ordering matter
    parent_id        INT NOT NULL, 
    value     TEXT,
    PRIMARY KEY (id),
    FOREIGN KEY (parent_id) REFERENCES myTable (id) ON DELETE CASCADE ON UPDATE CASCADE
);
jm81lzqq

jm81lzqq3#

假设我正确理解你的问题,我有两个可能的解决方案:
1每个元素一列:如果你的向量都有相同数量的元素,你可以把它们存储在一个单独的列中。从上面的示例开始,表可以如下所示(列的大小以及是否允许空值取决于您的数据)

CREATE TABLE `myTable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `element1` varchar(255) DEFAULT NULL,
  `element2` varchar(255) DEFAULT NULL,
  `element3` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

从上面插入向量的语句是:

INSERT INTO `myTable` (`id`, `element1`, `element2`, `element3`)
VALUES (1, 'hi', 'I', 'am');

根据向量中有多少元素,这种方法可能或多或少适用。
2将向量存储为blob:另一种方法是将向量存储为blob。blob(二进制大对象)是一种数据类型,用于存储数量可变的(二进制)数据(请参见:https://dev.mysql.com/doc/refman/5.7/en/blob.html). 这个想法来自于这篇文章:http://jfaganuk.github.io/2015/01/12/storing-r-objects-in-sqlite-tables/
可以使用以下语句创建表:

CREATE TABLE `myTable` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `myVector` blob,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

插入向量时,将变量绑定到查询。由于我不是一个rMaven,我将参考本文了解实现细节。

相关问题