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 | | |
+---------+---+---+---+
我想获取有关元数据中的时间数据列(
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中是否存在类似的东西?
最佳答案
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/