scql
scql copied to clipboard
SCQL中心化部署中 如何导入外部数据库
我按照官网的 基于中心化部署的快速开始 在单机上部署的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.ta
和 demo.tb
不能满足我的需求,因此我在想如何能够将外部数据库导入到SCQL中。 我选取的数据库是 https://github.com/datacharmer/test_db.git,在该数据库的根目录下我找到了 employees.sql
配置文件和储存数据的 .dump
文件,并将他们移动到mysql/initdb/
目录下,如下图所示:
其中 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