KDB - 当我将工作代码包装在一个函数中时出错
KDB - getting error when I wrap working code in a function
我编写了以下从 sql table.
中获取数据的函数
get_sql_table:{[usr;psswd;server;db;tbl]
usr: "'", usr, "'";
psswd: "'", psswd, "'";
new_tbl: "'", tbl, "'\"";
map:(`date`datetime`bigint`char`decimal`double`int`varchar)!("DZJCFFIS");
schema:exec column_name!native from (update native:map[data_type] from (2#"S";enlist"\t") 0:
schema:system "mysql --user=",usr," --password=",psswd," -h ",server, " ", db, " --execute=\"select column_name, data_type from information_schema.columns WHERE table_name = ", new_tbl)
where not null native;
query: system "mysql --user=",usr," --password=",psswd," -h ",server, " ", db, " --execute=\"select * from ", tbl, ";\"";
data:(count["\t" vs query 0]#"S";enlist"\t") 0: query;
:![data;();0b;k!{($;schema[x];(string;x))} each k:key[schema] inter cols data];
};
当我加载脚本并尝试 运行 函数时,我有时会在最后一行(return 语句)出现类型错误。最后一行用于将适当的数据类型映射到 kdb table.
但是,代码有时会成功。似乎它成功和失败的 tables 是任意的,与列类型无关(事实上它在 tables 上失败,它之前成功,反之亦然)。
此外,代码本身没有任何问题。当我在函数之外编写它时,它每次都工作,除了table具有不在地图中的数据类型(但在那种情况下我可以添加它映射)。 此代码仅在包含在函数中时才会失败。
我错过了什么?
您的 schema
变量是在函数内定义的,而不是全局定义的,因此无法从该 lambda 中访问它
{($;schema[x];(string;x))}
你必须像这样传递它
{($;y[x];(string;x))}[;schema] each k:key[schema] inter cols data
它可能在函数外起作用,因为你不小心全局定义了 schema
我编写了以下从 sql table.
中获取数据的函数get_sql_table:{[usr;psswd;server;db;tbl]
usr: "'", usr, "'";
psswd: "'", psswd, "'";
new_tbl: "'", tbl, "'\"";
map:(`date`datetime`bigint`char`decimal`double`int`varchar)!("DZJCFFIS");
schema:exec column_name!native from (update native:map[data_type] from (2#"S";enlist"\t") 0:
schema:system "mysql --user=",usr," --password=",psswd," -h ",server, " ", db, " --execute=\"select column_name, data_type from information_schema.columns WHERE table_name = ", new_tbl)
where not null native;
query: system "mysql --user=",usr," --password=",psswd," -h ",server, " ", db, " --execute=\"select * from ", tbl, ";\"";
data:(count["\t" vs query 0]#"S";enlist"\t") 0: query;
:![data;();0b;k!{($;schema[x];(string;x))} each k:key[schema] inter cols data];
};
当我加载脚本并尝试 运行 函数时,我有时会在最后一行(return 语句)出现类型错误。最后一行用于将适当的数据类型映射到 kdb table.
但是,代码有时会成功。似乎它成功和失败的 tables 是任意的,与列类型无关(事实上它在 tables 上失败,它之前成功,反之亦然)。
此外,代码本身没有任何问题。当我在函数之外编写它时,它每次都工作,除了table具有不在地图中的数据类型(但在那种情况下我可以添加它映射)。 此代码仅在包含在函数中时才会失败。
我错过了什么?
您的 schema
变量是在函数内定义的,而不是全局定义的,因此无法从该 lambda 中访问它
{($;schema[x];(string;x))}
你必须像这样传递它
{($;y[x];(string;x))}[;schema] each k:key[schema] inter cols data
它可能在函数外起作用,因为你不小心全局定义了 schema