我需要能够动态查询Azure Data Explorer(ADX)表,即使用同样存储在ADX中的特定于应用程序的元数据。
如果可能的话,似乎的方法是通过table()函数。换句话说,感觉我应该能够简单地写:
let table_name = <non-trivial ADX query that returns the name of a table as a string>;
table(table_name) | limit 10
但是此查询失败,因为我试图将变量传递给table()
函数和"a parameter, which is not scalar constant string can't be passed as parameter to table() function"。提供的解决方法并没有真正的帮助,因为所有可能的表名都不会提前知道。
是否可以在ADX中完成所有操作(即无需客户端进行多次查询)?还是需要回到制图板上?
答案 0 :(得分:0)
如果知道所需的输出模式,则可以使用union
来实现(请注意,在这种情况下,结果模式将是所有表的并集,并且需要显式地投影列您有兴趣)
let TableA = view() { print col1 = "hello world"};
let TableB = view() { print col1 = "goodbye universe" };
let LabelTable = datatable(table_name:string, label:string, updated:datetime)
[
"TableA", "MyLabel", datetime(2019-10-08),
"TableB", "MyLabel", datetime(2019-10-02)
];
let GetLabeledTable = (l:string)
{
toscalar(
LabelTable
| where label == l
| order by updated desc
| limit 1
)
};
let table_name = GetLabeledTable('MyLabel');
union withsource = T *
| where T == table_name
| project col1