# PantherFlow 데이터 유형

{% hint style="info" %}
PantherFlow는 Panther 버전 1.110부터 오픈 베타로 제공되며, 모든 고객이 사용할 수 있습니다. 버그 보고 및 기능 요청이 있으면 Panther 지원팀에 공유해 주세요.
{% endhint %}

## 정수

정수는 허용됩니다. 예를 들면:

* `1`
* `-2`

## 실수

실수는 허용됩니다. 예를 들면:

* `1.01`
* `-6.6`

## 문자열

작은따옴표 또는 큰따옴표로 묶인 문자열은 허용됩니다. 예를 들면:

* `'foo'`
* `"foo"`

유니코드 문자는 문자열에 직접 포함할 수 있습니다. 예를 들면:

* `'Panther is my favorite animal` :cat:`'`

서로 다른 유형의 따옴표는 이스케이프되지 않습니다. 예를 들면:

* `'foo and "bar"'` → `foo and "bar"`
* `"foo and 'bar'"` → `foo and 'bar'`

같은 유형의 따옴표는 백슬래시 문자로 이스케이프됩니다. 예를 들면:

* `'foo and \'bar\''` → `foo and 'bar'`
* `"foo and \"bar\""` → `foo and "bar"`

백슬래시 문자는 이스케이프해야 합니다. 예를 들면:

* `"foo\\bar"` → `foo\bar`

다른 이스케이프도 지원됩니다:

<table><thead><tr><th width="134">이스케이프</th><th width="228">설명</th><th>예시</th></tr></thead><tbody><tr><td><code>\'</code></td><td><code>'</code></td><td></td></tr><tr><td><code>\"</code></td><td><code>"</code></td><td></td></tr><tr><td><code>\\</code></td><td><code>\</code></td><td></td></tr><tr><td><code>\b</code></td><td>백스페이스 문자</td><td></td></tr><tr><td><code>\f</code></td><td>폼피드 문자</td><td></td></tr><tr><td><code>\n</code></td><td>줄 바꿈 문자</td><td></td></tr><tr><td><code>\r</code></td><td>캐리지 리턴 문자</td><td></td></tr><tr><td><code>\t</code></td><td>탭 문자</td><td></td></tr><tr><td><code>\ooo</code></td><td>8진수</td><td><code>\377</code></td></tr><tr><td><code>\xhh</code></td><td>16진수</td><td><code>\xF0\x9F\x98\x8E</code></td></tr><tr><td><code>\uhhhh</code></td><td>유니코드</td><td><code>\u5b89</code></td></tr></tbody></table>

## 부울

일반적인 불리언 값은 허용됩니다:`true` 및 `false`.

## 타임스탬프

타임스탬프는 [`time.parse_timestamp()`](https://docs.panther.com/ko/functions#time.parse_timestamp) 함수를 사용해 표시해야 하며, 이 함수는 문자열을 타임스탬프로 변환합니다. 예를 들면:

* `time.parse_timestamp('2023-06-01 13:14:15.00Z')`

타임스탬프는 서로 비교할 수 있습니다. 예를 들어, 다음 식은 현재 날짜와 시간이 다음보다 이후이면 true로 평가됩니다 `2024-12-11 09:46:22.00Z`:

* `time.now() > time.parse_timestamp('2024-12-11 10:42:32.00Z')`

## 기간

기간은 숫자와 단위로 구성되어야 합니다. [`time.parse_timespan()`](https://docs.panther.com/ko/functions#time.parse_timespan) 함수는 이 형식의 문자열을 기간으로 변환합니다. 예를 들면:

* `time.parse_timespan('1d')`
* `1d`
* `1.5s`

여러 단위가 지원됩니다:

<table><thead><tr><th width="181.5">단위</th><th>시간 길이</th></tr></thead><tbody><tr><td><code>마이크로초</code></td><td>마이크로초</td></tr><tr><td><code>ms</code></td><td>밀리초</td></tr><tr><td><code>s</code></td><td>초</td></tr><tr><td><code>m</code></td><td>분</td></tr><tr><td><code>h</code></td><td>시</td></tr><tr><td><code>d</code></td><td>일</td></tr></tbody></table>

기간은 타임스탬프와 산술적으로 사용할 수 있습니다. 예를 들면:

* `time.now() - 1d`
  * 이 식은 하루 전의 타임스탬프로 평가됩니다
* `p_event_time > time.ago(1d)`
  * 이 식은 다음 경우 true로 평가됩니다 `p_event_time` 하루 전보다 더 최근인 경우

## 객체

객체는 중괄호로 표현할 수 있습니다 `{'key': value}` 또는 다음에 값을 전달하여 [`object()`](https://docs.panther.com/ko/functions#object) 함수로 만들 수 있습니다. 키는 문자열이어야 하며, 값은 어떤 유형이든 될 수 있습니다(스칼라, 배열, 객체 포함).

예를 들면:

* `{'key1': 'foo', 'key2': 1}`
* `object('key1', 'foo', 'key2', 1)`

객체 필드는 점 표기법 또는 대괄호를 사용해 접근할 수 있습니다. 예를 들면:

* `obj.key1`
* `obj['key1']`

객체에 없는 키의 값은 `null`:

* `obj['missing key'] == null`

키를 null로 설정하면 객체에서 제거됩니다:

* `obj['delete me'] = null`

## 배열

배열은 대괄호로 표현할 수 있습니다 `[A, B]`, 또는 다음에 값을 전달하여 [`array()`](https://docs.panther.com/ko/functions#array) 함수로 만들 수 있습니다. 배열의 요소는 어떤 유형이든 될 수 있으며(스칼라, 배열, 객체 포함), 하나의 배열에 서로 다른 유형의 값이 함께 들어갈 수 있습니다. 예를 들면:

* `['apple', 'orange', 'banana']`
* `array('apple', 12, 'orange')`
* `['one', 1, {'flavor': 'chocolate', 'texture': 'melted'}]`

배열의 요소는 대괄호로 접근할 수 있습니다:

* `arr[1]`

배열은 다음으로 요소 포함 여부를 확인할 수 있습니다 `의` 및 `not in`에 보존됩니다. 예:

* `'foo' in myarray`
* `'foo' not in myarray`

## 테이블

테이블 이름은 대소문자를 구분하지 않습니다. 즉, 예를 들어 `tableName` 은 다음과 같습니다 `Tablename`.

## 열

열 이름은 대소문자를 구분합니다. 즉, 예를 들어 `columnName` 은 다음과 다릅니다 `ColumnName`.

## 널

Null은 다음으로 표시됩니다 `null`.
