如何删除符合搜索条件的表?

How do I delete tables matching a search criterion?

我知道我可以使用

删除表格
delete some_table_name from `.

但是假设我有大量表,并且想删除所有以 prefix_ 开头并以 _suffix 结尾的表。

我该怎么做?

您可以使用 delete 的函数形式(参见 here):

/ create some tables 
q)`a_one`a_two`b_one`b_two set\:([] x:til 10)
    `a_one`a_two`b_one`b_two
q)tables[]
    `s#`a_one`a_two`b_one`b_two

/ find table names matching "a_*" and delete them from root namespace
q)![`.;();0b;{x where x like "a_*"} tables[]]
    `.
q)tables[]
    `s#`b_one`b_two

如果你经常需要这个功能,我建议你定义一个drop函数如下:

q)drop:![`.;();0b;](),

此函数会将一个或多个table个名称作为符号并删除它们。结合选择器功能,可用于按模式删除

q)drop{x where x like"prefix_*_suffix"}tables[]

你也可以定义一个drop_matching函数

q)drop_matching:drop{a where(a:tables[])like x}@

这将一举完成工作:

q)drop_matching"prefix_*_suffix"