Q Idioma - Tabla
Las tablas están en el corazón de kdb +. Una tabla es una colección de columnas nombradas implementadas como un diccionario.q tables están orientados a columnas.
Crear tablas
Las tablas se crean utilizando la siguiente sintaxis:
q)trade:([]time:();sym:();price:();size:())
q)trade
time sym price size
-------------------
En el ejemplo anterior, no hemos especificado el tipo de cada columna. Esto será establecido por el primer inserto en la tabla.
De otra forma, podemos especificar el tipo de columna en la inicialización:
q)trade:([]time:`time$();sym:`$();price:`float$();size:`int$())
O también podemos definir tablas no vacías -
q)trade:([]sym:(`a`b);price:(1 2))
q)trade
sym price
-------------
a 1
b 2
Si no hay columnas entre corchetes como en los ejemplos anteriores, la tabla es unkeyed.
Para crear un keyed table, insertamos la (s) columna (s) de la clave entre corchetes.
q)trade:([sym:`$()]time:`time$();price:`float$();size:`int$())
q)trade
sym | time price size
----- | ---------------
También se pueden definir los tipos de columna configurando los valores para que sean listas nulas de varios tipos:
q)trade:([]time:0#0Nt;sym:0#`;price:0#0n;size:0#0N)
Obtener información de la mesa
Creemos una mesa de comercio -
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
Teclas primarias y tablas con claves
Mesa con llave
Una tabla con claves es un diccionario que asigna cada fila en una tabla de claves únicas a una fila correspondiente en una tabla de valores. Tomemos un ejemplo:
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
Ahora cree una tabla con clave simple que contenga eid como clave,
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
Llaves extranjeras
UN foreign key define una asignación de las filas de la tabla en la que se define a las filas de la tabla con el correspondiente primary key.
Las claves externas proporcionan referential integrity. En otras palabras, fallará un intento de insertar un valor de clave externa que no esté en la clave principal.
Considere los siguientes ejemplos. En el primer ejemplo, definiremos una clave externa explícitamente en la inicialización. En el segundo ejemplo, usaremos la búsqueda de claves foráneas que no asumen ninguna relación previa entre las dos tablas.
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)
Para usar la persecución de claves foráneas, debemos crear una tabla para ingresar al sector.
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
Notación general para una clave externa predefinida -
seleccione ab de c donde a es la clave externa (sym), b es a
campo en la tabla de clave primaria (ind), c es el
tabla de clave externa (comercio)
Manipulación de tablas
Creemos una tabla de operaciones y verifiquemos el resultado de diferentes expresiones de tabla
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
Echemos ahora un vistazo a las declaraciones que se utilizan para manipular tablas utilizando q idioma.
Seleccione
La sintaxis para usar un Select declaración es la siguiente:
select [columns] [by columns] from table [where clause]
Tomemos ahora un ejemplo para demostrar cómo usar la instrucción 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
Insertar
La sintaxis para usar un Insert declaración es la siguiente:
`tablename insert (values)
Insert[`tablename; values]
Tomemos ahora un ejemplo para demostrar cómo usar la instrucción 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
Eliminar
La sintaxis para usar un Delete declaración es la siguiente:
delete columns from table
delete from table where clause
Tomemos ahora un ejemplo para demostrar cómo usar la instrucción 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
Actualizar
La sintaxis para usar un Update declaración es la siguiente:
update column: newValue from table where ….
Use la siguiente sintaxis para actualizar el formato / tipo de datos de una columna usando la función de conversión:
update column:newValue from `table where …
Tomemos ahora un ejemplo para demostrar cómo usar Update declaración -
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