Exasol UDF无法访问输入表列名,是否有可行解决方案?
问题:Exasol UDF中如何获取输入表的真实列名?
我需要编写一个Exasol UDF,用于计算带有不同参数的评分模型,同时要支持指定模型公式,例如:Treat ~ Sex + Age + Income。但实际测试发现,UDF内部无法访问输入表的真实列名——尽管Exasol官方文档指出可以通过exa$meta$input_columns[]获取包含{name, type, sql_type, precision, scale, length}信息的数组,但实际返回的列名是连续数字编号(如"0"、"1"),而非传入的真实列名。
可复现代码
--/ CREATE OR REPLACE R SET SCRIPT TEST_SCHEMA.TEST_COLUMNNAMES(...) EMITS(COLNAMES CHAR(2000)) AS run <- function(ctx) { ctx$next_row(NA) numCols <- exa$meta$input_column_count inCols <- exa$meta$input_columns[1:numCols] ctx$emit(inCols) } / SELECT TEST_SCHEMA.TEST_COLUMNNAMES(CLUSTER_NAME, MEASURE_TIME, EVENT_TYPE, DBMS_VERSION, NODES, DB_RAM_SIZE, PARAMETERS) FROM EXA_STATISTICS.EXA_SYSTEM_EVENTS limit 10;
执行结果
| COLNAMES |
|---|
| list(name = "0", type = "character", sql_type = "VARCHAR(128) UTF8", precision = NA, scale = NA, length = 128) |
| list(name = "1", type = "POSIXt", sql_type = "TIMESTAMP", precision = NA, scale = NA, length = NA) |
| list(name = "2", type = "character", sql_type = "VARCHAR(30) UTF8", precision = NA, scale = NA, length = 30) |
| list(name = "3", type = "character", sql_type = "VARCHAR(30) UTF8", precision = NA, scale = NA, length = 30) |
| list(name = "4", type = "integer", sql_type = "DECIMAL(4,0)", precision = 4, scale = 0, length = NA) |
| list(name = "5", type = "numeric", sql_type = "DECIMAL(10,1)", precision = 10, scale = 1, length = NA) |
| list(name = "6", type = "character", sql_type = "VARCHAR(100000) UTF8", precision = NA, scale = NA, length = 100000) |
请问是否存在方法可以在UDF(包括R、Python、Java等其他脚本语言)中访问输入表的真实列名?
内容的提问来源于stack exchange,提问作者MarkusN
相关产品推荐
相关产品推荐

