2.타입 변환 함수

Edit

2.1array()array()

인자로 지정한 모든 표현식들을 평가하여 생성한 배열을 반환합니다.

문법

array(EXPR_1, EXPR_2, ...)
EXPR_1, EXPR_2, ...

각 배열 항목에 입력할 값을 반환하는 표현식

사용 예

json "{}" | eval array=array(1) => [1]

json "{}" | eval array=array("hello", "world") => ["hello", "world"]

json "{}"
| eval
  array=array(21 * 2, "the answer to life, the universe, and everything")
=> [42, "the answer to life, the universe, and everything"]

json "{}" | eval array=array(null) => [null]

2.2binary()binary()

문자열을 바이너리 값으로 변환합니다.

문법

binary(STR_EXPR[, CHARSET])
STR_EXPR

바이너리로 변환할 대상 문자열 표현식

CHARSET

문자열 인코딩 형식(기본값: UTF-8). IANA Charset에 등록된 Preferred MIME Name이나 Aliases를 사용합니다: https://www.iana.org/assignments/character-sets/character-sets.xhtml

사용 예

json "{}" | eval blob=binary("hello, world!") => 68656c6c6f2c20776f726c6421
json "{}" | eval blob=binary(null) => null

2.3date()date()

문자열을 날짜 타입으로 변환합니다.

문법

date(DATE_EXPR, DATE_FMT, [LOCALE])
DATE_EXPR

날짜 타입으로 변환할 원본 문자열 표현식

DATE_FMT

문자열을 파싱할 때 사용할 형식으로 다음과 같은 날짜 지시자를 사용할 수 있습니다.

표 2-1날짜 지시자

지시자

설명

예제

G

기원 전/후

AD

y

연도

1996; 96

M

July; Jul; 07

w

연 단위 주

27

W

월 단위 주

2

d

연 단위 일

189

D

월 단위 일

10

F

요일 번호

2

E

요일

Tuesday; Tue

u

요일 숫자(1=월요일, …, 7=일요일

1

a

오전/오후

PM

H

시간(0-23)

0

k

시간(1-24)

24

K

오전/오후 시간 (0-11)

0

h

오전/오후 시간 (1-12)

12

m

30

s

55

S

밀리초

978

z

시간대(일반 표기)

Pacific Standard Time; PST

Z

시간대(RFC 822 표기)

-0800

X

시간대(ISO 8601 표기)

-08;-0800;08:00

LOCALE

ISO 639에 지정된 2자리 혹은 3자리 코드 로케일. 지정하지 않으면 en으로 설정됩니다. ISO 639 로케일 코드는 다음 링크를 참조하세요: https://iso639-3.sil.org/code_tables/639/.

설명

STR 표현식이 null 또는 빈 문자열이면 null을 반환합니다. 문자열 이외의 타입인 경우 문자열로 자동 변환 후 날짜 변환을 시도합니다.

사용 예

json "{}" 
| eval date=date("2013-06-10 00:30:55.978", "yyyy-MM-dd HH:mm:ss.SSS")
=> 2013-06-10 00:30:55+0900

json "{}" 
| eval date=date("2020-01-30T10:11:12.123Z", "yyyy-MM-dd'T'HH:mm:ss.SSSX")
=> 2020-01-30 19:11:12+0900

json "{}" 
| eval date=date("6월 1 2020 12:34:56", "MMM dd yyyy HH:mm:ss", "ko")
=> 2020-06-01 12:34:56+0900

2.4dict()dict()

키-값 목록을 입력 받아 생성된 맵(map)을 반환합니다.

문법

dict(KEY_1, VALUE_1[, KEY_2, VALUE_2, ...])
KEY_1, VALUE_1[, KEY_2, VALUE_2, ...]

키와 값을 순서대로 입력

설명

키는 null이 아닌 문자열만 입력할 수 있으며, 다른 키와 중복되면 안 됩니다. 키를 중복으로 입력하면 나중에 입력한 값이 할당됩니다. 값은 모든 타입을 입력할 수 있습니다.

또한 키-값 쌍이 맞지 않으면(매개변수 개수가 홀수일 때) 오류가 발생합니다.

맵은 Java에서 사용하는 데이터 타입으로, Python 같은 언어에서 사용하는 딕셔너리를 의미합니다.

사용 예

json "{}" | eval dict=dict() => {}

json "{}" | eval dict=dict("a", "aaa") => {"a":"aaa"}

json "{}" 
| eval dict=dict(
  "name", "John",
  "age", 30,
  "host", ip("1.2.3.4"),
  "hobby", array("music","movie","sports"),
  "birthday", date("19800101","yyyyMMdd"))
=> {"birthday":"1980-01-01 00:00:00+0900","name":"John","host":"/1.2.3.4","age":30,"hobby":["music","movie","sports"]}

2.5double()double()

문자열을 64비트 배정도 실수로 변환합니다.

문법

double(STR_EXPR)
STR_EXPR

실수로 변환할 문자열을 반환하는 표현식

설명

표현식이 null이면 null을 반환합니다. 실수 변환에 실패해도 null을 반환합니다. 표현식이 반환한 값이 문자열이 아닌 경우, 문자열로 자동 변환한 다음 실수 변환을 시도합니다.

사용 예

json "{}" | eval numbers=double("1.2") => 1.2

json "{}" | eval numbers=double("0") => 0.0

json "{}" | eval numbers=double(0) => 0.0

json "{}" | eval numbers=double("invalid") => null

json "{}" | eval numbers=double(null) => null

2.6flatten()flatten()

재귀적으로 중첩된 배열의 요소를 모두 꺼내어 단일 배열로 변환합니다. 그 외의 경우는 입력 값을 그대로 반환합니다. strjoin()을 사용하여 배열을 하나의 문자열로 병합하기 전에, 중첩된 배열 요소들을 단일 배열로 변환하는 용도로 사용합니다.

문법

flatten(ARRAY_EXPR)
ARRAY_EXPR

단일 배열로 변환할 값을 반환하는 표현식

사용 예

json "{}" 
| eval array=flatten(array(1, array(2, 3), 4))
=> [ 1, 2, 3, 4 ]

2.7foreach()foreach()

배열 내의 인자를 빼내지 않고 배열을 대상으로 혹은 복수의 배열끼리 연산을 수행합니다.

문법

foreach(OP_EXPR, LIST_EXPR_1, LIST_EXPR_2[, ...])
OP_EXPR

배열 요소 사이에 수행할 연산식. 첫번째 배열의 요소는 _1, 두 번째 배열의 요소는 _2, N 번째 배열 요소는 _N을 매개변수로 사용

LIST_EXPR_1, LIST_EXPR_2[, ...]

배열을 반환하는 표현식을 쉼표(,)로 구분하여 지정

설명

매개변수로 전달되는 배열들의 길이가 같지 않으면 긴 배열을 구성하는 요소의 개수에 맞추어 짧은 배열에 null이 할당된 요소를 채운 후에 연산을 수행합니다. 예를 들어, 첫번째 배열이 5개 요소, 두 번째 배열이 3개 요소로 구성되어 있으면 두 번째 배열에 값이 null인 요소를 2개 더 추가한 뒤에 연산을 수행합니다.

인자로 목록 대신 스칼라 값이 전달되면 리스트로 복제하여 확장 첫번째 리스트를 _1, 두번째 리스트를 _2의 방식으로 치환하여 OP_EXPR에 따라 각각 연산합니다.

사용 예

json "{}" 
| eval arr1= array(-1, -2, -3, -4, -5), arr2= array(1,2,3,4,5) 
| eval _output = foreach(_1 * _2, arr1, arr2) 
| order arr1, arr2, _output
=> [-1,-4,-9,-16,-25]

2.8frombase64()frombase64()

BASE64 문자열을 바이너리로 변환하여 반환합니다.

문법

frombase64(BASE64_STR)
BASE64_STR

BASE64로 인코딩된 문자열

사용 예

json "{}" 
| eval str=decode(frombase64("aGVsbG8sIHdvcmxkIQ=="))
=> "hello, world!"

2.9fromhex()fromhex()

16진수 문자열을 바이너리로 변환합니다.

문법

fromhex(STR_EXPR)
STR_EXPR

바이너리로 변환할 문자열로, 대소문자를 가리지 않습니다.

다음과 같은 상황에서 null을 반환합니다.

사용 예

json "{}" 
| eval blob=fromhex("68656c6c6f20776f726c64")
=> 68656c6c6f20776f726c64

json "{}" 
| eval blob=fromhex("616263646") => null

json "{}" | eval blob=fromhex("test") => null

json "{}" | eval blob=fromhex(null) => null

2.10groups()groups()

문자열에서 주어진 정규표현식의 그룹에 매칭되는 항목들을 배열로 반환합니다.

문법

groups(STR_EXPR, REGEX_PATTERN)
STR_EXPR

추출 대상 원본 문자열 표현식

REGEX_PATTERN

그룹을 포함한 정규표현식 문자열

사용 예

json "{}"
| eval array=groups("Mar 29 2004 09:54:39", "(.*?) (.*?) (.*?) ")
  => [Mar, 29, 2004]

2.11int()int()

문자열을 정수로 변환합니다.

문법

int(EXPR)
EXPR

정수로 변환할 문자열을 반환하는 표현식. 인자는 문자열(string), double, float, IP 주소, 배열 중 하나이어야 합니다.

표현식을 평가할 때 다음과 같이 동작합니다.

사용 예

json "{}" | eval numbers=int("1234") => 1234

json "{}" | eval numbers=int(1234) => 1234

json "{}" | eval numbers=int(ip("0.0.0.1")) => 1

json "{}" | eval numbers=int(ip("192.168.0.1")) => -1062731775

json "{}" | eval numbers=int(12345.6789) => 12345

json "{}" | eval numbers=int(null) => null

json "{}" | eval numbers=int("invalid") => null

json "{}" | eval numbers=int(array("1", "abc", "2", 3, array(4)))
=> [1, null, 2, 3, null]

2.12ip()ip()

문자열 표현식을 IP 주소 타입으로 변환합니다.

문법

ip(EXPR)
EXPR

IP 주소로 변환할 문자열을 반환하는 표현식. 인자는 문자열(string), signed int, long 중 하나이어야 합니다.

표현식을 평가할 때 다음과 같이 동작합니다.

IP 주소 타입은 로그프레소의 기본 데이터 타입 중 하나입니다. IP 주소 타입은 '/'로 시작하며, ipv4ipv6 주소를 모두 표현할 수 있습니다.

사용 예

json "{}" | eval ip=ip("1.2.3.4") => /1.2.3.4

json "{}" | eval ip=ip("::1") => /0:0:0:0:0:0:0:1

json "{}" | eval ip=ip(4294967295) => /255.255.255.255

json "{}" | eval ip=ip(-1062731775) => /192.168.0.1

json "{}" | eval ip=ip("invalid") => null

json "{}" | eval ip=ip(null) => null

2.13long()long()

문자열을 64비트 정수로 변환합니다.

문법

long(EXPR)
EXPR

64비트 정수로 변환할 문자열을 반환하는 표현식. 인자는 문자열(string), int, IP 주소 중 하나이어야 합니다.

표현식을 평가할 때 다음과 같이 동작합니다.

사용 예

json "{}" | eval numbers=long("1234") => 1234

json "{}" | eval numbers=long(1234) => 1234

json "{}" | eval numbers=long(ip("0.0.0.1")) => 1

json "{}" | eval numbers=long(ip("192.168.0.1")) => 3232235521

json "{}" | eval numbers=long(null) => null

json "{}" | eval numbers=long("invalid") => null

2.14string()string(), str()str()

임의의 표현식을 문자열로 변환하거나, 지정한 형식으로 날짜 형식 문자열을 변환합니다.

문법

string(EXPR)
string(DATE_EXPR, DATE_FMT[, LOCALE])
string(DATE_EXPR, DATE_FMT[, TIMEZONE])
str(EXPR)
str(DATE_EXPR, DATE_FMT[, LOCALE])
str(DATE_EXPR, DATE_FMT[, TIMEZONE])
EXPR

문자열로 변환할 값을 반환하는 표현식

DATE_EXPR

날짜 타입으로 변환할 원본 문자열 표현식

DATE_FMT

date()에서 사용하는 것과 동일한 날짜 지시자를 사용하여 문자열을 파싱할 때 사용할 형식을 정의합니다.

TIMEZONE

시간대는 'GMT+09', 'GMT+0900', 'GMT+09:00', 'GMT+9:00'과 같은 형식으로 입력할 수 있습니다.

LOCALE

문자로 된 시간대 약어도 지원하지만, 중의적인 의미를 가질 수 있으므로 주의해야 합니다. 예를 들어 'CST'는 중국 표준시일 수도 있고, 미국 중부 표준시나 쿠바 표준시일 수도 있습니다. 시간대를 지정하지 않으면 로그프레소가 설치된 시스템의 로케일에 따른 시간대를 사용합니다. 시간대 약어는 다음 주소에 있는 Time Zone Abbreviations – Worldwide List를 참조하세요: https://www.timeanddate.com/time/zones/

표 2-2시간대 약어 예시

약어

GMT 오프셋

설명

UTC

GMT+0

협정 세계시

KST

GMT+9

대한민국 표준시

CEST

GMT+2

중앙유럽 서머타임

MSK

GMT+3

모스크바 표준시

PST

GMT-7

태평양 표준시

EST

GMT-5

미국 동부 표준시

사용 예

json "{}" | eval str=string(1) => "1"

json "{}" | eval str=string(1.2) => "1.2"

json "{}" | eval str=string(true) => "true"

json "{}" | eval str=string(null) => null

json "{}" | eval str=string(now(),"yyyyMMddHHmmss") => "20140807164417"

json "{}"
| eval
  str=string(date("20170329","yyyyMMdd"),"yyyy-MM-dd HH:mm:ssZ","GMT+08")
  => "2017-03-28 23:00:00+0800"

2.15tobase64()tobase64()

바이너리 값을 BASE64 문자열로 반환합니다.

문법

tobase64(BLOB_EXPR)
BLOB_EXPR

바이너리로 평가되는 표현식을 입력합니다. 바이너리가 아닌 값을 받으면 null을 반환합니다.

사용 예

json "{}" | eval str=tobase64(binary("hello, world!"))
=> "aGVsbG8sIHdvcmxkIQ=="

2.16tohex()tohex()

바이너리 값을 16진수 문자열로 변환합니다. 매개변수 값이 바이너리 타입이 아닌 경우에는 null을 반환합니다.

문법

tohex(BLOB_EXPR)
BLOB_EXPR

16진수 문자로 변환할 바이너리 값

사용 예

json "{}" | eval hex=tohex(encode("abcde")) => "6162636465"

json "{}" | eval hex=tohex(1234) => null

json "{}" | eval hex=tohex(null) => null

2.17unique()unique()

표현식 값이 배열인 경우, 중복된 원소를 제거한 배열을 반환하고, 단일 값을 인자로 받으면 하나의 원소만 포함한 배열을 반환합니다. 반환합니다.

문법

unique(EXPR)
EXPR

중복된 원소를 제거할 배열을 반환하는 표현식. 이 때 반환되는 배열의 순서는 보장하지 않습니다. 표현식이 단일 값인 경우, 하나의 원소만 포함한 배열을 반환합니다. 표현식이 null인 경우 null을 반환합니다.

사용 예

json "{}" | eval array=unique(array(1, 1, 2, "2")) => ["2", 1, 2]
Count of comments [0]