库DeepSQL特性实现DB4AI功能,即在数据库内实现AI算法,以更好的支撑大数据的快速分析和计算。这里提供了一整套基于SQL的机器学习、数据挖掘以及统计学的算法,用户可以直接使用SQL进行机。..
概述
环境部署
使用指导
最佳实践
常见问题处理
一、概述
DeepSQL是对openGauss DB4AI能力的增强,让对MADLib比较熟悉的数据分析师或开发者可以轻松迁移到openGauss上进行工作。DeepSQL将常用的机器学习算法封装为SQL语句,支持60多个常用算法。其中包括回归算法(例如线性回归,逻辑回归,随机森林等)、分类算法(比如KNN等)、聚类算法(比如K-means)等。除了基础的机器学习算法之外,还包括图相关的算法,比如最短路径,图形直径等等算法;此外还支持数据处理(比如PCA),稀疏向量,统计学常用算法(比如协方差,Pearson系数计算等),训练集测试集分割方法,交叉验证方法等。
表 1 支持的机器学习算法 - 回归类算法
算法中文名称
算法英文名称
应用场景
逻辑回归
Logistic Regression
例如寻找某疾病的危险因素,金融商业机构需要对企业进行评估等。 预测:根据模型预测同的自变量情况下某病或某情况的发生概率。 判别:实际上跟预测类似,也是根据模型判断某人属于某病或属于某种情况的概率有多大,即判断某有多大可能是属于某病。
Cox比例风险回归
Cox Proportional Hazards Regression
该模型以生存结局和生存时间为因变量,可同时分析众多因素对生存期的影响,能分析带有截尾生存时间的资料,且不要求估计资料的生存分布类型。由于上述优良性质,该模型自问世以来,在医学类研究中得到广泛的应用,是迄今生存分析中应用最多的多因素分析方法。
弹性网络回归
Elastic Net Regularization
弹性回归是岭回归和套索回归的混合技术,它同时使用 L2 和 L1 正则化。当有多个相关的特征时,套索回归很可能随机选择其中一个,而弹性回归很可能都会选择。
广义线性模型
Generalized Linear Models
在一些实际问题中,变量间的关系并不都是线性的,这种情况就应该用曲线去进行拟合。
边际效应
Marginal Effects
提供边际效应的计算。
多类回归
Multinomial Regression
如果目标类别数超过两个,这时就需要使用多类回归,如疗效可能是“无效”,“显效”,“痊愈”三类。
序数回归
Ordinal Regression
在统计学中,序数回归是一种用于预测序数变量的回归分析,即其值存在于任意范围内的变量,不同值之间的度量距离也不同。它可以被认为是介于回归和分类之间的一类问题。例如,病情的分级(1、2、3、4级),症状的感觉分级(不痛、微痛、较痛和剧痛),对药物剂量反应的分级(无效、微效、中效和高效)等等。不同级别之间的差异不一定相等,如不痛与微痛的差值不一定等于较痛与剧痛的差值。
聚类方差
Clustered Variance
Clustered Variance模块调整聚类的标准误差。例如,将一个数据集合复制100次,不应该增加参数估计的精度,但是在符合独立同分布假设(Independent Identically Distributed,IID)下执行这个过程实际上会提高精度。
稳健方差
Robust Variance
Robust Variance模块中的函数用于计算线性回归、逻辑回归、多类逻辑回归和Cox比例风险回归的稳健方差(Huber-White估计)。它们可用于计算具有潜在噪声异常值的数据集中数据的差异。
支持向量机
1 | Support Vector Machines(SVM) |
用于文本和超文本的分类、图像分类,比起传统的查询优化方案,支持向量机能够获取明显更高的搜索准确度。这同样也适用于图像分割系统。
线性回归
Linear Regression
应用广泛,例如经济学、金融学等。
表 2 支持的机器学习算法 - 其他监督学习
算法名称(中文)
算法名称(英文)
应用场景
决策树
Decision Tree
最为广泛的归纳推理算法之一,处理类别型或连续型变量的分类预测问题,可以用图形和if-then的规则表示模型,可读性较高。
随机森林
Random Forest
随机森林是一类专门为决策树分类器设计的组合方法。它组合多棵决策树作出的预测。
条件随机场
1 | Conditional Random Field (CRF) |
条件随机场(CRF)是一种判别的,无向概率的图形模型。线性链CRF是一种特殊类型的CRF,它假定当前状态仅取决于先前的状态。在分词、词性标注和命名实体识别等序列标注任务中取得了很好的效果。
朴素贝叶斯
Naive Bayes
通过计算概率来进行分类,可以用来处理多分类问题,比如:垃圾邮件过滤器。
神经网络
Neural Networks
拥有广泛的应用场景,譬如语音识别、图像识别、机器翻译等等。在模式识别的领域中算是标准监督学习算法,并在计算神经学中,持续成为被研究的课题。MLP已被证明是一种通用的函数近似方法,可以被用来拟合复杂的函数或解决分类问题。
k临近算法
k-Nearest Neighbors
K近邻分类方法通过计算每个训练样例到待分类样品的距离,取和待分类样品距离最近的K个训练样例,K个样品中哪个类别的训练样例占多数,则待分类元组就属于哪个类别。 可用于:文字识别,面部识别,基因模式识别,客户流失预测、欺诈侦测。
表 3 支持的机器学习算法 - 数据处理类算法
应用场景
数组操作
Array Operations
数组、向量操作运算,包括基础的加减乘除、幂运算、开方、cos、sin、绝对值、方差等。
主成成分分析
1 | Dimensionality Reduction (PCA) |
降维,计算主成分。
变量编码
Encoding Categorical Variables
当前支持one-hot和dummy编码技术。 当需要用一组特定的预测变量与其它预测变量组作比较时,通常使用哑编码(dummy coding),与之比较的变量组称为参照组。One-hot编码与哑编码类似,两者的区别是前者为每种分类值建立数字类型的0/1指示列。在每行数据中(对应一个数据点),只有一个分类编码列的值可以为1。
矩阵操作
Matrix Operations
1 | 运用矩阵分解,将大型矩阵分解成简单矩阵的乘积形式,则可大大降低计算的难度以及计算量。 矩阵加减乘除、最值、均值、求秩、求逆、矩阵分解(QR,LU,Cholesky),特征提取。 |
规范化和距离函数
Norms and Distance Functions
求范数,余弦相似度,向量间距离。
稀疏向量
Sparse Vectors
实现稀疏向量类型,如果向量中重复值较多,可以用来压缩储存节省空间。
透视图
Pivot
透视表或枢轴表,通常用来实现OLAP或报表系统中一类常见的行列转置需求。pivot函数能够对一个表中存储的数据执行基本行转列操作,并将汇总后的结果输出到另一个表中。使行列转置操作变得更为简单与灵活。
模式匹配
Path
是在一系列行上执行常规模式匹配,并提取有关模式匹配的有用信息。有用的信息可以是简单的匹配计数或更多涉及的内容,如聚合或窗口函数。
会话
Sessionize
会话化功能对包括事件序列的数据集执行面向时间的会话重建。定义的不活动时段表示一个会话结束和下一个会话的开始。 可以用于:网络分析,网络安全,制造,财务和运营分析。
共轭梯度法
Conjugate gradient
求解系数矩阵为对称正定矩阵的线性方程组的数值解的方法。
词干提取
Stemming
词干提取简单说就是找出单词中的词干部分,场景比如:搜索引擎建立网页主题概念。 在英文网站优化作用明显,对其他语言有借鉴意义。
训练集测试集分割
Train-Test Split
分割数据集,把一份数据集划分成训练集和测试集,train的部分用于训练,test部分用于验证。
交叉验证
Cross Validation
交叉验证。
预测指标
Prediction Metrics
用于评估模型预测的质量,包括均方误差,AUC值、混淆矩阵、修正R方等用于评价模型的函数。
小批量预处理
Mini-Batch Preprocessor
把数据打包成小份进行训练,优点是它可以比随机梯度下降(默认MADlib优化器)表现更好,会更快更平滑的收敛。
表 4 支持的机器学习算法 - 图类
应用场景
所有对间最短路径
1 | All Pairs Shortest Path (APSP) |
所有对最短路径(APSP)算法找到所有顶点对之间的最短路径的长度(总和权重),使得路径边缘的权重之和最小化。
广度优先算法
Breadth-First Search
广度优先算法遍历路径。
超链接诱导主题搜索
1 | Hyperlink-Induced Topic Search (HITS) |
HITS算法输出每个节点的authority评分和hub评分,其中authority评分给出页面内容的分数,hub评估出连接到其他页面的分数。
平均路径长度
Average Path Length
此函数计算每对顶点之间的最短路径的平均值。平均路径长度基于“可到达的目标顶点”,因此它忽略了未连接的顶点之间的无限长度路径。
中心性
Closeness Centrality
接近度度量是和的倒数,平均值的倒数,以及到所有可到达目标顶点(不包括源顶点)的最短距离的倒数之和。
图表直径
Graph Diameter
直径被定义为图中所有最短路径中最长的。
入度出度
In-Out Degree
计算图中每个点的入度出度,入度指指向此点的边的数量,出度指此点指向其他点的边的数量。
网页排名
PageRank
给定图形,给定图形,PageRank算法输出概率分布,该概率分布表示随机遍历图形的人将到达任何特定顶点的可能性。
单源最短路径
1 | Single Source Shortest Path (SSSP) |
给定图形和源顶点,单源最短路径(SSSP)算法找到从源顶点到图中的每个其他顶点的路径,使得路径边缘的权重之和最小化(每条边权值非负)。
弱连通分量
Weakly Connected Component
给定有向图,弱连通分量(WCC)是原始图的子图,其中所有顶点通过某个路径彼此连接,忽略边的方向。在无向图的情况下,弱连通分量也是强连通分量。该模块还包括许多在WCC输出上运行的辅助函数。
表 5 支持的机器学习算法 - 时间序列
应用场景
差分整合移动平均自回归模型
1 | Autoregressive Integrated Moving Average model(ARIMA) |
时间序列预测,用于理解和预测一系列数据的未来值。 比如:国际航空旅客数据,预测旅客人数。
表 6 支持的机器学习算法 - 采样
应用场景
采样函数
sample
抽样。
分层抽样
Stratified Sampling
分层随机抽样,又称类型随机抽样,它是先将总体各单位按一定标准分成各种类型(或层);然后根据各类型单位数与总体单位数的比例,确定从各类型中抽取样本单位的数量;最后,按照随机原则从各类型中抽取样本。
对称抽样
Balanced Sampling
一些分类算法仅在每个类中的样本数大致相同时才最佳地执行。高度偏斜的数据集在许多领域中是常见的(例如,欺诈检测),因此重新采样以抵消这种不平衡可以产生更好的决策边界。
表 7 支持的机器学习算法 - 统计学
应用场景
汇总统计函数
Summary
生成任何数据表的摘要统计信息。
协方差和相关系数
Correlation and Covariance
描述性统计,求Pearson系数,相关系数,另一个输出协方差。了解数据从统计学上反映的量的特征,以便我们更好地认识这些将要被挖掘的数据。
统计频率算法
1 | CountMin (Cormode-Muthukrishnan) |
统计一个实时的数据流中元素出现的频率,并且准备随时回答某个元素出现的频率,不需要的精确的计数。
基数估计算法
1 | FM (Flajolet-Martin) |
获取指定列中的不同值的数量。 找出这个数字集合中不重复的数字的个数。
最频繁值
1 | MFV (Most Frequent Values) |
计算频繁值的场景。
假设检验
Hypothesis Tests
包含F-test,chi2-test等。
概率函数
Probability Functions
概率函数模块为各种概率分布提供累积分布,密度、质量和分位数函数。
表 8 支持的机器学习算法 - 其他算法
应用场景
k-聚类算法
K-means
聚类场景。
隐含狄利克雷分布
1 | Latent Dirichlet Allocation (LDA) |
LDA 在主题模型中占有非常重要的地位,常用来文本分类。
关联规则算法
Apriori Algorithm
关联规则算法,关联规则挖掘的目标是发现数据项集之间的关联关系。比如经典的“啤酒和尿布”。
二、环境部署
DeepSQL环境包括编译数据库和安装算法库两个部分。
2.1 前提条件
环境中安装python2.7.12以上版本Python。
数据库需要开启对PL/Python存储过程的支持。
安装算法库需要拥有管理员权限的用户。
2.2 操作步骤
检查部署Python环境。 安装前,请查看系统安装的python版本,当前DeepSQL需要python2.7.12以上版本的环境。
如果当前系统python2版本高于2.7.12,可以直接安装python-devel包。
如果版本过低,或者无法安装python-devel包,可以下载最新python2源码,手动配置编译python2,并配置环境变量。
算法库中,部分算法调用了python包,如numpy,pandas等。用户可以安装以下python库:
1 | pip install numpy |
编译部署数据库。 数据库需要开启对PL/Python存储过程的支持。默认编译数据库,不包含此模块。因此需要编译数据库时,在configure阶段,加入–with-python参数; 其他编译保持步骤不变; 编译完成后,需要重新gs_initdb; 默认PL/Python存储过程模块不被加载,请执行“CREATE EXTENSION plpythonu”来加载模块。
算法库编译和安装。 算法库使用开源的MADlib机器学习框架。源码包和相应patch可以从第三方库的代码仓库里获取。安装命令如下:
1 | tar -zxf apache-madlib-1.17.0-src.tar.gz |
1 | 其中, {YOUR_MADLIB_INSTALL_FOLDER}需要改为用户的实际安装路径。 |
将算法库安装到数据库中。
1 | a。进入{YOUR_MADLIB_INSTALL_FOLDER}路径。 |
b。进入bin文件夹。
c。执行如下命令。
1 | ./madpack -s <SCHEMA_NAME> -p opengauss -c <USER_NAME>@127.0.0.1:<PORT>/<DATABASE_NAME> install |
1 |
|
RETURNS return-type
AS $$
PL/Python function body
1 | $$ LANGUAGE plpythonu; |
1 |
|
3.2 数据库Null, None和空串处理
如果向函数传递了一个SQL null值,参数值在Python中将会显示为None。在数据库中,不同的兼容性下,空串的行为会被当做NULL处理。
同一个函数,在不同的兼容性下表现不同。
1 | CREATE FUNCTION quote(t text, how text) RETURNS text AS $$ |
else:
1 | raise plpy.Error("unrecognized quote type %s" % how) |
`示例1:```sql
1 | SELECT quote(t, 'literal') FROM (VALUES ('abc'),('a''bc'),('''abc'''),(''),(''''),('xyzv')) AS v(t); |
1 |
|
referenced column: quote
`兼容性为B时,返回结果如下:```java
quote
‘abc’
‘a’’bc’
‘’’abc’’’
‘’
‘’’’
‘xyzv’
1 | (6 rows) |
`示例2:```sql
1 | SELECT quote(t, 'nullable') FROM (VALUES ('abc'),('a''bc'),('''abc'''),(''),(''''),(NULL)) AS v(t); |
1 |
|
可以看到,在兼容性“A”中,空串被当为NULL了。
3.3 触发器
当前PL/Python存储过程中,不支持触发器功能。
3.4 匿名代码块
PL/Python也支持DO声明的匿名代码块:
DO $$
PL/Python code
1 |
|
gbdt不需要额外安装其他库。
四、最佳实践
本章节介绍部分算法的使用,主要包含分类、回归、聚类、gbdt算法、xgboost算法和prohpet算法。
首先需要创建一个数据库,并安装算法。
1 | CREATE database test1 dbcompatibility='B'; |
./madpack -s madlib -p opengauss -c opg@127.0.0.1:7651/test1 install
1 |
|
其他参 除了指定不同的核方法外,还可以指定迭代次数,初始参数,比如init_stepsize, max_iter, class_weight等。
4.2 回归算法
我们以线性回归预测波士顿房价为例:
数据集准备。 同svm的数据集,请参见1。
训练模型。
1 | DROP TABLE IF EXISTS houses_linregr, houses_linregr_summary; |
`查看模型内容。```sql
\x ON
1 | SELECT * FROM houses_linregr; |
\x OFF
`返回结果如下。```java
-[ RECORD 1 ]————+—————————————————————————————————————————————————————————————————————————————————————————————————
1 | coef | {-12849.4168959872,28.9613922651775,10181.6290712649,50.516894915353} |
r2 | .768577580597462
1 | std_err | {33453.0344331377,15.8992104963991,19437.7710925915,32.9280231740856} |
condition_no | 9002.50457069858
num_rows_processed | 15
num_missing_rows_skipped | 0
1 | variance_covariance | { |
`预测,并对比结果。```sql
1 | SELECT houses.*, |
id | tax | bedroom | bath | price | size | lot | predict | residual
—-+——+———+——+——–+——+——-+——————+——————-
1 | 590 | 2 | 1 | 50000 | 770 | 22100 | 53317.4426965543 | -3317.44269655428
2 | 1050 | 3 | 2 | 85000 | 1410 | 12000 | 109152.124955627 | -24152.1249556268
3 | 20 | 3 | 1 | 22500 | 1060 | 3500 | 51459.3486308555 | -28959.3486308555
4 | 870 | 2 | 2 | 90000 | 1300 | 17500 | 98382.215907206 | -8382.21590720599
5 | 1320 | 3 | 2 | 133000 | 1500 | 30000 | 121518.221409606 | 11481.7785903935
6 | 1350 | 2 | 1 | 90500 | 820 | 25700 | 77853.9455638568 | 12646.0544361432
7 | 2790 | 3 | 2.5 | 260000 | 2130 | 25000 | 201007.926371722 | 58992.0736282778
8 | 680 | 2 | 1 | 142500 | 1170 | 22000 | 76130.7259665615 | 66369.2740334385
9 | 1840 | 3 | 2 | 160000 | 1500 | 19000 | 136578.145387499 | 23421.8546125013
10 | 3680 | 4 | 2 | 240000 | 2790 | 20000 | 255033.901596231 | -15033.9015962306
11 | 1660 | 3 | 1 | 87000 | 1030 | 17500 | 97440.5250982859 | -10440.5250982859
12 | 1620 | 3 | 2 | 118600 | 1250 | 20000 | 117577.415360321 | 1022.58463967856
13 | 3100 | 3 | 2 | 140000 | 1760 | 38000 | 186203.892319614 | -46203.8923196141
14 | 2070 | 2 | 3 | 148000 | 1550 | 14000 | 155946.739425522 | -7946.73942552213
15 | 650 | 3 | 1.5 | 65000 | 1450 | 12000 | 94497.4293105374 | -29497.4293105374
1 |
|
4.4 gbdt算法
gdbt的基学习器虽然是回归树,但算法本身支持分类和回归两种操作。以下将展示两种任务的具体实现。这里值得注意的一点是,本方法不支持标签列含有空值(NULL)的情况。
分类任务:
准备数据。
1 | DROPTABLEIFEXISTS dt_golf CASCADE; |
id integerNOTNULL,
“OUTLOOK”text,
temperature double precision,
humidity double precision,
1 | "Cont_features"double precision[], |
windy boolean,
1 | class integer |
`训练模型。```sql
1 | SELECT madlib.gbdt_train('dt_golf', -- source table |
'train_output', -- output model table
'id' , -- id column
'class', -- response
'"OUTLOOK", temperature', -- features
NULL, -- exclude columns
1, --weight
10, -- num of trees
NULL, -- num of random features
10, -- max depth
1, -- min split
1, -- min bucket
8, -- number of bins per continuous variable
1 | 'max_surrogates=0', |
TRUE
);
1 | 模型训练结束会生成两个表,其中一张表train_output中保存着gdbt中的回归树模型,内容包括对每一个基学习器的参数记录。 |
iteration | cat_levels_in_text | cat_n_levels | tree_depth
———–+———————–+————–+————
1 | 0 | {sunny,rain,overcast} | {3} | 4 |
`另一张表train_output_summary,内容是对gdbt训练的整体描述:```sql
1 | SELECT * from train_output_summary; |
method | cat_features | con_features | source_table | model_table | null_proxy | learning_rate | is_classification | predict_dt_prob | num_trees
——–+————–+————–+————–+————–+————+—————+——————-+—————–+———–
GBDT | “OUTLOOK” | temperature | dt_golf | train_output | | .01 | t | response | 10
`预测。```sql
1 | SELECT madlib.gbdt_predict('dt_golf2','train_output','test_output','id'); |
1 | SELECT test_output.id, test_prediction,class from test_output join dt_golf using (id); |
id | test_prediction | class
—-+—————–+——-
1 | 1.0 | 0
2 | 1.0 | 0
3 | 1.0 | 1
4 | 1.0 | 1
5 | 1.0 | 1
6 | 1.0 | 0
7 | 1.0 | 1
8 | 0.0 | 0
9 | 1.0 | 1
10 | 1.0 | 1
11 | 1.0 | 1
12 | 1.0 | 1
13 | 1.0 | 1
15 | 0.0 | 1
16 | 1.0 | 1
14 | 0.0 | 0
1 | (16 rows) |
1 |
|
当is_clasification设为FALSE时,模型为回归任务。默认状态下gbdt提供回归计算支持。方法生成两个表,其中一张表记录每棵树的集体信息和模型的二进制,一张表记录方法的参数信息。
预测。
1 | SELECT madlib.gbdt_predict('crime','train_output','test_output','id'); |
1 | 查看预测结果: |
4.6 xgboost算法
新增的xgboost支持分类和回归两种操作。下面以分类iris花为例,展示xgboost算法。
xgboost支持grid search方式,可以同时训练多组参数。
准备数据。
1 | DROP TABLE IF EXISTS iris; |
1 | INSERT into iris (a, b, c, d, label) values |
`执行分类训练操作。```sql
1 | select madlib.xgboost_sk_Classifier('public.iris', 'public.iris_model_xgbc', 'id', 'label', 'a,b,c,d', NULL, |
`xgboost支持多组参数并行训练,比如用例中eta值为0.1和0.9,最大深度为5或者1。```sql
1 | SELECT id, train_timestamp, source_table, y_type, metrics, features, params from iris_model_xgbc; |
`查看模型结果如下。```java
id | train_timestamp | source_table | y_type | metrics | features | params
—-+——————————-+————–+———+—————————-+———–+———————————————————————————
1 | 1 | 2020-12-14 20:15:05.904184+08 | public.iris | integer | {'acc': 1.0, 'kappa': 1.0} | {a,b,c,d} | ('objective = multi:softmax', 'eta = 0.1', 'max_depth = 5', 'booster = gbtree') |
1 | 结果表中,记录着训练时间,特征,结果类型,所用参数等。 在本示例函数输入中,eta选择为2种,max_depth选择为2种,总共4种参数组合。所以在结果中,有4行结果;在metrics列中,记录4种参数组合的训练后的评价结果。用户可以输入多种参数组合,训练后,用户可以选择合适的模型留下。 |
4.7 prophet算法
新增facebook的prophet时序预测算法。下面以时序数据为例,展示prophet算法使用。
准备数据。
1 | DROP TABLE IF EXISTS ts_data; |
1 | INSERT into ts_data (date, value) values |
`执行训练操作:```sql
1 | select madlib.prophet_fit('public.ts_data', 'public.prophet_model', |
);
`查询模型表:```sql
1 | SELECT id, y_type, params from public.prophet_model; |
id | y_type | params
—-+——————+—————————————————————
1 | 1 | double precision | {'changepoints': ['2016-11-30 05:40:00'], 'growth': 'linear'} |
1 | 在模型表中,记录着训练时间,结果类型,所用参数等。 |
1 | SELECT ds, yhat, yhat_lower, yhat_upper from public.prophet_output; |
ds | yhat | yhat_lower | yhat_upper
————+—————+—————+—————
2016-12-02 | 20.6943848045 | 17.7671496048 | 23.4160694837
2016-12-02 | 20.7408355633 | 17.9264413164 | 23.6426403933
2016-12-02 | 20.7872863221 | 17.9298207895 | 23.4548814727
2016-12-02 | 20.833737081 | 18.234443228 | 23.5317342873
2016-12-02 | 20.8801878398 | 18.2471709649 | 23.8345735574
2016-12-02 | 20.9266385986 | 18.1780101465 | 23.696087927
2016-12-02 | 20.9730893575 | 18.4292088648 | 23.7209823631
2016-12-02 | 21.0195401163 | 18.2623494126 | 23.7341427068
2016-12-02 | 21.0659908751 | 18.1173966769 | 23.7919478206
2016-12-02 | 21.112441634 | 18.5018042056 | 23.9508963879
### 五、常见问题处理
问题描述:编译数据库时,提示python模块,“can not be used when making a shared object;recompile with -fPIC”或者 “libpython22.7.a: could not read symbols: Bad value”。 处理方式:
请检查python版本和环境变量。
查看是否安装python-devel,或者编译python时,是否启用了–enable-shared。
问题描述:执行gdb或者gstack命令,报错 “gdb: symbol lookup error: gdb: undefined symbol: PyUnicodeUCS4_FromEncodedObject”。 处理方式:这个问题一般发生在自行编译python2的环境上,Python2在编译安装时可以通过参数 –enable-unicode=ucs2 或 –enable-unicode=ucs4分别指定使用2个字节或者4个字节表示一个unicode字符,python2缺省使用–enable-unicode=ucs2。Python3默认使用4个字节表示一个unicode字符。 可以在系统中自带的python2下执行:“import sys;print sys.maxunicode”并查看结果,如果结果是65535,说明系统默认的是ucs2;如果结果是1114111,说明用的ucs4编码。 自行编译python2时,如果系统中内置的python2使用的ucs4,系统中的gdb也会依赖ucs4。因此自行编译的python2在configure时,需要添加–enable-unicode=ucs4。
问题描述:在kmeans等算法里,报错“Data table does not exist”。 处理方式:算法所在的schema和输入表不在一个schema下,可以设置SET behavior_compat_options = 'bind_procedure_searchpath';解决这个问题。
问题描述:python启动报错,或者import报错。 处理方式:
检查环境变量比如PYTHONHOME,PYTHONPATH。
安装必备依赖包。
问题描述:Regression等算法报错“ERROR: spiexceptions.UndefinedFunction: operator does not exist: json ->> unknown.”。 处理方式:数据库不支持json导出功能,不支持此功能。
问题描述:MADlib中进行编译时,如果使用make -sj,会遇到boost相关的报错。例如,“fatal error: boost/mpl/if.hpp: No such file or directory”。 处理方式:非问题,MADlib编译时,会先解压这几个安装包。如果是并行编译,会出现一边编译,一边解压的情况。如果编译用到这个文件,另一边还没有解压完成,会出现这类报错。再次执行make -sj即可解决。
问题描述:执行。/madpack 安装时,遇到报错:“ERROR : Failed to connect to database”。 处理方式:需要排查数据库是否启动,目标库是否存在,数据库端口是否被占用,安装用户是否具有管理员权限。另外执行madpack安装时,IP请使用127.0.0.1,不要使用localhost,否则也会出现连接失败的情况。
今天的分享就到这里了,感谢小伙伴的阅读,让我们一起探索数据库前沿知识。
本文标题: 前沿科技探究DeepSQL库
发布时间: 2019年05月22日 00:00
最后更新: 2025年12月30日 08:54
原始链接: https://haoxiang.eu.org/fc9dcd4a/
版权声明: 本文著作权归作者所有,均采用CC BY-NC-SA 4.0许可协议,转载请注明出处!

