---
title: SQL
description: Pisz SQL w dialekcie opartym na DuckDB, który przyjmuje Supernova, uwzględniając nazwy jeziora, przydatne wzorce i precyzyjne odmowy.
species: reference
---
# SQL

Supernova przyjmuje dialekt SQL tylko do odczytu oparty na DuckDB 1.4-LTS. Odwołuj się do tabel jeziora jako `titan.<schema>.<table>` lub `<schema>.<table>`; obie formy są rozwiązywane w jeziorze organizacji.

```sql
with ranked as (
  select
    customer,
    amount,
    row_number() over (partition by customer order by created_at desc) as recency
  from titan.stripe.charges
  where status = 'succeeded' and not _deleted
)
select * exclude (recency)
from ranked
qualify recency = 1
```

## Nazwy i zakres

`titan` jest aliasem katalogu, a nie fizycznym identyfikatorem jeziora. Identyfikatorów fizycznych nie można wpisywać w tekście zapytania. Jednoczęściowe nazwy relacji są rozwiązywane wyłącznie do CTE i aliasów w zakresie.

Używaj podwójnych cudzysłowów dla identyfikatorów zawierających spacje lub kolidujących ze słowami kluczowymi. Literały tekstowe używają apostrofów.

## Obsługiwana postać zapytania

Podstawowy zestaw obejmuje CTE, złączenia wewnętrzne i zewnętrzne, `using`, funkcje okna, `qualify`, `union all`, `union all by name`, `distinct`, `order by`, `limit` i `offset`. Modyfikatory gwiazdki ułatwiają pracę z szerokimi tabelami źródłowymi:

```sql
select * exclude (metadata, _synced_at)
replace (lower(email) as email)
from titan.hubspot.contacts
where not _deleted
```

Listy używają indeksów od 1. JSON obsługuje `->` i `->>` z kluczami, indeksami i ścieżkami JSON. Funkcje list wyższego rzędu przyjmują formy `x -> expression` i `lambda x: expression`.

Przydatne funkcje wbudowane to między innymi `date_trunc`, `strftime`, `strptime`, `date_diff`, `epoch_ms`, `split_part`, `regexp_extract`, `regexp_replace`, `string_agg`, `json_extract`, `unnest`, `generate_series` i `list_aggregate`.

## Rzutowania i wartości null

`cast(value as type)` kończy się błędem, gdy konwersja jest niemożliwa. `try_cast(value as type)` zwraca dla tego wiersza wartość null. `is not distinct from` zapewnia równość bezpieczną dla null.

```sql
select try_cast(property_annual_revenue as decimal(18, 2)) as annual_revenue
from titan.hubspot.companies
```

## Odrzucane instrukcje

Zapytania nie mogą zmieniać stanu jeziora. `insert`, `update`, `delete`, `merge`, `drop`, `alter`, `truncate`, `attach`, `copy`, `install`, `load`, instrukcje transakcji i instrukcje `create` inne niż makra zwracają błąd możliwości, który wskazuje odrzuconą konstrukcję.

Dialekt odrzuca też procedury składowane, typy przestrzenne, katalogi zewnętrzne i automatyczne wykrywanie plików. Do pozyskiwania danych użyj źródła, do trwałej tabeli pochodnej — modelu, a do zapisu w miejscu docelowym — wysyłki.
