kdb/q中的meta函数返回有关表的以下信息:
我想将此扩展到包括更多关于该表的信息。我试图解决的具体情况是在表中包含有关时间数据列的时区信息。
例如:select from Price
+-------------------------+-------------------------+--------+-------+
| Time | SysTime | Ticker | Price |
+-------------------------+-------------------------+--------+-------+
| 2016.09.15D09:18:02.391 | 2016.09.15D08:18:02.391 | IBM | 63.46 |
| 2016.09.15D09:18:02.491 | 2016.09.15D08:16:22.391 | MSFT | 96.72 |
| 2016.09.15D09:18:02.591 | 2016.09.15D08:14:42.391 | AAPL | 23.06 |
+-------------------------+-------------------------+--------+-------+meta Price
+---------+---+---+---+
| c | t | f | a |
+---------+---+---+---+
| Time | p | | |
| SysTime | p | | |
| Ticker | s | | |
| Price | f | | |
+---------+---+---+---+我想了解有关时间数据列(Time和SysTime)在元中的其他信息。
例如,如下所示:
metaExtended Price
+---------+---+---+---+------------------+
| c | t | f | a | z |
+---------+---+---+---+------------------+
| Time | p | | | America/New_York |
| SysTime | p | | | America/Chicago |
| Ticker | s | | | |
| Price | f | | | |
+---------+---+---+---+------------------+请注意,我有一个函数,它接受表和列来返回时区。TimeZone[Price;Time]返回America/New_York
我的问题只是关于如何将这些信息包含在元函数中。我遇到的第二个问题是,如果用户这样做,newPriceTable:Price (创建一个与上一个表相同的新表),那么metaExtended函数应该为两个表返回相同的值(类似于对具有相同对象引用的两个不同变量调用函数)。
sql中是否存在类似的东西?
发布于 2016-09-15 14:53:02
meta是一个保留字,因此不能重新定义。但是您可以创建自己的实现并使用它来代替meta。
TimeZone:{[Table;Col] ... } / your TimeZone function
metaExtended:{meta[x],'([]z:TimeZone[t]each cols x)}
metaExtended Price关于您的第二个问题,我认为在k/q中做您想做的事情是不可能的。在将Price分配给newPriceTable之后,后者确实是一个引用,但是一旦您修改它,kdb就会创建一个副本并修改它,而不是原来的。问题是,无法判断newPriceTable仍然是对Price的引用还是新的新对象。
发布于 2016-09-15 15:07:25
您可以使用lj将它们连接到一个metaExtended函数中。
该函数将检查所有时间的cols并在其上运行TimeZone函数,并将结果与元结果连接:
metaExtended:{[tbl] meta[tbl] lj 1!select c,z:TimeZone[tbl] each t from meta[tbl] where t in "tp"}
metaExtended `t当您将此表赋值给新变量时,它将被赋值为引用。
nt:t / nt and t pointing to same objectYo可以使用-16检查变量的引用计数!
-16!t此时,metaExtended函数将提供相同的输出。但是,一旦对指向同一个表的这些变量进行了一些更新,kdb将为更新后的表/变量创建一个新副本。从这一点看,它们是两个不同的对象。现在,metaExtended函数的输出取决于对象模式。
https://stackoverflow.com/questions/39513630
复制相似问题