---
title: typesql
description: 쿼리 엔진에 전달되는 SQL 문을 바꾸지 않고 검사 전용 타입을 SQL에 추가합니다.
species: concept
---
# typesql

typesql은 SQL에 어노테이션, 패키지, 타입 지정 함수, 정확한 진단을 추가합니다. 핵심 보장은 소거입니다. 타입 전용 구문을 제거해도 나머지 SQL은 같은 런타임 의미를 유지합니다.

```typesql
with paid(customer_id: string!, revenue: decimal(18, 2)!) as (
  select
    customer satisfies string!,
    sum(amount) / 100.0 satisfies decimal(18, 2)!
  from titan.stripe.charges
  where status = 'succeeded' and customer is not null
  group by customer
)
select * from paid
```

## 구조적으로 점진적인 타입 지정

어노테이션이 하나도 없어도 유효합니다. 검사기는 레이크 카탈로그에서 가능한 내용을 추론하고, 알 수 없는 이름, 호환되지 않는 타입, 잘못된 함수 인수, 안전하지 않은 null 허용성, 패키지 실패를 안정적인 `TS####` 코드로 보고합니다.

계약이 중요한 위치에 어노테이션을 추가하세요. `satisfies`는 형 변환 없이 표현식을 검사합니다. `!`는 null이 아니어야 한다는 조건을 기록합니다. 타입이 지정된 CTE 헤더는 SQL 문의 나머지 부분에 테이블 구조를 제공합니다.

## 런타임 분리

어노테이션은 형 변환이나 필터가 되지 않습니다. `import type`은 완전히 소거됩니다. 진단이 발생한 문서를 통과시키기 위해 다른 쿼리로 바꾸지 않습니다.

변환하려면 런타임 `cast`를 사용하고, 검증하려면 typesql 구문을 사용하세요.

## 타입의 출처

스키마 제공자는 레이크 열, 기본 키 근거, 시스템 열, JSON 구조, 정책 마스크의 출처 정보를 제공합니다. 콘텐츠가 고정된 패키지는 타입 검사 중 실제 소스가 없어도 이름 있는 구조와 함수 시그니처를 추가합니다.

[타입 어노테이션](/docs/typesql/annotations), [타입 참조](/docs/typesql/types), [진단 레지스트리](/docs/typesql/diagnostics)에서 계속 살펴보세요.
