📝

4. 함수

 
함수는 입력값을 받아 특정 작업을 수행하고 결과 값을 반환합니다. 데이터베이스에서 데이터를 추출, 변환, 요약하는 역할을 하며 분석 작업을 효율적으로 수행하기 위한 핵심 도구입니다. 이 챕터에서는 Google BigQuery에서 제공하는 수치형, 문자형, 날짜형, 그리고 형변환과 같은 다양한 목적을 지닌 함수에 대해 살펴보겠습니다.
 

4.1. 수치형 함수

4.1.1. ROUND/ TRUNC/ CEIL/ FLOOR

  • ROUND
ROUND() 함수는 해당 항목 레코드의 숫자를 지정한 자리까지 반올림하여 출력하는 함수입니다. 반올림 방향은 자릿수가 양수일 경우 소수점 자릿수에서 반올림되고, 음수일 경우 정수 자릿수에서 반올림됩니다. 이를 통해 숫자를 원하는 형식으로 표시하거나 값을 제한하는 데 유용하게 사용됩니다.
SELECT ROUND(숫자, 자릿수)
 
예시
SELECT ROUND(1.2345, 2) # 소숫점 2번째자리까지 반올림 , ROUND(456, -1); # 1의 자리부터는 마이너스(-)로 표현
notion imagenotion image
 
  • TRUNC
TRUNC() 함수는 해당 항목 레코드의 숫자를 지정한 자리까지 내림하여 출력하는 함수입니다. 내림 방향은 자릿수가 양수일 경우 소수점 자릿수에서 내림되고, 음수일 경우 정수 자릿수에서 내림됩니다. 이를 통해 숫자를 원하는 형식으로 표시하거나 값을 제한하는 데 유용하게 사용됩니다.
SELECT TRUNC(숫자, 자릿수)
 
예시
SELECT TRUNC(1.2345, 2) # 소숫점 2번째자리까지 내림 , TRUNC(456, -1); # 1의 자리부터는 마이너스(-)로 표현
notion imagenotion image
 
  • CEIL
CEIL() 함수는 해당 항목 레코드의 숫자를 올림 하여 정수형으로 출력하는 함수입니다. 이 함수는 소수점 자리를 사용자가 지정할 수 없고 결과를 INTEGER(정수)형으로만 출력합니다. 따라서 CEIL()함수를 사용하면 숫자를 올림 하여 가장 가까운 정수로 변환할 수 있습니다.
SELECT CEIL(숫자)
 
예시
SELECT CEIL(1.2345) # 양수 , CEIL(-456.789); # 음수
notion imagenotion image
 
  • FLOOR
FLOOR() 함수는 해당 항목 레코드의 숫자를 내림하여 정수형으로 출력하는 함수입니다. 이 함수는 소수점 자리를 사용자가 지정할 수 없고 결과를 INTEGER(정수)형으로만 출력합니다. 따라서 FLOOR()함수를 사용하면 숫자를 내림하여 정수로 변환할 수 있습니다.
SELECT FLOOR(숫자)
 
예시
SELECT FLOOR(1.2345) # 양수 , FLOOR(-456.789); # 음수
notion imagenotion image
 

4.1.2. SAFE_MULTIPLY/ SAFE_DIVIDE

  • SAFE_MULTIPLY
SAFE_MULTIPLY() 함수는 해당 레코드의 숫자를 곱한 값을 출력하는 함수로, 값을 나타내지 못하는 경우 NULL값을 출력하여 안전한 데이터 처리를 보장하는 함수입니다.
SELECT SAFE_MULTIPLY(숫자, 숫자)
➡️
예를 들어, SAFE_MULTIPLY(column1, column2)와 같이 사용할 수 있으며, 이는 “column1”과 “column2”를 곱한 결과를 반환합니다. 만약 “column1” 또는 “column2”가 NULL값이거나 값이 나타내지 못하는 경우, 일반적인 곱셈 연산에서 오류가 발생하는 대신 SAFE_MULTIPLYNULL 값을 반환하여 쿼리의 실행을 중단시키지 않습니다.
 
예시 1
SELECT SAFE_MULTIPLY(10, 2) , SAFE_MULTIPLY(10, null); # 결과는 NULL로 출력된다.
notion imagenotion image
 
  • SAFE_DIVIDE
SAFE_DIVIDE() 함수는 해당 항목 레코드의 숫자를 나눈 값을 출력하는 함수로, 값을 나타내지 못하는 경우 NULL값을 출력합니다. 이 함수는 주로 0으로 나누는 예외오류를 방지하고 나눗셈 중에 안전한 결과를 보장하기 위해 사용됩니다.
SELECT SAFE_DIVIDE(숫자, 나눌 숫자)
➡️
예를 들어, SAFE_DIVIDE(column1, column2)와 같이 사용할 수 있으며, 이는 “column1”을 “column2”로 나눈 결과를 출력합니다. 만약 “column2”가 0이라면 일반적인 나눗셈 연산에서 오류가 발생하지만, SAFE_DIVIDE를 사용하면 오류가 발생하는 대신 NULL값을 반환하여 쿼리의 실행을 중단시키지 않습니다. 이것은 데이터 분석 및 계산 중에 안전성을 보장하는 데 유용한 함수입니다.
 
예시
SELECT SAFE_DIVIDE(10, 3) , SAFE_DIVIDE(10, 0); # 0으로 나눌 경우 NULL로 출력
notion imagenotion image
 

4.1.3. MOD/ ABS

  • MOD
MOD() 함수는 해당 항목 레코드의 숫자를 나누기하여 나머지를 출력하는 함수입니다. 나머지 연산은 일정한 주기로 나누는 데 유용하며, 예를 들어 숫자가 짝수인지 홀수인지 확인하거나 순환 패턴을 계산하는 데 사용될 수 있습니다.
SELECT MOD(숫자, 나눌 숫자)
 
예시
SELECT MOD(17, 3); # 나머지 2
notion imagenotion image
 
  • ABS
ABS() 함수는 해당 항목 레코드의 절대 값을 출력하는 함수입니다.
SELECT ABS(숫자)
 
예시
SELECT ABS(-1);
notion imagenotion image
 

4.1.4. POWER/ SQRT

  • POWER
POWER() 함수는 해당 항목 레코드의 숫자를 제곱하여 출력하는 함수입니다.
SELECT POWER(숫자, 승수)
 
예시
SELECT POWER(10, 2) , POWER(2, 4);
notion imagenotion image
 
  • SQRT
SQRT() 함수는 해당 항목 레코드의 제곱근을 출력하는 함수입니다.
SELECT SQRT(숫자)
 
예시
SELECT SQRT(4) , SQRT(25);
notion imagenotion image
 

4.1.5. EXP/ LOG

  • EXP
EXP() 함수는 해당 항목 레코드의 지수값을 출력하는 함수입니다.
SELECT EXP(숫자)
 
예시
SELECT EXP(2);
notion imagenotion image
 
  • LOG
LOG() 함수는 해당 항목 레코드의 숫자의 로그 값을 출력하는 함수입니다. 밑을 지정하지 않으면 자연로그 값을 출력합니다. 그 외에 LN(), LOG10()로 자연로그 및 밑이 10인 로그 값을 출력할 수 있습니다.
SELECT LOG(진수, 밑)
 
예시
SELECT LOG(100, 10) # 밑 10 , LOG(100); # 자연로그
notion imagenotion image
 

4.1.6. RAND

RAND() 함수는 난수 생성 함수로, 0에서 1 사이의 값을 출력합니다.
SELECT RAND(SEED)
 
예시
SELECT RAND();
notion imagenotion image
 

4.2. 문자형 함수

4.2.1. SUBSTR/ LEFT/ RIGHT

  • SUBSTR
SUBSTR() 함수는 문자열의 일부를 출력하는 함수입니다.
SELECT SUBSTR(문자열, 시작 인덱스, 길이)
 
예시 1
SELECT SUBSTR("BigQuery is fun", 13, 3); # 13번째 문자열부터 3개의 문자열 출력
notion imagenotion image
 
예시 2
“employees” 테이블에서 전화번호 가운데 번호 3자리를 조회합니다.
SELECT phone_number , SUBSTR(phone_number, 5, 3) FROM `HR.employees`;
notion imagenotion image
 
  • LEFT
LEFT() 함수는 문자열의 왼쪽부터 일부를 출력하는 함수입니다.
SELECT LEFT(문자열, 길이)
 
예시 1
SELECT LEFT("BigQuery is fun", 8); # 왼쪽에서부터 8번째 문자열까지 출력
notion imagenotion image
 
예시 2
“employees” 테이블에서 전화번호 앞 번호 3자리를 조회합니다.
SELECT phone_number , LEFT(phone_number, 3) FROM `HR.employees`;
notion imagenotion image
 
  • RIGHT
RIGHT() 함수는 문자열의 오른쪽부터 일부를 출력하는 함수입니다.
SELECT RIGHT(문자열, 길이)
 
예시 1
SELECT RIGHT("BigQuery is fun", 3); # 오른쪽에서부터 3번째 문자열까지 출력
notion imagenotion image
 
예시 2
“employees” 테이블에서 전화번호 뒷 번호 4자리를 조회합니다.
SELECT phone_number , RIGHT(phone_number, 4) FROM `HR.employees`;
notion imagenotion image
 

4.2.2. CONCAT

CONCAT() 함수는 여러 문자열을 하나로 연결하여 출력하는 함수입니다.
SELECT CONCAT(문자열1, 문자열2, ...)
 
예시 1
SELECT CONCAT("Big", "Query", " ", "is", " ", "fun");
notion imagenotion image
 
예시 2
“employees” 테이블에서 “first_name” 컬럼과 “last_name” 컬럼을 사용하여 “full_name”를 조회합니다.
SELECT first_name , last_name , CONCAT(first_name, last_name) AS full_name FROM `HR.employees`;
notion imagenotion image
 
예시 3
연결연산자(||)로도 여러 문자열을 하나로 연결하여 출력할 수 있습니다.
SELECT "Big"||"Query"||" "||"is"||" "||"fun";
notion imagenotion image
 

4.2.3. LOWER/ UPPER/ INITCAP

  • LOWER
LOWER() 함수는 문자열을 모두 소문자로 변환하여 출력하는 함수입니다.
SELECT LOWER(문자열)
 
예시
SELECT LOWER("BigQuery is fun");
notion imagenotion image
 
  • UPPER
UPPER() 함수는 문자열을 모두 대문자로 변환하여 출력하는 함수입니다.
SELECT UPPER(문자열)
 
예시
SELECT UPPER("BigQuery is fun");
notion imagenotion image
 
  • INITCAP
INITCAP() 함수는 문자열의 맨 앞 문자만 대문자로 변환하여 출력하는 함수입니다.
SELECT INITCAP(문자열)
 
예시
SELECT INITCAP("bigQuery");
notion imagenotion image
 

4.2.4. REPLACE

REPLACE() 함수는 문자열을 다른 문자열로 대체하여 출력하는 함수입니다.
SELECT REPLACE(문자열, 대체 대상 문자열, 대체 문자열)
 
예시 1
SELECT REPLACE("BigQuery is fun", "fun", "fantastic");
notion imagenotion image
 
예시 2
“employees” 테이블의 “phone_number” 컬럼의 값에서 점(“.”)을 대시(“-”)로 대체하여 조회합니다.
SELECT phone_number , REPLACE(phone_number, ".", "-") FROM `HR.employees`;
notion imagenotion image
 

4.2.5. LENGTH

LENGTH() 함수는 문자열의 길이를 출력하는 함수입니다.
SELECT LENGTH(문자열)
 
예시 1
SELECT LENGTH("BigQuery");
notion imagenotion image
 
예시 2
“employees” 테이블의 “first_name” 컬럼의 값의 길이를 조회합니다.
SELECT first_name , LENGTH(first_name) AS first_name_length FROM `HR.employees`;
notion imagenotion image
 

4.2.6. INSTR

INSTR() 함수는 특정 문자의 위치를 출력하는 함수입니다.
SELECT INSTR(문자열, 위치를 찾을 문자)
 
예시
SELECT INSTR("BigQuery is fun", 'Q');
notion imagenotion image
 

4.2.7. LPAD/ RPAD

  • LPAD
LPAD() 함수는 문자열을 왼쪽으로 패딩(채우기)하여 지정된 길이만큼 출력하는 함수입니다.
SELECT LPAD(문자열, 길이, 특정문자열)
 
예시
SELECT LPAD("12345", 10 , "0");
notion imagenotion image
 
  • RPAD
RPAD() 함수는 문자열을 오른쪽으로 패딩(채우기)하여 지정된 길이만큼 출력하는 함수입니다.
SELECT RPAD(문자열, 길이, 특정문자열)
 
예시
SELECT RPAD("12345", 10, "0");
notion imagenotion image
 

4.2.8. LTRIM/ RTRIM

  • LTRIM
LTRIM() 함수는 문자열에서 왼쪽의 공백을 제거하여 출력하는 함수입니다.
SELECT LTRIM(문자열)
 
예시
SELECT LTRIM(" BigQuery is Fun ");
notion imagenotion image
 
  • RTRIM
RTRIM() 함수는 문자열에서 오른쪽의 공백을 제거하여 출력하는 함수입니다.
SELECT RTRIM(문자열)
 
예시
SELECT RTRIM(" BigQuery is Fun ");
notion imagenotion image
 

4.2.9. STARTS_WITH/ ENDS_WITH

  • STARTS_WITH
STARTS_WITH() 함수는 문자열이 특정 문자열로 시작하는지 여부를 출력하는 함수입니다.
SELECT STARTS_WITH(문자열, 특정문자열)
 
예시 1
SELECT STARTS_WITH("BigQuery is fun", "B") # TRUE , STARTS_WITH("BigQuery is fun", "b"); # FALSE
notion imagenotion image
 
예시 2
“employees”테이블의 “first_name”컬럼의 값들 중 “S”로 시작하는지 여부를 조회합니다.
SELECT first_name , STARTS_WITH(first_name, "S") FROM `HR.employees`;
notion imagenotion image
 
  • ENDS_WITH
ENDS_WITH() 함수는 문자열이 특정문자열로 끝나는지 여부를 출력하는 함수입니다.
SELECT ENDS_WITH(문자열, 특정문자열)
 
예시 1
SELECT ENDS_WITH("BigQuery is fun", "n") # TRUE , ENDS_WITH("BigQuery is fun", "N"); # FALSE
notion imagenotion image
 
예시 2
“employees” 테이블의 “first_name” 컬럼의 값들 중 “a”로 끝나는지 여부를 조회합니다.
SELECT first_name , ENDS_WITH(first_name, "a") FROM `HR.employees`;
notion imagenotion image
 

4.2.10. SPLIT

  • SPLIT
SPLIT() 함수는 하나의 문자열을 지정된 구분자(delimiter) 혹은 특정문자열을 기준으로 나누어 배열(array)로 출력하는 함수입니다.
SELECT SPLIT(문자열, 구분자)
 
예시 1
SELECT SPLIT("BigQuery is fun", " ") , SPLIT("apple,banana,cherry", ",");
notion imagenotion image
 
예시 2
“employees” 테이블의 “job_id” 컬럼의 값을 “_”를 기준으로 나누어 배열로 조회합니다.
SELECT job_id , SPLIT(job_id, "_") FROM `HR.employees`;
notion imagenotion image
 

4.2.11. REPEAT

REPEAT() 함수는 문자열을 지정된 횟수만큼 반복하여 출력하는 함수입니다.
SELECT REPEAT(문자열, 횟수)
 
예시
SELECT REPEAT("BiqQuery", 5);
notion imagenotion image
 

4.2.12. ASCII

ASCII() 함수는 아스키코드 번호로 출력하는 함수입니다.
SELECT ASCII(문자열)
 
예시
SELECT ASCII("A") # A의 아스키코드번호 , ASCII("H"); # B의 아스키코드번호
notion imagenotion image
 

4.2.13. 정규표현식 함수

정규표현식 함수는 텍스트 데이터에서 패턴을 찾거나 조작하기 위한 BigQuery의 유용한 함수입니다.
  • REGEXP_CONTAINS
REGEXP_CONTAINS() 함수는 주어진 문자열에서 정규표현식 패턴이 포함되어 있는지 여부를 출력하는 함수입니다.
SELECT REGEXP_CONTAINS(string, pattern)
 
예시
SELECT REGEXP_CONTAINS(job_id, r"IT|AD") , job_id FROM `HR.employees`;
notion imagenotion image
 
  • REGEXP_SUBSTR
REGEXP_SUBSTR() 함수는 주어진 문자열에서 첫 번째로 일치하는 정규표현식 패턴을 추출하여 출력하는 함수입니다.
SELECT REGEXP_SUBSTR(string, pattern)
 
예시
“employees” 테이블에서 직원 이름이 “en”으로 끝나는 이름을 조회합니다.
SELECT first_name , REGEXP_SUBSTR(first_name, r"[A-Za-z]+en") FROM `HR.employees`;
notion imagenotion image
 
  • REGEXP_EXTRACT
REGEXP_EXTRACT() 함수는 주어진 문자열에서 첫 번째로 일치하는 정규표현식 패턴을 추출하여 출력하는 함수입니다.
SELECT REGEXP_EXTRACT(string, pattern, group)
 
  • REGEXP_SUBSTR()REGEXP_EXTRACT() 함수의 차이
REGEXP_SUBSTR()REGEXP_EXTRACT() 함수의 차이점은 주로 패턴 추출과 위치 정보를 제공하는 데 있습니다. REGEXP_SUBSTR() 함수는 문자열에서 패턴과 일치하는 첫 번째 문자열을 추출합니다. 그러나 위치 정보를 제공하지 않기 때문에 추출될 문자열의 위치는 지정할 수 없습니다. 따라서 이 함수는 단일 패턴을 추출할 때 사용됩니다.
반면에 REGEXP_EXTRACT() 함수는 패턴과 일치하는 첫 번째 문자열뿐만 아니라 일치하는 다른 문자열들 또한 추출할 수 있습니다. group 매개변수를 사용하여 추출할 문자열의 그룹을 지정할 수 있으며, 해당 그룹의 위치도 함께 제공합니다. 이 함수는 여러 패턴 또는 패턴 그룹을 추출할 때 사용됩니다.
예시
“locations” 테이블에서 “street_address” 컬럼에서 숫자를 제외한 주소를 조회합니다.
SELECT street_address , REGEXP_EXTRACT(street_address, r"[A-Za-z ]+") FROM `HR.locations`;
notion imagenotion image
 
  • REGEXP_EXTRACT_ALL
REGEXP_EXTRACT_ALL() 함수는 주어진 문자열에서 모든 일치하는 정규표현식 패턴을 추출하여 배열(array)로 출력하는 함수입니다.
SELECT REGEXP_EXTRACT_ALL(string, pattern)
 
예시
“locations” 테이블에서 “street_address” 컬럼에서 숫자를 제외하고 주소를 배열로 조회합니다.
SELECT street_address , REGEXP_EXTRACT_ALL(street_address, r"[A-Za-z]+") FROM `HR.locations`;
notion imagenotion image
 
  • REGEXP_INSTR
REGEXP_INSTR() 함수는 주어진 문자열에서 정규표현식 패턴이 처음 나타나는 위치를 출력하는 함수입니다.
SELECT REGEXP_INSTR(string, pattern)
 
예시
SELECT REGEXP_INSTR("BigQuery is wonderful", r"[a-z]+ful");
notion imagenotion image
 
  • REGEXP_REPLACE
REGEXP_REPLACE() 함수는 주어진 문자열에서 일치하는 정규표현식 패턴을 다른 문자열로 대체하여 출력하는 함수입니다.
SELECT REGEXP_REPLACE(string, pattern, replacement)
 
예시
“employees” 테이블에서 직원들의 이메일ID 앞 글자 3개를 비식별화하여 조회합니다.
SELECT email , REGEXP_REPLACE(email, r"^(...)", "***") AS masked_email FROM `HR.employees`;
notion imagenotion image
 

4.3. 날짜형 함수

날짜와 시간은 데이터 분석에서 핵심적인 역할을 합니다. 비즈니스 데이터를 분석하거나 시계열 데이터를 다룰 때, 정확한 날짜와 시간 정보를 다루는 것은 매우 중요합니다. Google BigQuery는 이러한 작업을 간단하고 효율적으로 수행할 수 있도록 다양한 날짜와 시간 함수를 제공합니다. 이 챕터에서는 BigQuery의 날짜와 시간 함수를 사용하여 데이터를 필터링하고 집계하는 방법을 살펴보겠습니다. 또한, 다양한 날짜 형식과 함수를 소개하고, 실제 예제를 통해 그 활용법을 배워보겠습니다.
BigQuery는 데이터베이스와 데이터 분석 작업에 필수적인 날짜와 시간 정보를 다루는 데 다양한 형식을 제공합니다. 이러한 형식들은 데이터의 정확성과 유용성을 높이는 데 중요한 역할을 합니다. BigQuery에서 널리 사용되는 네 가지 중요한 날짜와 시간 형식은 DATE, TIME, DATETIMETIMESTAMP입니다. 각 형식은 고유한 목적과 사용 사례를 가지고 있습니다. 다음으로, BigQuery에서 날짜와 시간 데이터 관련 다양한 함수들을 살펴보겠습니다.
 

4.3.1. DATE 함수

  • CURRENT_DATE
    • CURRENT_DATE() 함수는 현재 날짜를 반환합니다.
      이 함수는 다음과 같은 인수를 지원합니다.
    • time_zone_expression(시간대 표현식): 시간대를 나타내는 STRING 표현식입니다. 시간대가 지정되지 않은 경우 국제 표준 시간대인 UTC가 사용됩니다.
CURRENT_DATE(time_zone_expression)
 
예시
SELECT CURRENT_DATE() as Today , CURRENT_DATE('Asia/Seoul') AS KOR , CURRENT_DATE('US/Pacific') AS US;
notion imagenotion image
 
  • DATE
    • DATE() 함수는 다양한 형태의 입력을 받아 표준 날짜 형식으로 변환하는 데 사용됩니다. 이 함수는 문자열, 정수, 또는 날짜 및 시간을 나타내는 다른 데이터 타입으로부터 날짜값을 생성할 수 있습니다.
      함수는 다음과 같은 인수를 지원합니다.
    • year: 연도를 나타내는 INT64 값입니다.
    • month: 월을 나타내는 INT64 값입니다.
    • day: 일을 나타내는 INT64 값입니다.
    • datetime_expression: 날짜와 시간 정보를 포함하는 DATETIME 표현식입니다.
    • timestamp_expression: 날짜와 시간 정보를 포함하는 TIMESTAMP 표현식입니다.
    • time_zone (선택 사항): 시간대를 나타내는 STRING 표현식입니다. timestamp_expression과 함께 시간대가 지정되지 않은 경우, 국제 표준 시간대인 UTC가 사용됩니다.
DATE(year, month, day) DATE(datetime_expression) DATE(timestamp_expression [, time_zone])
 
예시
SELECT DATE(2023, 01, 01) AS date_ymd , DATE(DATETIME '2023-01-01 23:59:59') AS date_dt , DATE(TIMESTAMP '2023-01-01 05:30:00+09', 'Asia/Seoul') AS date_tstz;
notion imagenotion image
 
  • FORMAT_DATE
    • FORMAT_DATE() 함수는 DATE형 날짜 값을 지정된 형식의 문자열로 변환합니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • format_string: 날짜 형식을 지정하는 문자열입니다. 예를 들면, "%Y-%m-%d"는 "년-월-일" 형식으로 날짜를 표시하라는 의미입니다.
    • date_expression: 날짜 정보를 포함하는 DATETIME 표현식입니다.
💡
Format String:
  • %Y: 4자리 연도
  • %y: 마지막 2자리 연도
  • %m: 월 (01 ~ 12)
  • %d: 일 (01 ~ 31)
  • %a: 요일의 약어 (예: Sun, Mon)
  • %A: 요일의 전체 이름 (예: Sunday, Monday)
... 등 다양한 지정자가 있습니다.
FORMAT_DATE(format_string, date_expression)
 
예시 1
SELECT FORMAT_DATE('%Y-%m-%d', DATE '2023-1-25') AS KR_format , FORMAT_DATE('%y/%m/%d', DATE '2023-1-25') AS KR_format , FORMAT_DATE('%x', DATE '2023-1-25') AS US_format , FORMAT_DATE('%b-%d-%Y', DATE '2023-1-25') AS US_format;
notion imagenotion image
 
예시 2
SELECT start_date AS origin_data , FORMAT_DATE('%Y-%m-%d', start_date) AS KR_format_1 , FORMAT_DATE('%y/%m/%d', start_date) AS KR_format_2 , FORMAT_DATE('%x', start_date) AS US_format_1 , FORMAT_DATE('%b-%d-%Y', start_date) AS US_format_2 FROM `HR.job_history` LIMIT 5;
notion imagenotion image
 

4.3.2. TIME 함수

  • CURRENT_TIME
    • CURRENT_TIME() 함수는 현재 시간을 TIME 객체로 반환합니다. 시간대를 설정하는 인자가 주어지지 않은 경우 현재의 UTC가 반환되며 괄호는 선택 사항입니다. 현재 시간은 해당 함수를 포함하는 쿼리 문이 시작될 때 기록됩니다.
      💡
      UTC : 국제적인 표준 시간, 한국은 UTC+9 hour(KST)입니다.
      해당 함수는 다음과 같은 인수를 지원합니다:
    • time_zone(시간대)를 설정하는 매개변수를 지원합니다.
CURRENT_TIME([time_zone])
 
예시
SELECT CURRENT_TIME() AS UTC # DEFAULT: UTC, or Universal Time Coordinated , CURRENT_TIME('Asia/Seoul') AS Seoul;
notion imagenotion image
 
  • TIME
    • TIME() 입력값을 TIME 객체로 반환합니다. 반환된 시간은 시, 분, 초 및 소수 초를 포함하며, BigQuery의 기본 시간대인 UTC를 기준으로 합니다. 인수 없이 호출될 때 괄호는 선택 사항이며 반환되는 현재 시간은 해당 함수가 포함된 쿼리 문이 실행될 때 기록됩니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • INT64 값을 사용하여 시간, 분, 초로 구성된 TIME 객체를 반환합니다.
    • TIMESTAMP 객체를 사용하여 TIME 객체를 반환합니다. 시간대가 지정되지 않은 경우, 국제 표준 시간대인 UTC가 사용됩니다.
    • DATETIME 객체를 사용하여 TIME 객체를 반환합니다.
TIME(hour, minute, second) TIME(timestamp, [time_zone]) TIME(datetime)
 
예시
SELECT TIME(12, 30, 00) AS time_hms , TIME(TIMESTAMP "2023-01-25 12:30:00", "Asia/Seoul") AS time_tstz , TIME(DATETIME "2023-01-25 12:30:00") AS time_dt
notion imagenotion image
 
  • FORMAT_TIME
    • FORMAT_TIME() 함수는 TIME형 데이터의 표현을 지정된 형식의 문자열로 변환하는 데 사용됩니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • format_string: 시간 형식을 지정하는 문자열입니다. 예를 들어, "%H:%M:%S"는 "시:분:초" 형식으로 시간을 표시하라는 의미입니다.
    • time_expression: 시간 정보를 포함하는 TIME 표현식입니다.
💡
Format String:
  • %H: 24시간 형식의 시간 (00 ~ 23)
  • %I: 12시간 형식의 시간 (01 ~ 12)
  • %M: 분 (00 ~ 59)
  • %S: 초 (00 ~ 59)
  • %p: AM 또는 PM
... 기타 다양한 지정자를 사용하여 시간을 원하는 형식으로 표시할 수 있습니다.
FORMAT_TIME(format_string, time_expression)
 
예시
SELECT FORMAT_TIME("%R", TIME "15:30:00") as formatted_time1 , FORMAT_TIME("%X", TIME "15:30:00") as formatted_time2 , FORMAT_TIME("%P", TIME "15:30:00") as formatted_time3
notion imagenotion image
 

4.3.3. DATETIME 함수

  • CURRENT_DATETIME
    • CURRENT_DATETIME() 현재 시간을 DATETIME 객체로 반환합니다. 인수 없이 호출될 때 괄호는 선택 사항입니다. 시간대(Time zone)를 지정하는 방법에 대한 정보는 시간대 정의(Time zone definitions)를 참조하십시오.
      현재 날짜와 시간은 해당 함수가 포함된 쿼리 문이 실행될 때 기록됩니다.
      이 함수는 다음과 같은 인수를 지원합니다.
    • time_zone: 시간대를 설정하는 매개변수를 지원합니다(STRING 표현식입니다). 시간대가 지정되지 않은 경우 국제 표준 시간대인 UTC가 사용됩니다
CURRENT_DATETIME([time_zone])
 
예시
SELECT CURRENT_DATETIME() as now_UTC , CURRENT_DATETIME('Asia/Seoul') as now_Seoul;
 
  • DATETIME
    • DATETIME() 입력값을 DATEIME 객체로 반환합니다. 시간대를 설정하지 않은 경우 BigQuery의 기본 시간대인 UTC를 기준으로 반환됩니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • year: 연도를 나타내는 INT64 값입니다.
    • month: 월을 나타내는 INT64 값입니다.
    • day: 일을 나타내는 INT64 값입니다.
    • hour: 시간을 나타내는 INT64 값입니다.
    • minute: 분을 나타내는 INT64 값입니다.
    • second: 초를 나타내는 INT64 값입니다.
    • DATETIME 객체를 통해 DATETIME 객체를 반환합니다. 시간대가 지정되지 않은 경우 기본 시간대인 UTC가 사용됩니다.
    • TIMESTAMP 객체를 사용하여 DATETIME 객체를 반환합니다. 시간대가 지정되지 않은 경우 기본 시간대인 UTC가 사용됩니다.
DATETIME(year, month, day, hour, minute, second) DATETIME(date_expression[, time_expression]) DATETIME(timestamp_expression [, time_zone])
 
예시
SELECT DATETIME(2023, 01, 30, 06, 30, 00) as datetime_1 , DATETIME(DATE(2023, 01, 30), TIME(06, 30, 00)) as datetime_2 , DATETIME(TIMESTAMP "2023-01-30 06:30:00") as datetime_UTC , DATETIME(TIMESTAMP "2023-01-30 06:30:00", "Asia/Seoul") as datetime_Seoul
notion imagenotion image
 
  • FORMAT_DATETIME
    • FORMAT_DATETIME() 함수는 날짜 및 시간 값을 지정된 형식의 문자열로 변환하는 데 사용됩니다. BigQuery가 지원하는 형식 요소 목록은 공식 문서에서 지원하는 BigQuery의 ’format_string’ 자료에서 찾아볼 수 있습니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • format_string: 날짜 및 시간 형식을 지정하는 문자열입니다. 예를 들면, "%Y-%m-%d %H:%M:%S"는 "년-월-일 시:분:초" 형식으로 날짜와 시간을 표시하라는 의미입니다.
    • datetime_expression: DATETIME 형의 데이터
FORMAT_DATETIME(format_string, datetime_expression)
 
예시
SELECT FORMAT_DATETIME('%c', DATETIME '2023-01-25 15:30:00') AS format1 , FORMAT_DATETIME('%Y-%m-%d', DATETIME '2023-1-25 15:30:00') AS KR_format1 , FORMAT_DATETIME('%y/%m/%d', DATETIME '2023-1-25 15:30:00') AS KR_format2 , FORMAT_DATETIME('%x', DATETIME '2023-1-25 15:30:00') AS US_format1 , FORMAT_DATETIME('%b-%d-%Y', DATETIME '2023-1-25 15:30:00') AS US_format2;
notion imagenotion image
 

4.3.4. TIMESTAMP 함수

  • CURRENT_TIMESTAMP
    • CURRENT_TIMESTAMP() 현재의 UTC(세계 표준시) 타임스탬프 값을 반환하는 함수입니다. 해당 함수를 사용하면 SQL 쿼리 내에서 현재 시점의 날짜와 시간 정보를 얻을 수 있습니다. 현재 날짜와 시간은 해당 함수가 포함된 쿼리 문이 실행될 때 기록됩니다. 시간대 변환 또는 다른 날짜 및 시간 조작을 수행하려면 추가 함수나 연산을 함께 사용해야 합니다.
CURRENT_TIMESTAMP()
 
예시
SELECT CURRENT_TIMESTAMP();
 
  • TIMESTAMP
    • TIMESTAMP() 함수는 주어진 문자열이나 다른 날짜 및 시간 관련 값들을 TIMESTAMP 데이터 타입으로 변환하는데 사용됩니다.
       
      문자열에서의 변환
      주어진 문자열이 올바른 형식을 갖추고 있을 때, 해당 함수는 그 문자열을 TIMESTAMP값으로 변환합니다. 하지만 문자열을 TIMESTAMP로 변환할 때, 문자열 형식이 올바르게 맞춰져 있지 않으면 에러가 발생할 수 있습니다.
      날짜/시간 데이터 타입에서의 변환
      DATE 또는 DATETIME 값을 TIMESTAMP로 변환할 수 있습니다. TIMESTAMP는 UTC를 기반으로 하기 때문에, 특정 시간대를 반영하려면 추가적인 변환 작업이 필요할 수 있습니다.
TIMESTAMP(string_expression[, time_zone]) TIMESTAMP(date_expression[, time_zone]) TIMESTAMP(datetime_expression[, time_zone])
 
예시
SELECT TIMESTAMP("2023-01-25 15:30:00+09") AS timestamp_str1 , TIMESTAMP("2023-01-25 15:30:00", "Asia/Seoul") AS timestamp_str2 , TIMESTAMP("2023-01-25 15:30:00 UTC") AS timestamp_str3 , TIMESTAMP(DATETIME "2023-01-25 15:30:00") AS timestamp_datetime , TIMESTAMP(DATE "2023-01-25") AS timestamp_date;
notion imagenotion image
 
  • FORMAT_TIMESTAMP
    • FORMAT_DATETIME() 함수는 주어진 포맷에 따라 TIMESTAMP 값을 문자열로 변환하는 데 사용됩니다. 이 함수는 데이터 분석과 보고를 위해 TIMESTAMP 값을 보다 읽기 쉬운 형태로 변환할 때 유용합니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • format_string: 변환된 문자열의 형식을 지정하는 문자열입니다. 예를 들어, '%Y-%m-%d %H:%M:%S'는 '2023-10-26 14:23:45'와 같은 형식으로 반환됩니다.
    • timestamp_expression: 변환할 TIMESTAMP 값을 지정하는 표현식입니다.
    • timezone: (선택 사항) 시간대를 지정하는 문자열입니다. 지정하지 않으면 UTC가 기본값으로 사용됩니다.
💡
Format String:
  • %Y: 4자리 연도 (예: 2023)
  • %m: 월 (01-12)
  • %d: 일 (01-31)
  • %H: 시간 (00-23)
  • %M: 분 (00-59)
  • %S: 초 (00-59)
FORMAT_TIMESTAMP(format_string, timestamp_expression[, timezone])
 
예시
SELECT FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP "2023-01-25 15:30:00") AS UTC , FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', TIMESTAMP "2023-01-25 15:30:00", 'Asia/Seoul') AS Seoul;
notion imagenotion image
 

4.3.5. EXTRACT 함수

  • EXTRACT
    • EXTRACT() 함수는 BigQuery에서 주어진 날짜, 시간, 또는 타임스탬프 값에서 특정 부분 (예: 연도, 월, 일)을 추출하는 데 사용되는 함수입니다. 반환된 값은 더 낮은 순서의 시간 단위를 잘라냅니다.
      예를 들어, 초를 추출할 때, EXTRACT() 함수는 MICROSECOND, MILLISECOND 값을 반환합니다. 이 함수는 데이터 분석 중 특정 시간 요소에 기반한 질의나 집계를 수행할 때 유용하게 사용될 수 있습니다.
    • part
      • MICROSECOND
      • MILLISECOND
      • SECOND
      • MINUTE
      • HOUR
      • DAYOFWEEK: 일주일 중 첫 번째 날인 일요일을 시작으로 [1,7] 범위의 값을 반환합니다.
      • DAY: 날짜를 반환합니다.
      • DAYOFYEAR: 연중 날짜를 반환합니다.
      • WEEK: 날짜의 주 번호를 반환하며, [0, 53] 범위에 있습니다. 주는 일요일부터 시작하며, 연초의 첫 일요일 이전의 날짜는 0주에 속합니다.
      • WEEK(<WEEKDAY>): 날짜의 [0, 53] 범위 주 번호를 반환합니다. 주의 시작은 <WEEKDAY>이며, 연 초의 첫 <WEEKDAY> 이전의 날짜는 0주에 속합니다. <WEEKDAY>로 지정할 수 있는 유효한 값은 SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY입니다.
      • MONTH: 월을 반환합니다.
      • QUARTER: [1,4] 범위의 값을 반환합니다.
      • YEAR: 연도를 반환합니다.
    • date_expression: DATE, TIME, DATETIME 또는 TIMESTAMP 표현식입니다.
EXTRACT(part FROM date_or_time_expression)
 
예시 1
SELECT EXTRACT(DAY FROM DATE '2023-1-25') AS the_day;
notion imagenotion image
 
예시 2
SELECT start_date AS origin_data , EXTRACT(YEAR FROM DATE(start_date)) AS YEAR , EXTRACT(MONTH FROM DATE(start_date)) AS MONTH , EXTRACT(DAY FROM DATE(start_date)) AS DAY , EXTRACT(WEEK(MONDAY) FROM DATE(start_date)) AS WEEKDAY FROM `HR.job_history` limit 5;
notion imagenotion image
 
예시 3
SELECT EXTRACT(HOUR FROM TIME "15:30:00") as hour , EXTRACT(MINUTE FROM TIME "15:30:00") as minute , EXTRACT(SECOND FROM TIME "15:30:00") as second
notion imagenotion image
 

4.3.6. 날짜 및 시간 연산 함수

  • DATE_ADD, TIME_ADD, DATETIME_ADD, TIMESTAMP_ADD
    • BigQuery에서는 해당 함수들을 통해 날짜와 시간에 특정 간격을 더할 수 있습니다. 일반적으로 날짜 및 시간 연산을 수행할 때 연산 결과가 유효한 날짜 및 시간 값인지 확인해야 합니다. 날짜 연산을 할 때 특정한 상황이나 예외 케이스에 대해 알고 있지 않으면 예기치 않은 결과나 오류를 만날 수 있습니다. 특히, 윤년과 같이 규칙적이지만 특별한 조건을 갖는 날짜의 경우, 연산을 잘못 수행하면 데이터 분석 결과에 오차가 발생할 수 있습니다. 예를 들어, 2월 28일에 2일을 더하면 어떻게 될지 고려해야 합니다. 이런 차이를 고려하지 않으면 해당 기간의 데이터 집계나 분석에 오류가 생길 수 있습니다. 해당 함수는 다음과 같은 인수를 지원합니다.
    • date_or_time_expression: DATE, TIME, DATETIME 또는 TIMESTAMP 표현식입니다.
    • int64_expression: 날짜 혹은 시간에 특정 간격을 더할 정수값 입니다.
💡
INTERVAL 종류
  • SECOND: 초
  • MINUTE: 분
  • HOUR: 시간
  • DAY: 일
  • WEEK: 주
  • MONTH: 월
  • YEAR: 연도
  • QUARTER: 분기
-- DATE DATE_ADD(date_expression, INTERVAL int64_expression date_part) -- TIME TIME_ADD(time_expression, INTERVAL int64_expression part) -- DATETIME DATETIME_ADD(datetime_expression, INTERVAL int64_expression part) -- TIMESTAMP TIMESTAMP_ADD(timestamp_expression, INTERVAL int64_expression date_part)
 
예시
SELECT DATE "2023-01-25" AS original_time , DATE_ADD(DATE "2023-01-25", INTERVAL 5 DAY) AS later , DATE_ADD(DATE "2023-01-25", INTERVAL -5 DAY) AS before;
notion imagenotion image
 
SELECT TIME "15:30:00" AS original_time , TIME_ADD(TIME "15:30:00", INTERVAL 30 MINUTE) AS later , TIME_ADD(TIME "15:30:00", INTERVAL -30 MINUTE) AS before;
notion imagenotion image
 
SELECT DATETIME "2023-01-25 15:30:00" original_time , DATETIME_ADD(DATETIME "2023-01-25 15:30:00", INTERVAL 5 DAY) later_day , DATETIME_ADD(DATETIME "2023-01-25 15:30:00", INTERVAL -5 DAY) before_day , DATETIME_ADD(DATETIME "2023-01-25 15:30:00", INTERVAL 5 HOUR) later_hour;
notion imagenotion image
 
SELECT TIMESTAMP "2023-01-25 15:30:00" original_time , TIMESTAMP_ADD(TIMESTAMP "2023-01-25 15:30:00", INTERVAL 5 DAY) later_day , TIMESTAMP_ADD(TIMESTAMP "2023-01-25 15:30:00", INTERVAL 30 MINUTE) later_minute , TIMESTAMP_ADD(TIMESTAMP "2023-01-25 15:30:00", INTERVAL -30 MINUTE) before_minute;
notion imagenotion image
 
  • DATE_SUB(), TIME_SUB(), DATETIME_SUB(), TIMESTAMP_SUB()
    • BigQuery에서는 해당 함수들을 사용하여 날짜와 시간에서 특정 간격을 뺄 수 있습니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • date_or_time_expression: DATE, TIME, DATETIME 또는 TIMESTAMP 표현식입니다.
    • int64_expression: 날짜 혹은 시간에 특정 간격을 더할 정수값입니다.
-- DATE DATE_SUB(date_expression, INTERVAL int64_expression date_part) -- TIME TIME_SUB(time_expression, INTERVAL int64_expression part) -- DATETIME DATETIME_SUB(datetime_expression, INTERVAL int64_expression part) -- TIMESTAMP TIMESTAMP_SUB(timestamp_expression, INTERVAL int64_expression date_part)
 
예시
SELECT DATE "2023-01-25" original_time , DATE_SUB(DATE "2023-01-25", INTERVAL 5 DAY) before;
notion imagenotion image
 
SELECT TIME "15:30:00" original_time , TIME_SUB(TIME "15:30:00", INTERVAL 30 MINUTE) before;
notion imagenotion image
 
SELECT DATETIME "2023-01-25 15:30:00" original_time , DATETIME_SUB(DATETIME "2023-01-25 15:30:00", INTERVAL 5 DAY) before_day , DATETIME_SUB(DATETIME "2023-01-25 15:30:00", INTERVAL 5 HOUR) before_hour;
notion imagenotion image
 
SELECT TIMESTAMP "2023-01-25 15:30:00" original_time , TIMESTAMP_SUB(TIMESTAMP "2023-01-25 15:30:00", INTERVAL 5 DAY) before_day , TIMESTAMP_SUB(TIMESTAMP "2023-01-25 15:30:00", INTERVAL 30 MINUTE) before_minute;
notion imagenotion image
 
  • DATE_DIFF, TIME_DIFF, DATETIME_DIFF, TIMESTAMP_DIFF
    • BigQuery에서 해당 함수들은 두 날짜 및 시간 값 사이의 차이를 계산하는 데 사용됩니다. 기본적으로 해당 함수들은 첫 번째 인자에서 두 번째 인자를 뺀 결과를 반환합니다. 간격을 계산할 때 주어진 날짜와 시간 값의 순서에 따라 결과가 양수 또는 음수로 나타날 수 있습니다. 또한 시간대를 고려하지 않으면 예상하지 못한 결과가 나올 수 있으므로, 특히 TIMESTAMP 값을 비교할 때 주의가 필요합니다.
      해당 함수는 다음과 같은 인수를 지원합니다.
    • date_or_time_expression: DATE, TIME, DATETIME 또는 TIMESTAMP 표현식입니다.
    • int64_expression: 날짜 혹은 시간에 특정 간격을 더할 정수값입니다.
-- DATE DATE_DIFF(date_expression_a, date_expression_b, INTERVAL) -- TIME TIME_DIFF(time_expression_a, time_expression_b, INTERVAL) -- DATETIME DATETIME_DIFF(datetime_expression_a, datetime_expression_b, INTERVAL) -- TIMESTAMP TIMESTAMP_DIFF(timestamp_expression_a, timestamp_expression_b, INTERVAL)
 
예시
SELECT DATE_DIFF(DATE '2023-12-31', DATE '2023-01-01', DAY) AS day_diff , TIME_DIFF(TIME '23:59:59', TIME '00:00:00', SECOND) AS second_diff , DATETIME_DIFF(DATETIME '2023-12-31 23:59:59', DATETIME '2023-01-01 00:00:00', HOUR) AS hour_diff , TIMESTAMP_DIFF(TIMESTAMP '2023-12-31 23:59:59 UTC', TIMESTAMP '2023-01-01 00:00:00 UTC', MINUTE) AS minute_diff
notion imagenotion image
 

4.4. 형변환(Casting)

형변환이란 데이터의 유형을 다른 데이터 유형으로 변환하는 프로세스이며, 흔히 ‘Casting’(캐스팅)이라 표현합니다. 이는 데이터를 적절한 형식으로 표시하거나 분석에 맞게 데이터를 변환하는 데 사용됩니다.
 
암묵적 형변환(Implicit type conversion)
암묵적 형변환(Implicit type conversion)은 데이터베이스 또는 프로그래밍 언어에서 사용자가 명시적으로 형변환을 수행하지 않아도 자동으로 데이터 유형을 변환하는 경우를 말합니다. 예를 들어, 시스템이 자동으로 데이터 유형을 변환하여 연산이나 비교를 수행할 때 발생합니다. 이는 사용자의 입력 데이터 형식을 알고 있고, 사용자가 명시적으로 형변환을 지정하지 않아도 암묵적으로 형변환을 수행합니다. 예를 들어, 정수와 실수를 더할 때, 일반적으로 시스템은 정수를 실수로 암묵적으로 형변환하고 덧셈을 수행합니다.
 
명시적 형변환(Explicit type conversion)
명시적 형변환은 사용자가 데이터를 특정 데이터 유형으로 명시적으로 변환하는 경우입니다. 사용자는 형변환 연산자를 통해 데이터를 다른 유형으로 변환할 수 있습니다. 명시적 형변환은 데이터를 사용자가 원하는 데이터 유형으로 변환할 수 있지만 변환 과정에서 정보 손실이 발생할 수 있으므로 주의해서 사용해야 합니다.
 
주요 형변환 유형
  1. 문자열 변환:
      • 숫자, 날짜, 시간, 불린(Boolean) 등의 값을 문자열로 변환할 수 있습니다.
  1. 숫자 변환:
      • 문자열, 부동 소수점 등의 값을 정수나 다른 숫자 유형으로 변환할 수 있습니다.
  1. 날짜와 시간 변환:
      • 문자열을 날짜, 시간, 데이트타임, 타임스탬프 유형으로 변환할 수 있으며, 그 반대의 변환도 가능합니다.
  1. 불린 변환:
      • 문자열, 숫자 등의 값을 불린 값(TRUE 또는 FALSE)으로 변환할 수 있습니다.
 
하지만 모든 데이터 유형 간의 변환이 가능한 것은 아닙니다. 예를 들어, 유효한 날짜 형식이 아닌 문자열을 날짜로 변환하려고 시도하면 오류가 발생합니다. 또한 형변환 시 데이터 손실의 가능성이 있으므로, 변환하기 전과 후의 데이터 값을 항상 확인해야 합니다.
 
BigQuery 형변환시 주의사항:
  1. 데이터 손실:
      • 특히, 숫자를 정수로 형변환할 때나, 큰 숫자를 작은 범위의 숫자 유형으로 변환할 때 소수점 아래의 값이나 큰 값의 일부가 잘릴 수 있으며 이는 잠재적인 정보의 손실로 이어질 수 있습니다.
  1. 무효한 값 변환:
      • 유효하지 않은 형식의 데이터를 변환하려고 할 때 오류가 발생할 수 있습니다. 예를 들어, "ABC"와 같은 문자열을 정수로 변환하려고 할 때입니다.
  1. 시간과 날짜 변환:
      • 시간대의 차이나 윤년과 같은 복잡한 요소로 인해 예상치 못한 결과가 발생할 수 있습니다. 특히 문자열을 날짜나 시간으로 변환할 때는 입력 형식이 올바른지 확인해야 합니다.
  1. 문자열 변환의 인코딩 문제:
      • BYTESSTRING으로 변환할 때, 바이트 시퀀스가 유효한 UTF-8 문자열로 해석될 수 없으면 오류가 발생합니다.
  1. 충분한 테스트:
      • 형변환을 포함하는 쿼리를 실행하기 전에 충분한 테스트가 필요합니다. 이를 통해 예상치 못한 오류나 결과를 미리 발견하고 수정할 수 있습니다.
  1. 성능 고려:
      • 대규모의 데이터셋에 대한 형변환은 성능에 영향을 줄 수 있습니다. 필요한 형변환만 수행하고, 가능하면 데이터를 로드할 때 원하는 유형으로 데이터를 불러오는 것이 좋습니다.
       
이러한 사항들을 염두에 두고 BigQuery에서 형변환을 수행하면, 더 안정적이고 효과적인 결과를 얻을 수 있습니다.
 

4.4.1. CAST

  • CAST
    • BigQuery에서 데이터의 유형을 다른 유형으로 변환하려고 할 때 CAST() 구문을 사용합니다. 해당 함수는 특정 표현식의 결과 값을 다른 데이터 유형으로 바꿀 필요가 있을 때 쿼리 내에서 활용됩니다. 해당 함수는 다음과 같은 인수를 지원합니다.
    • expression: 데이터 유형을 변경할 값을 가진 표현식입니다.
    • target_type: 변환하고자 하는 목표 데이터 유형입니다.
💡
BigQuery에서 주로 사용되는 target_type (목표 데이터 유형)의 목록입니다:
  1. BYTES
  1. STRING
  1. INT64 (또는 INTEGER)
  1. FLOAT64 (또는 FLOAT)
  1. NUMERIC
  1. BOOL (또는 BOOLEAN)
  1. DATE
  1. TIME
  1. DATETIME
  1. TIMESTAMP
  1. ARRAY
  1. STRUCT (또는 RECORD)
  1. GEOGRAPHY
CAST(expression AS target_type)
 
예시
SELECT CAST('12345' AS INT64) AS int_result , CAST('123.45' AS FLOAT64) AS float_result , CAST(123.45 AS NUMERIC) AS numeric_result , CAST(123.45 AS INTEGER) AS numeric_result
notion imagenotion image
 
SELECT CAST('2023-10-26' AS DATE) AS date_result , CAST('12:34:56' AS TIME) AS time_result , CAST('2023-10-26 12:34:56' AS DATETIME) AS datetime_result , CAST('2023-10-26 12:34:56 UTC' AS TIMESTAMP) AS timestamp_result;
notion imagenotion image
 
SELECT. CAST(1 AS BOOL) AS bool_result1 , CAST(12 AS BOOL) AS bool_result2 , CAST(0 AS BOOL) AS bool_result3 , CAST(-1 AS BOOL) AS bool_result4
notion imagenotion image
 
  • SAFE_CAST
    • 모든 형변환 작업이 성공적으로 완료되는 것은 아닙니다. 때로는 요청된 형변환을 수행할 수 없어 변환에 실패할 수 있습니다. 이러한 상황에서 쿼리의 안정성을 유지하고 싶다면 SAFE_CAST() 함수를 사용할 수 있습니다.
      해당 함수는 CAST() 함수와 다르게, 형변환 중 에러가 발생하면 에러 메시지를 반환하지 않고 NULL 값을 반환합니다.
    • expression: 데이터 유형을 변경할 값을 가진 표현식입니다.
    • target_type: 변환하고자 하는 목표 데이터 유형입니다.
SAFE_CAST(expression AS target_type)
 
예시
SELECT SAFE_CAST('123' AS INT64) `Integer` , SAFE_CAST('ABC' AS INT64) `Fail1` , SAFE_CAST('123.45' AS FLOAT64) `Float` , SAFE_CAST('Hello' AS FLOAT64) `Fail2` , SAFE_CAST(123 AS STRING) `String`;
notion imagenotion image
 

4.4.2. PARSE

  • PARSE_DATE
    • 해당 함수는 문자열 형태의 날짜 데이터를 DATE 타입으로 변환하는데 사용되는 BigQuery의 내장 함수입니다. 예를 들어, 'YYYY-MM-DD' 형식의 문자열을 DATE 유형으로 파싱할 수 있습니다.
      Format_string과 입력 문자열과 정확히 일치하지 않으면 오류를 반환합니다. 예를 들어, DATE 유형으로 변환하려는 데이터가 ‘20230101’과 같은 형식이라면, format_string을 ‘%Y%m%d’로 입력해야 합니다.
  • PARSE_TIME
    • 해당 함수는 주어진 시간 형식의 문자열을 TIME 데이터 유형으로 변환합니다. 시간만을 나타내는 문자열 정보를 처리할 때 유용합니다.
      Format_string과 입력 문자열과 정확히 일치하지 않으면 오류를 반환합니다. 예를 들어, TIME 유형으로 변환하려는 데이터가 ‘15:30:30’(15시 30분 30초)과 같은 형식이라면, format_string을 ‘%H:%M:%S’로 입력해야 합니다.
  • PARSE_DATETIME
    • 해당 함수는 문자열을 DATETIME 유형으로 변환합니다. 특정한 문자열 형태의 날짜 및 시간 정보를 DATETIME 데이터 타입으로 변환할 수 있습니다.
      Format_string과 입력 문자열과 정확히 일치하지 않으면 오류를 반환합니다. 예를 들어, DATETIME 유형으로 변환하려는 데이터가 ‘2023-01-01 15:30:30’와 같은 형식이라면, format_string을 ‘%Y-%m-%d %H:%M:%S’로 입력해야 합니다.
  • PARSE_TIMESTAMP
    • 해당 함수는 문자열을 TIMESTAMP 데이터 유형으로 변환합니다. 주어진 패턴이나 형식을 기반으로 문자열을 해석하여, 해당 문자열이 나타내는 정확한 순간을 TIMESTAMP 형식으로 표현할 수 있게 해줍니다.
      Format_string과 입력 문자열과 정확히 일치하지 않으면 오류를 반환합니다. 예를 들어, TIMESTAMP 유형으로 변환하려는 데이터가 ‘2023/01/01 15:30:30’과 같은 형식이라면, format_string을 ‘%Y/%m/%d %H:%M:%S’로 입력해야 합니다.
      변환할 입력 인자에 timezone(시간대)을 설정할 수 있으며, 반환값은 UTC입니다.
       
      해당 함수는 다음과 같은 인수를 지원합니다.
    • format_string: 입력 데이터의 형태를 설명합니다. 예를 들어, 연(%Y), 월(%m), 일(%d), 시(%H), 분(%M), 초(%S) 등의 형식을 지정할 수 있습니다. 이 문자열은 추출할 날짜와 시간 데이터의 정확한 구조를 정의하는 데 사용됩니다.
    • date/time/datetime/timestamp_string: 실제로 변환하고자 하는 날짜와 시간 정보를 포함하고 있는 STRING 유형의 데이터입니다. Format_string에 정의된 형식을 따라야 합니다.
-- DATE PARSE_DATE(format_string, date_string) -- TIME PARSE_TIME(format_string, time_string) -- DATETIME PARSE_DATETIME(format_string, datetime_string) -- TIMESTAMP PARSE_TIMESTAMP(format_string, timestamp_string[, time_zone])
 
예시 1
SELECT PARSE_DATE('%Y-%m-%d', '2023-01-01') parsed_date , PARSE_TIME('%H:%M:%S', '15:30:30') parsed_time , PARSE_DATETIME('%Y/%m/%d %H:%M:%S', '2023/01/01 20:00:00') parsed_dt , PARSE_TIMESTAMP('%y-%m-%d %H:%M:%S %Z', '23-01-01 20:00:00 Asia/Seoul') parsed_ts;
notion imagenotion image
 
예시 2
SELECT PARSE_DATE('%A %b %e %Y', 'Thursday Jan 25 2023') parsed_date , PARSE_TIME('%I:%M:%S %p', '3:30:30 pm') parsed_time , PARSE_DATETIME("%a %b %e %I:%M:%S %Y", "Thu Jan 25 07:30:00 2023") parsed_dt , PARSE_TIMESTAMP("%a %b %e %I:%M:%S %Y", "Thu Jan 25 07:30:00 2023") parsed_ts;
notion imagenotion image