kdb / q中的meta函数返回有关该表的以下信息:


c –(符号)列名
t –(字符)数据类型
f –(符号)外键域
a-(符号)属性。


我想扩展此范围以包括有关表的更多信息。我要解决的特定情况是在表中包含有关时间数据列的时区信息。

例如:
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 |   |   |
+---------+---+---+---+


我想获取有关元数据中的时间数据列(TimeSysTime)的其他信息。

例如,如下所示:

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中是否存在类似的东西?

最佳答案

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的引用还是全新的对象。

关于mysql - 扩展元数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39513630/

10-12 00:18
查看更多