kdb - 在非默认(当前)命名空间中定义视图
问题描述
根据如何定义视图
视图及其依赖项只能在默认命名空间中定义。
还有q
一个命令\b:
语法:\b [命名空间]
列出命名空间中的依赖项(视图)。默认为当前命名空间。
据此,我猜不仅可以在默认命名空间中创建视图:
$ q
KDB+ 3.6 2019.04.02 Copyright (C) 1993-2019 Kx Systems
m32/ ...
q)\d .jar
q.jar)v::x+1
q.jar)\d .
q)`. `v
x+1
但是视图是在.
命名空间中创建的。
那么是否有可能以某种方式在非默认(当前)命名空间中创建视图?如果不是,为什么有 command 的参数\b [namespace]
?
解决方案
您的问题的答案取决于您所说的命名空间。如果没有误导的话,关于这个主题的官方 q 文档是模糊的。例如,描述系统命令的页面\d
显示为:
\d (directory)
语法:\d [命名空间]
设置当前命名空间(也称为目录或上下文)。命名空间可以为空,当在其中定义对象时会创建一个新的命名空间。提示指示当前命名空间。
如您所见,可选参数在第一行称为目录,但在第二行称为命名空间。正如我们从第三行中了解到的那样,这被称为“上下文”。
但是,名称空间、目录和上下文这三个词在某些(但不是全部)情况下可以互换使用。定义视图就是区分目录和命名空间很重要的一种情况。
由于官方术语不够清晰,我建议您参考 Nick Psaris 的一本好书“Q Tips: Fast, Scalable and Maintainable Kdb+”。Nick 区分以“.”开头的命名空间子集。并称它们为目录。在他的术语中,所有目录都是名称空间,但并非所有名称空间都是目录。
事实证明,目录是有局限性的;特别是,它们不能包含视图。但一个鲜为人知的事实是,不是目录的命名空间可以:
q).my.dir.v::x+1 / a (failed) attempt to create a view v in a directory
'x
[0] .my.dir.v::x+1
q)my.ns.v1::x+1 / v1 is defined in a namespace
q)your.ns.v2::x-1 / so is v2
q)\b
`symbol$()
q)\b my.ns
,`v1
q)\b your.ns
,`v2
q)x:41
q)my.ns.v1
42
q)your.ns.v2
40
推荐阅读
- python-3.x - 根据 Spacy Rule Matcher 选择 Pandas DataFrame 的行
- wordpress - Wordpress 重写规则 $matches[2] 让我重定向
- javascript - 在 Blazor 服务器端上传文件时有没有办法避免 SignalR
- python - 无法从 c# 将带空格的参数传递给 python 脚本
- python - python中是否有可以在原始图像上画线的模块?
- python-3.x - 在 Flask(gcloud) 中使用 jscallback 部署散景
- javascript - 在调用验证之前给 Formik 初始错误值
- git - 合并多个合并时减少噪音的Git程序?
- python - 列表函数分别列出所有字符
- c# - UWP - 命令参数为空