1

もちろん、文字列列を含むため、列挙する必要があるkdbテーブルを分割するために数行をまとめました。

このコードは完全に正しいのか、それともさらに単純化できるのか疑問に思います。特に、メモリ テーブルとディスク テーブルのレイアウトがまったく同じであることを考えると、パーティション分割されたテーブル スキーマを作成する必要があるかどうかについては疑問があります。また、一時テーブルtbl_memtbl_mem_enumテーブルの作成を回避する方法があるかもしれません:

...
tbl_mem: select ts,sym,msg_type from oms_mem lj sym_mem;
tbl_mem_enum: .Q.en[`$sym_path] tbl_mem;
delete tbl_mem from `.;

(`$db;``!((17;2;9);(17;2;9))) set ([]ts:`time$(); ticker:`symbol$(); msg_type:`symbol$());
(`$db) upsert (select ts,ticker:sym,msg_type from tbl_mem_enum)
delete tbl_mem_enum from `.;

PS: 変数の名前に「_」を使用すべきではないことはわかっていますが、変数名または関数名の単語を区切るには何を使用すればよいでしょうか? .も kdb 関数です。

4

1 に答える 1

4

テーブルにシンボル列が含まれていることを意味していると思います-これらは列挙する必要がある列です(文字列は列挙する必要はありません)。書き込みと列挙を 1 つのステップで実行できます。また、すべての列で同じ圧縮アルゴリズム/レベルを使用している場合は、.z.zd を使用する方が簡単な場合があります。

.z.zd:17 2 9i;
(`$db) set .Q.en[`$sym_path] select ts, ticker:sym, msg_type from oms_mem lj sym_mem;

通常は、'_' の代わりにキャメルケースを使用することをお勧めします。ここに役立つ情報: http://www.timestored.com/kdb-guides/q-coding-standards

于 2013-05-21T16:11:08.890 に答える