Ngôn ngữ Q - Bảng

Bảng là trung tâm của kdb +. Bảng là một tập hợp các cột được đặt tên được triển khai như một từ điển.q tables được định hướng theo cột.

Tạo bảng

Các bảng được tạo bằng cú pháp sau:

q)trade:([]time:();sym:();price:();size:())

q)trade
time sym price size
-------------------

Trong ví dụ trên, chúng tôi chưa chỉ định loại của mỗi cột. Điều này sẽ được thiết lập bởi lần chèn đầu tiên vào bảng.

Một cách khác, chúng ta có thể chỉ định loại cột khi khởi tạo -

q)trade:([]time:`time$();sym:`$();price:`float$();size:`int$())

Hoặc chúng ta cũng có thể xác định các bảng không trống -

q)trade:([]sym:(`a`b);price:(1 2))

q)trade

 sym   price
-------------
  a      1
  b      2

Nếu không có cột nào trong dấu ngoặc vuông như trong các ví dụ trên, bảng unkeyed.

Để tạo ra một keyed table, chúng tôi chèn (các) cột cho khóa trong dấu ngoặc vuông.

q)trade:([sym:`$()]time:`time$();price:`float$();size:`int$())

q)trade

 sym   | time price size
-----  | ---------------

Người ta cũng có thể xác định các loại cột bằng cách đặt các giá trị là danh sách rỗng của nhiều loại khác nhau -

q)trade:([]time:0#0Nt;sym:0#`;price:0#0n;size:0#0N)

Nhận thông tin bảng

Hãy tạo một bảng giao dịch -

trade: ([]sym:`ibm`msft`apple`samsung;mcap:2000 4000 9000 6000;ex:`nasdaq`nasdaq`DAX`Dow)

q)cols trade                         / column names of a table
`sym`mcap`ex

q)trade.sym                          / Retrieves the value of column sym
`ibm`msft`apple`samsung

q)show meta trade                    / Get the meta data of a table trade.

  c   | t f a
----- | -----
 Sym  | s
 Mcap | j
 ex   | s

Phím chính và bàn có khóa

Bàn phím

Bảng có khóa là một từ điển ánh xạ từng hàng trong bảng gồm các khóa duy nhất đến một hàng tương ứng trong bảng giá trị. Hãy để chúng tôi lấy một ví dụ -

val:flip `name`id!(`John`Jenny`Jonathan;9 18 27)
                          / a flip dictionary create table val
id:flip (enlist `eid)!enlist 99 198 297
                          / flip dictionary, having single column eid

Bây giờ, hãy tạo một bảng có khóa đơn giản chứa eid làm khóa,

q)valid: id ! val

q)valid                 / table name valid, having key as eid

  eid |  name      id
------| ---------------
  99  |  John      9
  198 |  Jenny     18
  297 |  Jonathan  27

ForeignKeys

A foreign key xác định ánh xạ từ các hàng của bảng trong đó nó được xác định thành các hàng của bảng có primary key.

Khóa ngoại cung cấp referential integrity. Nói cách khác, nỗ lực chèn giá trị khóa ngoại không có trong khóa chính sẽ không thành công.

Hãy xem xét các ví dụ sau. Trong ví dụ đầu tiên, chúng tôi sẽ xác định khóa ngoại một cách rõ ràng khi khởi tạo. Trong ví dụ thứ hai, chúng tôi sẽ sử dụng tính năng theo đuổi khóa ngoại không giả định bất kỳ mối quan hệ trước nào giữa hai bảng.

Example 1 − Define foreign key on initialization

q)sector:([sym:`SAMSUNG`HSBC`JPMC`APPLE]ex:`N`CME`DAQ`N;MC:1000 2000 3000 4000)

q)tab:([]sym:`sector$`HSBC`APPLE`APPLE`APPLE`HSBC`JPMC;price:6?9f)

q)show meta tab

  c    | t f a
------ | ----------
 sym   | s sector
 price | f

q)show select from tab where sym.ex=`N

  sym     price
----------------
 APPLE   4.65382
 APPLE   4.643817
 APPLE   3.659978

Example 2 − no pre-defined relationship between tables

sector: ([symb:`IBM`MSFT`HSBC]ex:`N`CME`N;MC:1000 2000 3000)
tab:([]sym:`IBM`MSFT`MSFT`HSBC`HSBC;price:5?9f)

Để sử dụng tính năng theo đuổi khóa ngoại, chúng ta phải tạo một bảng để khóa vào khu vực.

q)show update mc:(sector([]symb:sym))[`MC] from tab

  sym     price      mc
--------------------------
  IBM   7.065297    1000
  MSFT  4.812387    2000
  MSFT  6.400545    2000
  HSBC  3.704373    3000
  HSBC  4.438651    3000

Ký hiệu chung cho khóa ngoại xác định trước -

chọn ab từ c trong đó a là khóa ngoại (sym), b là a

trong bảng khóa chính (ind), c là

bảng khóa ngoại (thương mại)

Thao tác bảng

Hãy tạo một bảng giao dịch và kiểm tra kết quả của biểu thức bảng khác nhau -

q)trade:([]sym:5?`ibm`msft`hsbc`samsung;price:5?(303.00*3+1);size:5?(900*5);time:5?(.z.T-365))

q)trade

  sym        price   size   time
-----------------------------------------
 msft      743.8592  3162  02:32:17.036
 msft      641.7307  2917  01:44:56.936
 hsbc      838.2311  1492  00:25:23.210
 samsung   278.3498  1983  00:29:38.945
 ibm       838.6471  4006  07:24:26.842

Bây giờ chúng ta hãy xem xét các câu lệnh được sử dụng để thao tác các bảng bằng cách sử dụng q ngôn ngữ.

Lựa chọn

Cú pháp sử dụng Select tuyên bố như sau:

select [columns] [by columns] from table [where clause]

Bây giờ chúng ta hãy lấy một ví dụ để minh họa cách sử dụng câu lệnh Select -

q)/ select expression example

q)select sym,price,size by time from trade where size > 2000

    time      |  sym    price     size
------------- | -----------------------
 01:44:56.936 |  msft   641.7307  2917
 02:32:17.036 |  msft   743.8592  3162
 07:24:26.842 |  ibm    838.6471  4006

Chèn

Cú pháp để sử dụng Insert tuyên bố như sau:

`tablename insert (values)
Insert[`tablename; values]

Bây giờ chúng ta hãy lấy một ví dụ để minh họa cách sử dụng câu lệnh Insert -

q)/ Insert expression example

q)`trade insert (`hsbc`apple;302.0 730.40;3020 3012;09:30:17.00409:15:00.000)
5 6

q)trade

   sym    price     size    time
------------------------------------------
  msft    743.8592  3162   02:32:17.036
  msft    641.7307  2917   01:44:56.936
  hsbc    838.2311  1492   00:25:23.210
 samsung  278.3498  1983   00:29:38.945
  ibm     838.6471  4006   07:24:26.842
  hsbc    302       3020   09:30:17.004
  apple   730.4     3012   09:15:00.000

q)/Insert another value

q)insert[`trade;(`samsung;302.0; 3333;10:30:00.000]
']

q)insert[`trade;(`samsung;302.0; 3333;10:30:00.000)]
,7

q)trade

   sym     price   size     time
----------------------------------------
  msft   743.8592  3162  02:32:17.036
  msft   641.7307  2917  01:44:56.936
  hsbc   838.2311  1492  00:25:23.210
 samsung 278.3498  1983  00:29:38.945
  ibm    838.6471  4006  07:24:26.842
  hsbc   302       3020  09:30:17.004
  apple  730.4     3012  09:15:00.000
 samsung 302       3333  10:30:00.000

Xóa bỏ

Cú pháp sử dụng Delete tuyên bố như sau:

delete columns from table
delete from table where clause

Bây giờ chúng ta hãy lấy một ví dụ để minh họa cách sử dụng câu lệnh Delete -

q)/Delete expression example

q)delete price from trade

   sym   size       time
-------------------------------
  msft   3162   02:32:17.036
  msft   2917   01:44:56.936
  hsbc   1492   00:25:23.210
 samsung 1983   00:29:38.945
  ibm    4006   07:24:26.842
  hsbc   3020   09:30:17.004
  apple  3012   09:15:00.000
 samsung 3333   10:30:00.000

q)delete from trade where price > 3000

   sym     price     size       time
-------------------------------------------
  msft    743.8592   3162    02:32:17.036
  msft    641.7307   2917    01:44:56.936
  hsbc    838.2311   1492    00:25:23.210
 samsung  278.3498   1983    00:29:38.945
  ibm     838.6471   4006    07:24:26.842
  hsbc    302        3020    09:30:17.004
  apple   730.4      3012    09:15:00.000
 samsung  302        3333    10:30:00.000

q)delete from trade where price > 500

  sym     price     size     time
-----------------------------------------
 samsung  278.3498  1983  00:29:38.945
  hsbc    302       3020  09:30:17.004
 samsung  302       3333  10:30:00.000

Cập nhật

Cú pháp để sử dụng Update tuyên bố như sau:

update column: newValue from table where ….

Sử dụng cú pháp sau để cập nhật định dạng / kiểu dữ liệu của cột bằng cách sử dụng hàm truyền -

update column:newValue from `table where …

Bây giờ chúng ta hãy lấy một ví dụ để minh họa cách sử dụng Update tuyên bố -

q)/Update expression example

q)update size:9000 from trade where price > 600

  sym     price      size     time
------------------------------------------
  msft    743.8592   9000   02:32:17.036
  msft    641.7307   9000   01:44:56.936
  hsbc    838.2311   9000   00:25:23.210
 samsung  278.3498   1983   00:29:38.945
  ibm     838.6471   9000   07:24:26.842
  hsbc    302        3020   09:30:17.004
  apple   730.4      9000   09:15:00.000
 samsung  302        3333   10:30:00.000

q)/Update the datatype of a column using the cast function

q)meta trade

   c  |  t f a
----- | --------
  sym |  s
 price|  f
 size |  j
 time |  t

q)update size:`float$size from trade

  sym     price     size      time
------------------------------------------
  msft    743.8592  3162    02:32:17.036
  msft    641.7307  2917    01:44:56.936 
  hsbc    838.2311  1492    00:25:23.210
 samsung  278.3498  1983    00:29:38.945
  ibm     838.6471  4006    07:24:26.842
  hsbc    302       3020    09:30:17.004
  apple   730.4     3012    09:15:00.000
 samsung  302       3333    10:30:00.000

q)/ Above statement will not update the size column datatype permanently

q)meta trade

   c   |  t f a
------ | --------
  sym  |   s
 price |   f
 size  |   j
 time  |   t
 
q)/to make changes in the trade table permanently, we have do

q)update size:`float$size from `trade
`trade

q)meta trade

   c   |  t f a
------ | --------
  sym  |   s
 price |   f
 size  |   f
 time  |   t