Q 언어-테이블

테이블은 kdb +의 핵심입니다. 테이블은 사전으로 구현 된 명명 된 열의 모음입니다.q tables 열 지향적입니다.

테이블 생성

테이블은 다음 구문을 사용하여 생성됩니다-

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

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

위의 예에서는 각 열의 유형을 지정하지 않았습니다. 이것은 테이블에 처음 삽입 할 때 설정됩니다.

또 다른 방법으로 초기화시 열 유형을 지정할 수 있습니다.

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

또는 비어 있지 않은 테이블을 정의 할 수도 있습니다.

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

q)trade

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

위의 예와 같이 대괄호 안에 열이 없으면 표는 다음과 같습니다. unkeyed.

만들려면 keyed table, 대괄호 안에 키에 대한 열을 삽입합니다.

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

q)trade

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

또한 값을 다양한 유형의 널 목록으로 설정하여 열 유형을 정의 할 수 있습니다.

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

테이블 정보 얻기

트레이드 테이블을 만들어 보겠습니다.

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

기본 키 및 키가 지정된 테이블

키가있는 테이블

키가 지정된 테이블은 고유 키 테이블의 각 행을 값 테이블의 해당 행에 매핑하는 사전입니다. 예를 들어 보겠습니다.

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

이제 eid를 키로 포함하는 간단한 키 테이블을 만듭니다.

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

foreign key 정의 된 테이블의 행에서 해당하는 테이블의 행으로의 매핑을 정의합니다. primary key.

외래 키 제공 referential integrity. 즉, 기본 키에없는 외래 키 값을 삽입하려는 시도는 실패합니다.

다음 예를 고려하십시오. 첫 번째 예에서는 초기화시 명시 적으로 외래 키를 정의합니다. 두 번째 예에서는 두 테이블 간의 사전 관계를 가정하지 않는 외래 키 추적을 사용합니다.

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)

외래 키 추적을 사용하려면 섹터를 입력 할 테이블을 만들어야합니다.

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

미리 정의 된 외래 키에 대한 일반 표기법-

c 에서 ab를 선택하십시오. 여기서 a는 외래 키 (sym), b는 a입니다.

기본 키 테이블 (ind)의 필드, c는

외래 키 테이블 (거래)

테이블 조작

하나의 트레이드 테이블을 생성하고 다른 테이블 표현식의 결과를 확인합시다.

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

이제 다음을 사용하여 테이블을 조작하는 데 사용되는 명령문을 살펴 보겠습니다. q 언어.

고르다

사용하는 구문 Select 진술은 다음과 같습니다-

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

이제 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

끼워 넣다

사용하는 구문 Insert 진술은 다음과 같습니다-

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

이제 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

지우다

사용하는 구문 Delete 진술은 다음과 같습니다-

delete columns from table
delete from table where clause

이제 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

최신 정보

사용하는 구문 Update 진술은 다음과 같습니다-

update column: newValue from table where ….

캐스트 함수를 사용하여 열의 형식 / 데이터 유형을 업데이트하려면 다음 구문을 사용하십시오.

update column:newValue from `table where …

이제 사용 방법을 보여주는 예를 살펴 보겠습니다. Update 성명-

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