1

According to How is a view defined

Views and their dependencies can be defined only in the default namespace.

Also q has a command \b:

Syntax: \b [namespace]

Lists dependencies (views) in namespace. Defaults to current namespace.

According to this I guess that it is possible to create a view not only into the default namespace:

$ 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

but the view was created in . namespace.

So is it possible to create a view in a non-default(current) namespace for somehow? If no, why is there an argument for command \b [namespace]?

Community
  • 1
  • 1
egor7
  • 4,678
  • 7
  • 31
  • 55

1 Answers1

4

The answer to your question depends on what you call a namespace. The official q documentation on this topic is vague if not misleading. For example, a page describing the system command \d reads:

\d (directory)

Syntax: \d [namespace]

Sets the current namespace (also known as directory or context). The namespace can be empty, and a new namespace is created when an object is defined in it. The prompt indicates the current namespace.

As you can see, the optional argument is called a directory on the first line but it becomes a namespace on the second. Which, as we learn from the third line, is "known as context."

However, the three words -- namespace, directory and context -- can be used interchangeably in some, but not all, cases. Defining a view is one such case where the distinction between directories and namespaces is important.

Due to the lack of clarity in the official terminology let me refer you to a great book "Q Tips: Fast, Scalable and Maintainable Kdb+" by Nick Psaris. Nick distinguishes a subset of namespaces that begin with a "." and calls them and only them directories. In his terminology all directories are namespaces, but not all namespaces are directories.

It turns out that directories have limitations; in particular, they can't contain views. But a less known fact is that namespaces that are not directories can:

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
Igor Korkhov
  • 8,283
  • 1
  • 26
  • 31
  • Wow! I could only dream about such details and explanation! Thank you. Recently got my copy of Nick Psaris book, just started reading. – egor7 May 15 '20 at 08:17