2017-08-01 2 views
0

私はkdbの中のhdbテーブルから履歴データを取得する関数(Pythonで、qPythonを使用しています)に取り組んでいます。私は、パラメータに関しては、この機能でエンドユーザに多くの自由を与えたいと思います。変数のプレースホルダとここkdbのxbar時間を持つタイプ

select by 10 xbar time.minute from trade where date within('2017-06-31';'2017-07-01'),sym = 'instr1'

それが再びですが、この時間:関数が構築したクエリは次のようになります

'{[a:b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z}',

私の質問の場所に行くtime.somethingについてですbstringnumpy.string_byteまたはnumpy.bytes_を渡すたびに'type exceptionがスローされます。

kdbのtime.*引数はどのような型ですか、それをどのnumpy/qPython型で渡す必要がありますか?

ありがとうございます!

答えて

1

。このような選択のための関数の表記法。

q){select count i by time.minute from x}([]time:2#.z.p) 
minute| x 
------| - 
19:43 | 2 

型エラーとここにあなたの問題は、関数の宣言です:

{[a:b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z} 

宣言は、あなたが持っている

{[a;b;x;y;z]select by a xbar b from trade where date within(x;y),sym in z} 

すなわち、次のようになります。代わりに、

あなたがしようとしているキャストの問題は、データをキャストする方法によって、さまざまなタイプのデータが返されるということです。あなたはまた、あなたがしようとしている方法で関数に "b"を渡すことはできません。個人的には、タイムスタンプ(時間はタイムスタンプタイプと仮定します)を守り、パラメータの解像度を使用してそれを指示します。

q){[b;t] select count i by b xbar time from t}[0D01;([]time:0D 0D00:01 0D01+.z.p)]                         

time       | x 
-----------------------------| - 
2017.08.01D19:00:00.000000000| 2 
2017.08.01D20:00:00.000000000| 1 
q){[b;t] select count i by b xbar time from t}[0D00:01;([]time:0D 0D00:01 0D01+.z.p)]                        
time       | x 
-----------------------------| - 
2017.08.01D19:48:00.000000000| 1 
2017.08.01D19:49:00.000000000| 1 
2017.08.01D20:48:00.000000000| 1 
q){[b;t] select count i by b xbar time from t}[0D00:00:01;([]time:0D 0D00:01 0D01+.z.p)]                       
time       | x 
-----------------------------| - 
2017.08.01D19:48:30.000000000| 1 
2017.08.01D19:49:30.000000000| 1 
2017.08.01D20:48:30.000000000| 1 
Pythonのタイプについては

、ないように注意してください私はそれが私が書いた最初のクエリは、実際に働いていたnumpy.datetime64

+0

こんにちは!お返事をありがとうございます。あなたの答えは、kdbが実際にどのように動作するかについて私が知っていることが少ししかないことを認識させます私が作業しているデータベースを作成していないので、http://code.kx.com/wiki/Reference/xbarのxbarのドキュメントはtime.minuteを参照しています。私はtime.minuteがmysqlのようないくつかのグローバルキーワード例えばCURRENT_TIMESTAMPです。あなたは「時間がタイムスタンプタイプだと言っている」と言って、それは単純に列でソートされていることに気がつきました。私はかなり愚かだと思うが、私は生き残るだろう;)あなたの精巧な答えをありがとう、それは深く感謝しています! –

0

ドット表記の任意の一時的な種類を使用できます。

たとえば、time.dd、time.hh、time.mm、time.month、time.year。

これは関数ではサポートされていませんが、代わりにキャスト表記を使用する必要があります。あなたが使用することができます

select by 10 xbar `minute$time from trade where date within('2017-06-31';'2017-07-01'),sym = 'instr1' 

http://code.kx.com/q4m3/2_Basic_Data_Types_Atoms/#257-constituents-and-dot-notation

+0

だと思います。私の問題が発生した2番目の例では、可変プレースホルダ( 'a; b; x; y; z')を追加するときでした。あなたの考えをありがとう!ありがとうございます:-) –

関連する問題