databricks SQL 은 Spark SQL 을 기반으로, databricks 플랫폼에서 추가 기능과 최적화를 통해 더 사용하기 쉽게 만든 것
databricks SQL 및 databricks Runtime을 대한 SQL 명령 참조
일반 참조
데이터 타입, 함수, 식별자 구성 요소들을 설명
데이터 타입
지원되는 데이터 타입
BIGINT | 8바이트의 부호 있는 정수 값을 나타냅니다. |
BINARY | 바이트 시퀀스 값을 나타냅니다. |
BOOLEAN | 불리언 값을 나타냅니다 (참 또는 거짓). |
DATE | 연도, 월, 일 필드로 구성된 값을 나타내며, 시간대 정보는 포함되지 않습니다. |
DECIMAL(p,s) | 최대 정밀도 p와 고정 소수점 s를 가진 숫자를 나타냅니다. |
DOUBLE | 8바이트의 배정밀도 부동 소수점 숫자를 나타냅니다. |
FLOAT | 4바이트의 단정밀도 부동 소수점 숫자를 나타냅니다. |
INT | 4바이트의 부호 있는 정수 값을 나타냅니다. |
INTERVAL intervalQualifier | 초 또는 월 단위의 시간 간격을 나타냅니다. |
VOID | 형식이 지정되지 않은 NULL을 나타냅니다. |
SMALLINT | 2바이트의 부호 있는 정수 값을 나타냅니다. |
STRING | 문자 문자열 값을 나타냅니다. |
TIMESTAMP | 연도, 월, 일, 시, 분, 초 필드로 구성된 값을 나타내며, 세션 로컬 시간대를 포함합니다. |
TIMESTAMP_NTZ | 연도, 월, 일, 시, 분, 초 필드로 구성된 값을 나타냅니다. 모든 작업은 시간대를 고려하지 않고 수행됩니다. |
TINYINT | 1바이트의 부호 있는 정수 값을 나타냅니다. |
`ARRAY <elementType>` | elementType 타입의 요소들로 구성된 시퀀스 값을 나타냅니다. |
MAP < keyType,valueType > | 키-값 쌍의 집합으로 구성된 값을 나타냅니다. |
STRUCT < [fieldName : fieldType [NOT NULL][COMMENT str][, …]] > | 필드의 시퀀스로 설명된 구조를 가진 값을 나타냅니다. |
데이터 타입 분류
데이터 타입은 다음과 같은 클래스로 그룹화됨.
정수형 숫자 타입 (Integral numeric types)
정수를 나타냅니다:
정확한 숫자 타입 (Exact numeric types)
10진수 숫자를 나타냅니다:
이진 부동 소수점 타입 (Binary floating point types)
지수와 이진 표현을 사용하여 넓은 범위의 숫자를 나타냅니다:
숫자 타입 (Numeric types)
모든 숫자 데이터를 나타냅니다:
날짜-시간 타입 (Date-time types)
날짜와 시간 구성 요소를 나타냅니다:
단순 타입 (Simple types)
단일 값을 가진 타입입니다:
복합 타입 (Complex types)
복합 또는 단순 타입의 여러 구성 요소로 구성됩니다:
함수
Spark SQL은 내장 함수와 사용자 정의 함수(UDF)라는 두 가지 기능을 제공하여 다양한 요구 사항을 충족합니다.
내장 함수(Built-in functions)
이 문서는 집계, 배열 및 맵, 날짜 및 타임스탬프, 그리고 JSON 데이터와 같은 주요 내장 함수 카테고리의 사용법과 설명을 제공합니다.
1. aggregate functions (집계 함수)
집계 함수는 데이터의 그룹에 대한 요약 정보를 계산하는 데 사용됩니다. 예를 들어, COUNT, SUM, AVG, MIN, MAX 등의 집계 함수는 데이터 그룹에서 특정 컬럼의 값의 합계, 평균, 최솟값, 최댓값 등을 계산합니다.
2. date and timestamp functions (날짜 및 타임스탬프 함수)
날짜 및 타임스탬프 함수는 날짜와 시간에 대한 작업을 수행하는 데 사용됩니다. 예를 들어, TO_DATE, DATE_ADD, DATEDIFF, YEAR, MONTH, DAYOFWEEK 등의 함수는 날짜 형식 변환, 날짜 간의 차이 계산, 날짜 필드 추출 등을 수행합니다.
3. string functions (문자열 함수)
문자열 함수는 문자열 값에 대한 작업을 수행하는 데 사용됩니다. 예를 들어, CONCAT, SUBSTRING, LENGTH, LOWER, UPPER, TRIM 등의 함수는 문자열 결합, 부분 문자열 추출, 문자열 길이 계산, 대소문자 변환, 문자열의 공백 제거 등을 수행합니다.
4. 윈도우 함수 (Window functions)
윈도우 함수는 윈도우에 속한 데이터를 기반으로 계산됩니다. RANK(), LEAD(), LAG(), SUM() OVER(), AVG() OVER() 등이 이에 해당합니다.
5. 타입 변환 함수 (Type conversion functions)
데이터 타입을 변환하는 함수입니다. CAST, CONVERT, TO_BOOLEAN, TO_DATE, TO_TIMESTAMP 등이 여기에 속합니다.
6. 조인 함수 (Join functions)
여러 테이블을 결합하고 연결하는 함수입니다. JOIN, LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN, CROSS JOIN 등이 여기에 속합니다.
SQL 및 Python 사용자 정의 함수
SQL 및 Python 사용자 정의 함수(UDF)는 스칼라 값 또는 결과 집합을 반환할 수 있는 사용자가 직접 정의한 함수입니다.
사용자 정의 함수 만들기
1. SQL 함수 만들기
SQL 함수를 만들 때는 Databricks에서 제공하는 CREATE FUNCTION 문을 사용합니다. 함수는 SQL 또는 Python으로 정의할 수 있습니다.
예를 들어, 다음은 SQL로 작성된 간단한 함수입니다:
CREATE FUNCTION my_udf AS
SELECT col1 + col2 AS sum FROM my_table
2. Python 함수 만들기
Python 함수를 만들 때는 Python의 def 키워드를 사용하여 함수를 정의합니다. 이후에는 registerFunction 메서드를 사용하여 함수를 등록합니다.
예를 들어, 다음은 Python으로 작성된 함수를 등록하는 예입니다:
def my_python_udf(x):
return x * 2
spark.udf.register("my_udf", my_python_udf)
사용자 정의 함수 사용하기
1. SQL에서 사용
SQL 쿼리에서 사용자 정의 함수를 사용할 때는 함수를 직접 호출하여 사용합니다.
예를 들어, 다음은 SQL 쿼리에서 사용자 정의 함수를 호출하는 예입니다:
SELECT my_udf(col) FROM my_table
2. DataFrame API에서 사용
DataFrame API를 사용할 때는 withColumn 메서드와 함께 사용자 정의 함수를 적용하여 새로운 열을 추가합니다.
예를 들어, 다음은 DataFrame API에서 사용자 정의 함수를 적용하는 예입니다:
from pyspark.sql.functions import udf
from pyspark.sql.types import IntegerType
my_udf = udf(lambda x: x * 2, IntegerType())
df = df.withColumn("new_col", my_udf(df["col"]))
식별자 (Identifiers)
식별자는 테이블, 뷰, 스키마 또는 컬럼과 같은 객체를 식별하는 데 사용되는 문자열입니다. Databricks는 비따옴표(일반) 식별자 와 백틱으로 둘러싸인 따옴표 식별자 를 지원합니다.
식별자는 참조할 때 대소문자를 구분하지 않습니다.
메타스토어 및 데이터 소스에 저장된 식별자의 경우 허용되는 문자가 제한될 수 있습니다.
구분 기호가 없는 식별자(Non delimited identifiers)
구문
{ letter | '_' } [ letter | digit | '_' ] [ ... ]
매개변수
문자: A-Z 또는 a-z의 ASCII 문자 중 아무 문자.
숫자: 0에서 9까지의 ASCII 숫자.
구분 식별자(Delimited identifiers)
구문
`c [ ... ]`
매개변수
문자: A-Z 또는 a-z의 ASCII 문자 중 아무 문자.
숫자: 0에서 9까지의 ASCII 숫자.
예시
-- 이 문장은 비따옴표 식별자가 비ASCII 문자를 사용하기 때문에 실패합니다.
> DESCRIBE SELECT 5 AS Ä;
INVALID_IDENTIFIER
-- 비 ASCII 문자를 사용하려면 식별자를 백틱으로 해야 합니다.
> DESCRIBE SELECT 5 AS `Ä`;
Ä
-- 대시가 포함된 식별자는 백틱으로 해야 합니다.
> DESCRIBE SELECT 5 AS `a-b`;
a-b
-- 공백이 포함된 식별자는 백틱으로 해야 합니다.
> DESCRIBE SELECT 5 AS `a b`;
a b
-- 특수 문자가 포함된 식별자는 백티으로 해야 합니다.
> DESCRIBE SELECT 5 AS `a@b`;
a@b
-- 중국어 문자가 포함된 식별자는 백틱으로 해야 합니다.
> DESCRIBE SELECT 5 AS `a中b`;
a中b
-- 백틱이 포함된 식별자는 백틱으로 하고 이스케이프 처리해야 합니다.
> DESCRIBE SELECT 5 AS `a``b`;
a`b
DDL문
DML 문
데이터 검색 문
보조문
보안문
리터럴
시멘틱(Semantics)
https://learn.microsoft.com/ko-kr/azure/databricks/sql/language-manual/
https://docs.databricks.com/en/sql/language-manual/index.html
https://docs.databricks.com/en/sql/get-started/concepts.html