Kdbplus-q-language-queries

提供:Dev Guides
移動先:案内検索

Q言語-クエリ

*q* のクエリはより短く簡単で、sqlの機能を拡張します。 メインのクエリ式は「選択式」で、最も単純な形式ではサブテーブルを抽出しますが、新しい列を作成することもできます。
  • 選択式*の一般的な形式は次のとおりです-
Select columns by columns from table where conditions
      • 注-by&where *句はオプションです。「from expression」のみが必須です。

一般的に、構文は次のようになります-

select [a] [by b] from t [where c]
update [a] [by b] from t [where c]
*q* 式の構文はSQLに非常に似ていますが、 *q* 式は単純で強力です。 上記の *q* 式と同等のSQL式は次のようになります-
select [b] [a] from t [where c] [group by b order by b]
update t set [a] [where c]

すべての句は列で実行されるため、 q は順序を利用できます。 SQLクエリは順序に基づいていないため、その利点を活用できません。

*q* リレーショナルクエリは、通常、対応するsqlと比較してサイズがはるかに小さくなります。 順序付けられた機能的なクエリは、SQLでは難しいことを行います。

履歴データベースでは、クエリのパフォーマンスに影響するため、 where 句の順序は非常に重要です。 partition 変数(日付/月/日)が常に最初に来て、その後にソートされインデックスされた列(通常はsym列)が続きます。

例えば、

select from table where date in d, sym in s

よりもずっと速い

select from table where sym in s, date in d

基本クエリ

クエリスクリプトをメモ帳で作成し(以下を参照)、保存(* .q)してから読み込みます。

sym:asc`AIG`CITI`CSCO`IBM`MSFT;
ex:"NASDAQ"
dst:`$":c:/q/test/data/";          /database destination

@[dst;`sym;:;sym];
n:1000000;

trade:([]sym:n?`sym;time:10:30:00.0+til
n;price:n?3.3e;size:n?9;ex:n?ex);

quote:([]sym:n?`sym;time:10:30:00.0+til
n;bid:n?3.3e;ask:n?3.3e;bsize:n?9;asize:n?9;ex:n?ex);

{@[;`sym;`p#]`sym xasc x}each`trade`quote;
d:2014.08.07 2014.08.08 2014.08.09 2014.08.10 2014.08.11;/Date vector can also be changed by the user

dt:{[d;t].[dst;(`$string d;t;`);:;value t]};
d dt/:\:`trade`quote;

Note: Once you run this query, two folders .i.e. "test" and "data" will be created under "c:/q/", and date partition data can be seen inside data folder.

制約付きのクエリ

  • HDBクエリを示します*

すべてのIBM取引を選択

select from trade where sym in `IBM

*特定の日にすべてのIBM取引を選択します

thisday: 2014.08.11
select from trade where date=thisday,sym=`IBM
  • 100を超える価格のすべてのIBM取引を選択*
select from trade where sym=`IBM, price > 100.0
  • 100以下の価格のすべてのIBM取引を選択します*
select from trade where sym=`IBM,not price > 100.0

*特定の日付の午前10時30分から10時40分までのすべてのIBM取引を選択します

thisday: 2014.08.11
select from trade where
date = thisday, sym = `IBM, time > 10:30:00.000,time < 10:40:00.000

価格の昇順ですべてのIBM取引を選択します

`price xasc select from trade where sym =`IBM

*特定の時間枠で価格の降順ですべてのIBM取引を選択します

`price xdesc select from trade where date within 2014.08.07 2014.08.11, sym =`IBM

複合ソート-symで昇順をソートし、価格の降順で結果をソートします

`sym xasc `price xdesc select from trade where date = 2014.08.07,size = 5

すべてのIBMまたはMSFT取引を選択

select from trade where sym in `IBM`MSFT

*特定の時間枠内で昇順ですべてのシンボルのカウントを計算します

`numsym xasc select numsym: count i by sym from trade where date within 2014.08.07 2014.08.11

*特定の時間枠内で降順ですべてのシンボルのカウントを計算します

`numsym xdesc select numsym: count i by sym from trade where date within 2014.08.07 2014.08.11
  • 特定の期間内のIBM株の最高価格はいくらですか?
select time,ask from quote where date within 2014.08.07 2014.08.11,
sym =`IBM, ask = exec first ask from select max ask from quote where
sym =`IBM
  • 1時間ごとのバケットで各symの最終価格を選択します*
select last price by hour:time.hh, sym from trade

集計を含むクエリ

  • すべてのシンボルのvwap(ボリューム加重平均価格)を計算します*
select vwap:size wavg price by sym from trade
  • 特定の月のレコード数(百万単位)をカウントします*
(select trade:1e-6*count i by date.dd from trade where date.month=2014.08m) + select quote:1e-6*count i by date.dd from quote where date.month=2014.08m
  • HLOC –特定の月のCSCOの毎日の高値、安値、始値および終値*
select high:max price,low:min price,open:first price,close:last price by date.dd from trade where date.month=2014.08m,sym =`CSCO
*特定の月のCSCOの毎日のVwap*
select vwap:size wavg price by date.dd from trade where date.month = 2014.08m ,sym = `CSCO
*AIG* の価格の時間平均、分散、標準偏差を計算します
select mean:avg price, variance:var price, stdDev:dev price by date, hour:time.hh from trade where sym = `AIG

価格範囲を1時間ごとに選択します

select range:max[price] – min price by date,sym,hour:time.hh from trade
  • 特定の月のCSCOの日次スプレッド(平均入札価格)*
select spread:avg bid-ask by date.dd from quote where date.month = 2014.08m, sym = `CSCO
  • 特定の月のすべてのsymの日次取引値*
select dtv:sum size by date,sym from trade where date.month = 2014.08m
  • CSCOの5分間のvwapを抽出します*
select size wavg price by 5 xbar time.minute from trade where sym = `CSCO
  • CSCOの10分足を抽出*
select high:max price,low:min price,close:last price by date, 10 xbar time.minute from trade where sym = `CSCO
  • 特定の日のCSCOの最終価格に対して価格が100ベーシスポイント(100e-4)を超える時間を検索します*
select time from trade where date = 2014.08.11,sym = `CSCO,price > 1.01*last price
  • データベースの最後の日付の1分間隔でのMSFTの1日の価格とボリューム*
select last price,last size by time.minute from trade where date = last date, sym = `MSFT