tigergraph 3.1 图数据库 的有些内置函数不够完善,像字符串的分割等函数都没有,因此在翻阅了国外资料之后,将这个功能贴出来。由于tigergraph使用的是c++ 因此,在创建函数之前,要安装本地的c++,且c++版本必须是11。
如果按照官方提供的安装手册安装的话,自定义内置函数应给添加在 /home/tigergraph/tigergraph/app/3.1.0/dev/gdk/gsql/src/QueryUdf/ExprFunctions.hpp 中,具体的代码如下:
//字符串分割 inline ListAccum<string> string_split (string str, string delimiter) { ListAccum<string> newList; size_t pos = 0; std::string token; while ((pos = str.find(delimiter)) != std::string::npos) { token = str.substr(0, pos); newList += token; str.erase(0, pos + delimiter.length()); } newList += str; return newList; }
代码添加完毕之后,想要可以使用,必须先要编译,tigergraph 提供了编译测试方式,编译方式在 /home/tigergraph/tigergraph/app/3.1.0/dev/gdk/gsql/src/QueryUdf/test文件夹下,使用命令 ./compile 来编译 ../ExprFunctions.hpp中的新函数。如果编译没有问题,则在tigergraph sudio的query 中可以直接使用。
需要注意的是,在compile文件中,g++ 命令后面的 -I 的路径可能错误,需要更改 -I$root_dir/gdk/gsdk/include/third_party/ 中的third_party ,应是thirdparty