Q 언어-속성

테이블의 목록, 사전 또는 열에는 속성이 적용될 수 있습니다. 속성은 목록에 특정 속성을 부과합니다. 일부 속성은 수정시 사라질 수 있습니다.

속성 유형

정렬 됨 (`s #)

`s #은 목록이 오름차순으로 정렬되었음을 의미합니다. 목록이 asc (또는 xasc)로 명시 적으로 정렬 된 경우 목록은 자동으로 정렬 된 속성 세트를 갖습니다.

q)L1: asc 40 30 20 50 9 4

q)L1
`s#4 9 20 30 40 50

정렬 된 것으로 알려진 목록은 속성을 명시 적으로 설정할 수도 있습니다. Q 목록이 정렬되었는지 확인하고 그렇지 않은 경우 s-fail 오류가 발생합니다.

q)L2:30 40 24 30 2

q)`s#L2
's-fail

정렬되지 않은 추가시 정렬 된 속성이 손실됩니다.

Parted (`p #)

`p #은 목록이 분할되고 동일한 항목이 연속적으로 저장됨을 의미합니다.

범위는 int 또는 temporal type 년, 월, 일 등과 같은 기본 int 값이 있습니다. 열거 된 경우 기호를 분할 할 수도 있습니다.

parted 속성을 적용하면 각각의 고유 한 출력 값을 첫 번째 발생 위치에 매핑하는 색인 ​​사전이 생성됩니다. 목록이 분할되면 선형 검색이 해시 테이블 검색으로 대체되므로 검색이 훨씬 빠릅니다.

q)L:`p# 99 88 77 1 2 3

q)L
`p#99 88 77 1 2 3

q)L,:3

q)L
99 88 77 1 2 3 3

Note −

  • parted 속성은 작업이 파티셔닝을 유지하더라도 목록의 작업에서 유지되지 않습니다.

  • parted 속성은 엔티티 수가 10 억에 도달하고 대부분의 파티션이 상당한 크기 (즉, 상당한 반복이있는 경우)를 고려해야합니다.

그룹화 (`g #)

`g #은 목록이 그룹화되었음을 의미합니다. 내부 사전이 구축 및 유지 관리되어 각 고유 항목을 각 인덱스에 매핑하므로 상당한 저장 공간이 필요합니다. 길이 목록L 포함 u 크기의 독특한 아이템 s, 이것은 ~이 될 것이다 (L × 4) + (u × s) 바이트.

목록의 구조에 대한 다른 가정을 할 수없는 경우 목록에 그룹화를 적용 할 수 있습니다.

이 속성은 모든 유형의 목록에 적용 할 수 있습니다. 추가시 유지되지만 삭제시 손실됩니다.

q)L: `g# 1 2 3 4 5 4 2 3 1 4 5 6

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6

q)L,:9

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6 9

q)L _:2

q)L
1 2 4 5 4 2 3 1 4 5 6 9

고유 (`#u)

목록에 고유 속성 (`u #)을 적용하면 목록의 항목이 구별됨을 나타냅니다. 목록의 요소가 고유하다는 것을 알면 속도가 크게 향상됩니다.distinct 허용 q 일부 비교를 일찍 실행합니다.

목록이 고유 한 것으로 표시되면 목록의 각 항목에 대해 내부 해시 맵이 생성됩니다. 목록의 작업은 고유성을 유지해야합니다. 그렇지 않으면 속성이 손실됩니다.

q)LU:`u#`MSFT`SAMSUNG`APPLE

q)LU
`u#`MSFT`SAMSUNG`APPLE

q)LU,:`IBM                        /Uniqueness preserved

q)LU
`u#`MSFT`SAMSUNG`APPLE`IBM

q)LU,:`SAMSUNG                    / Attribute lost

q)LU
`MSFT`SAMSUNG`APPLE`IBM`SAMSUNG

Note −

  • `u #은 고유성을 보존하는 연결에 보존됩니다. 삭제 및 고유하지 않은 연결시 손실됩니다.

  • `u # 목록에 대한 검색은 해시 함수를 통해 수행됩니다.

속성 제거

속성은`#을 적용하여 제거 할 수 있습니다.

속성 적용

속성을 적용하는 세 가지 형식은 다음과 같습니다.

  • L: `s# 14 2 3 3 9/ 목록 생성시 지정

  • @[ `.; `L ; `s#]/ 기능적 적용, 즉 변수 목록 L에

    / 기본 네임 스페이스 (예 :`.)에 적용

    / 정렬 된`s # 속성

  • Update `s#time from `tab

    / 테이블 (탭)을 업데이트하여

    / 속성.

위의 세 가지 형식을 예제와 함께 적용 해 보겠습니다.

q)/ set the attribute during creation

q)L:`s# 3 4 9 10 23 84 90

q)/apply the attribute to existing list data

q)L1: 9 18 27 36 42 54

q)@[`.;`L1;`s#]
`.

q)L1                 / check
`s#9 18 27 36 42 54

q)@[`.;`L1;`#]       / clear attribute
`.

q)L1
9 18 27 36 42 54

q)/update a table to apply the attribute

q)t: ([] sym:`ibm`msft`samsung; mcap:9000 18000 27000)

q)t:([]time:09:00 09:30 10:00t;sym:`ibm`msft`samsung; mcap:9000 18000 27000)

q)t

    time         sym    mcap
---------------------------------
  09:00:00.000   ibm    9000
  09:30:00.000   msft   18000
  10:00:00.000  samsung 27000

q)update `s#time from `t
`t

q)meta t               / check it was applied

    c  | t f a
------ | -----
  time | t s
  sym  | s
  mcap | j
  
Above we can see that the attribute column in meta table results shows the time column is sorted (`s#).