【问题标题】:Mask some fields when loading hdb in kdb在kdb中加载hdb时屏蔽一些字段
【发布时间】:2017-06-05 16:27:27
【问题描述】:

如果有两个实例:a1 和 a2,并且都连接到同一个 hdb。我希望 a2 连接到 hdb 但添加一些过滤器。比如有个表叫elec。

我希望 a2 从过滤一些值开始。如果我编写代码并让a2在启动时加载它,那不是将信息加载到内存中吗?启动 a2 实例时,有什么方法可以像普通 hdb 一样加载它?

基本上,问题是加载hdb时如何屏蔽一张表中的某些字段?

【问题讨论】:

  • 不太清楚我是否遵循,你能举一个简单的可重现的例子吗?
  • 谢谢特里!示例:两个实例加载相同的 hdb 数据。 hdb里有10张桌子。两者都从同一目录加载。如果我想启动 a2 实例并加载 hdb 但过滤一个表的日期并且仅显示 2017.05.30 之前的数据。我该怎么做?
  • 您可以查看在 a2 hdb 实例中设置 .Q.view - 但是这将适用于所有表 code.kx.com/wiki/JB:KdbplusForMortals/dotQ_utilities q).Q.view 2017.05.30
  • 谢谢康纳,实际上日期只是一个例子。我想为 a2 实例删除一个表中的一些列。
  • 我现在的想法是我可以从. and then in a function load the database and then output the filtered result, but when it didn't work when i delete the table again from 中删除该表。在函数中

标签: database kdb


【解决方案1】:

可以防止通过 select 语句返回列来操纵 HDB 实例中的表定义。下面的示例有一个日期分区表。我们将定义更新为仅定义了列的子集的翻转字典。但是,这是可逆的,并且不会更新您的实例中仍会显示所有列的表的元数据。

q)meta trade
c   | t f a
----| -----
date| d
sym | s   p
size| j
px  | f
side| s

q)flip trade
`sym`size`px`side!`trade


q)`trade set flip `sym`size`px!`trade
q)select from trade where date=2017.05.27
date       sym  size px
------------------------------
2017.05.27 APPl 9968 92.79204
2017.05.27 APPl 9788 94.97189
2017.05.27 APPl 9660 27.62907

q)meta trade
c   | t f a
----| -----
date| d
sym | s   p
size| j
px  | f
side| s

【讨论】:

  • 非常感谢!!这行得通!!!!您是否知道如何在表中的日期中添加过滤器,以便人们只能查询某个日期之前的数据?
  • 使用 .Q.view 是限制可用日期的最简单方法,但这将适用于您的 HDB 实例中的所有表。
  • 谢谢吉尔默。但是没有办法用其他东西代替返回值,对吗?前任。在数据字段中,有“account=1234,cash=3456”我想让它只在返回时返回cash=3456。我知道如何在带有查询的函数中执行此操作,但不确定是否可以在 q 脚本中编写一些内容,因此当人们进行正常查询时,可以将帐户信息替换为空白或其他内容。
  • 因为您的数据只是内存映射,您的查询将始终返回保存在磁盘上的数据。您需要将所有数据拉入内存并更新该列,或者如果这是对所有实例的永久数据操作,请使用 dbmaint.q 修改磁盘上的数据
猜你喜欢
  • 1970-01-01
  • 2015-02-17
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2018-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多