Cursor

커서는 select한 결과 값을 반복작업할때 유용하나.. 나는 써본적 없다! Snowflake 공식 문서에 따르면..다음과 같이 해야한다.

In the DECLARE section, declare the cursor. The declaration includes the query for the cursor.

Execute the OPEN command to open the cursor. This executes the query and loads the results into the cursor.

Execute the FETCH command to fetch one or more rows and process those rows.

When you are done with the results, execute the CLOSE command to close the cursor.

View

View는 Materialized View와 Non Materialized View로 나눌 수 있다. Non Materialized View는 실제로 데이터를 가지고 있지않고, SQL 문장을 가지고 있다. 즉, 가상 테이블이다. Materialized View는 실제로 데이터가 있는 경우고, 특정 상황에 따라 성능을 발전 시킬 수 있다 (Data Cube). View는 Drop아니면 Create만 할 수 있다.

Schema

메타 데이터의 집합으로, 데이터베이스의 구조와 제약 조건을 걸 수 있다. 개념 스키마 (Conceptual Schema), 내부 스키마 (Internal Schema), 외부 스키마 (External Schema) 로 나눌 수 있다. 외부 스키마는 각 사용자의 뷰로서

외부 스키마는 서브스키마라고도 하며, 전체적인 뷰로서 SQL을 통해 사용자가 논리적 구조를 정의할 수 있다.

개념 스키마는 전체적인 데이터의 관계를 정의하고 제약 조건을 정의한다. DB당 하나만 존재.

내부 스키마는 물리적인 저장 장치에서 DB가 기억되는 방법을 기술한다.

외부 스키마 -> 개념 스키마 -> 내부 스키마

Window Function

DBMS마다 다르지만…보통은 OVER( PARTITITON BY X Order BY Y)이렇게 쓰인다 (물론 X, Y 여럿 가능). RANK, ROW_NUMBER (RANK와 비슷하지만 같아도 고유한 순위를 줌) 에 자주 쓰인다. 나의 경우에는 FIRST_VALUE나 LAST_VALUE를 사용할때 Snowflake에서 자주 사용했다.

Partitioning/Sharding

Partitioning이란 데이터를 다수의 테이블로 쪼개는걸 의미한다. Horizontal Partitioning은 Sharding과 같으며, 적절한 hashing, list, range partitioning을 하여 특정 범위의 기록별로 나눠 저장한다. Vertical Partitioning은 하나의 Entity에 저장된 데이터를 다수의 Entity로 나눈다. 자주 사용하는 칼럼을 분리시켜 성능 향상이 가능하다.