快速提示:将MongoDB JSON数据移至SINGLESTOREDB
#json #singlestoredb #mongodb

抽象的

singlestoredB是一个多模型数据库系统,支持存储和查询JSON数据的能力。在本文中,我们将看到将JSON数据库转储从MongoDB移至SinglestoredB的容易。

介绍

MongoDB为其数据库产品提供了几个示例数据集。在本文中,我们将研究如何将这些数据集之一获取并轻松地导入单骨。

创建一个SinglestoredB云帐户

previous article显示了创建免费的单粒云帐户所需的步骤。我们将使用 JSON DEMO Group 作为我们的工作区组名称, json-demo 作为我们的工作空间名称。我们会记下我们的密码主机名称。

MongoDB数据集

我们将使用MongoDB的restaurants数据集。它可以在github上广泛找到。结构非常平坦。这是数据集中的一个示例:

{
   "URL":"http://www.just-eat.co.uk/restaurants-cn-chinese-cardiff/menu",
   "_id":{
      "$oid":"55f14312c7447c3da7051b26"
   },
   "address":"228 City Road",
   "address line 2":"Cardiff",
   "name":".CN Chinese",
   "outcode":"CF24",
   "postcode":"3JH",
   "rating":5,
   "type_of_food":"Chinese"
}

singlestoredB可以处理更复杂的JSON,如文章Using SingleStore as a JSON Document Database所示。

将JSON数据加载到SinglestoredB

首先,让我们使用mySQL客户端连接到singlestoredB云:

mysql --local-infile \
      -u admin \
      -h <host> \
      -P 3306 \
      --default-auth=mysql_native_password \
      -p

<host>被从singlestoredb云中获得的值替换。

我们现在创建我们的数据库:

CREATE DATABASE json_demo;

将JSON数据加载到SinglestoredB中时,我们可以使用几种选项。让我们看一下本文中的两种可能性。

1.将JSON数据存储在单个表列中

在此选项中,JSON数据的每一行都存储在单个表列中。

首先,我们将创建一个数据库表:

USE json_demo;

CREATE TABLE test1 (
    whole JSON NOT NULL
);

通过使用NOT NULL,如果尝试存储无效的JSON,SINGLESTOREDB将引起错误。

接下来,我们将加载JSON数据如下:

LOAD DATA LOCAL INFILE '/path/to/restaurants.json'
INTO TABLE test1
FORMAT JSON (
    whole <- %
);

我们将替换为JSON文件所在位置的实际路径。

我们可以如下查询表:

SELECT * FROM test1 LIMIT 1\G

结果应与以下内容相似:

*************************** 1. row ***************************
whole: {"URL":"http://www.just-eat.co.uk/restaurants-007takeaway-s65/menu","_id":{"$oid":"55f14312c7447c3da7051b2b"},"address":"6 Drummond Street","address line 2":"Rotherham","name":"007 Takeaway","outcode":"S65","postcode":"1HY","rating":6,"type_of_food":"Pizza"}

2.将JSON数据存储在多个表列中

在此选项中,JSON数据的每一行都存储在多个表列中。

首先,我们将创建一个数据库表:

CREATE TABLE test2 (
    URL TEXT,
    id JSON NOT NULL,
    address1 TEXT,
    address2 TEXT,
    name TEXT,
    outcode TEXT,
    postcode TEXT,
    rating FLOAT,
    type_of_food TEXT
);

在这里,我们已将TEXT用于许多字段进行初始测试。

接下来,我们将加载JSON数据如下:

LOAD DATA LOCAL INFILE '/path/to/restaurants.json'
INTO TABLE test2
FORMAT JSON (
    URL <- URL default "",
    id <- _id,
    address1 <- address default "",
    address2 <- `address line 2` default "",
    name <- name default "",
    outcode <- outcode default "",
    postcode <- postcode default "",
    rating <- rating default NULL,
    type_of_food <- type_of_food default ""
);

我们可以如下查询表:

SELECT * FROM test2 LIMIT 1\G

结果应与以下内容相似:

*************************** 1. row ***************************
         URL: http://www.just-eat.co.uk/restaurants-328chineseonline-cf81/menu
          id: {"$oid":"55f14312c7447c3da7051b55"}
    address1: 2-4 Commercial Street
    address2: Aberbargoed
        name: 328 Chinese Online
     outcode: CF81
    postcode: 9BW
      rating: 5
type_of_food: Chinese

概括

singlestoredB是一种非常有能力且灵活的数据库产品,并支持JSON数据。在这篇简短的文章中,我们看到了两个在SingleStoredB中存储MongoDB JSON数据的选项。 documentation包含更多细节和示例。