scql icon indicating copy to clipboard operation
scql copied to clipboard

SCQL中心化部署中 如何导入外部数据库

Open sabakioukenasai opened this issue 5 months ago • 7 comments

我按照官网的 基于中心化部署的快速开始 在单机上部署的SCQL系统。 注意到该手册的步骤中有一步是由alice创建了表格ta,指令如下:

CREATE TABLE demo.ta (ID string, credit_rank int, income int, age int) REF_TABLE=alice.user_credit DB_TYPE='mysql';

通过查看文件我发现 mysql/initdb/ 目录下的 alice_init.sql文件,该文件创建了一个表格 alice.user_credit 并且在该表格中插入了一些数据。上述指令在创建表格 demo.ta 时使用 REF_TABLE 将这两个表格关联到了一起。

我希望在SCQL中进行大数据集测试,而现有的 demo.tademo.tb 不能满足我的需求,因此我在想如何能够将外部数据库导入到SCQL中。 我选取的数据库是 https://github.com/datacharmer/test_db.git,在该数据库的根目录下我找到了 employees.sql 配置文件和储存数据的 .dump 文件,并将他们移动到mysql/initdb/ 目录下,如下图所示: image

其中 employees.sql 文件的部分内容如下:

DROP DATABASE IF EXISTS `employees`;
CREATE DATABASE IF NOT EXISTS `employees`;
USE `employees`;

SELECT 'CREATING DATABASE STRUCTURE' as 'INFO';

DROP TABLE IF EXISTS dept_emp,
                     dept_manager,
                     titles,
                     salaries, 
                     employees, 
                     departments;

CREATE TABLE departments (
    dept_no     CHAR(4)         NOT NULL,
    dept_name   VARCHAR(40)     NOT NULL,
    PRIMARY KEY (dept_no),
    UNIQUE  KEY (dept_name)
);

# -- snip --
SELECT 'LOADING departments' as 'INFO';
source load_departments.dump ;

参考前文创建表格 demo.ta 语法格式,我切换到用户alice创建了表格 demo.departments

CREATE TABLE demo.departments (dept_no string, dept_name string) REF_TABLE=employees.departments DB_TYPE='mysql';

并且赋予了用户 alice 响应CCL权限

GRANT SELECT PLAINTEXT(dept_no, dept_name) on demo.departments TO alice

此时可以使用 DESCRIBE demo.departments 查看到该表信息

alice> DESCRIBE demo.departments
[fetch]
2 rows in set: (5.099977ms)
+-----------+--------+
|   Field   |  Type  |
+-----------+--------+
| dept_no   | string |
| dept_name | string |
+-----------+--------+

但是最后在使用alice对该表进行查询时却无法成功,它提示我找不到数据库 employees这里我不知道应该如何解决,不知道还有哪些细节没有做好呢

alice> SELECT * FROM demo.departments
[fetch]err: Code: 320, message:RunExecutionPlan run jobs(785aac04-7051-11ef-a51f-0242ac120003) failed, catch std::exception=[engine/datasource/odbc_adaptor.cc:44] catch unexpected Poco::Data::DataException: MySQL: [MySQL]: [Comment]: mysql_stmt_prepare error    [mysql_stmt_error]: Unknown database 'employees'        [mysql_stmt_errno]: 1049        [mysql_stmt_sqlstate]: 42000    [statemnt]: select departments.dept_name,departments.dept_no from employees.departments

sabakioukenasai avatar Sep 11 '24 15:09 sabakioukenasai