INTEGRITY Dokumentace

Omezení a doporučené postupy

Tato stránka shrnuje podporované funkce, omezení a osvědčené postupy.

Stručný přehled

Funkce Podporováno Poznámky
SELECT, WHERE, GROUP BY, HAVING, ORDER BY, LIMIT Ano
Aliasy sloupců (AS) Ano
Výrazy (CASE, CAST, LIKE, BETWEEN, IN, aritmetické operace) Ano Plná podpora výrazů
EXPLAIN Ano Vrátí prováděcí plán jako text nebo JSON
Skalární funkce Ano Matematické, řetězcové, datum a čas, regulární výrazy, kryptografické, pole, mapy, struktury, JSON
Agregační funkce Ano Základní, přibližné, statistické, bitové, booleovské, poziční
Přibližné agregace Ano approx_distinct, approx_median, approx_percentile_cont, approx_top_k
Typy sloupců Struct / Array / Map Ano Notace v hranatých závorkách, get_field(), funkce pro pole, funkce pro mapy
CTE (WITH ... AS) Ano Mohou odkazovat na různé tabulky a obsahovat JOIN
Spojení JOIN (INNER, LEFT, RIGHT, FULL OUTER, CROSS) Ano Všechny standardní typy spojení
Implicitní spojení (čárka ve FROM) Ano
Poddotazy (IN, NOT IN) Ano NOT IN není podporováno u sloupců, které mohou obsahovat NULL, použijte NOT EXISTS místo toho
Poddotazy (EXISTS, NOT EXISTS) Ano vzory semi-join a anti-join
Skalární poddotazy Ano V SELECT, WHERE, HAVING
Odvozené tabulky (poddotazy ve FROM) Ano Lze je vnořovat a spojovat. LATERAL odvozené tabulky nejsou podporovány.
Self joiny Ano Stejná tabulka s různými aliasy
Okenní funkce (OVER) Ano Vložené OVER (...) pouze, pojmenované WINDOW klauzule není podporována
QUALIFY Ano Filtrování podle výsledku okenní funkce
SELECT DISTINCT / DISTINCT ON Ano
func(DISTINCT ...) Ano COUNT, SUM, AVG, a další agregace
Množinové operace (UNION, UNION ALL, INTERSECT, EXCEPT) Ano
GROUPING SETS / ROLLUP / CUBE Ano
OFFSET Ne
INSERT / UPDATE / DELETE Ne Pouze pro čtení
CREATE / DROP / ALTER Ne Pouze pro čtení

Úplnou syntaxi SQL najdete v reference SQL.


Nepodporované funkce SQL

Funkce Chyba
OFFSET unsupported feature: OFFSET clause is not supported
Pojmenované WINDOW klauzule unsupported feature: WINDOW clause is not supported
INSERT / UPDATE / DELETE only read-only queries are allowed
CREATE / DROP / ALTER only read-only queries are allowed
UNNEST / PIVOT / UNPIVOT Není podporováno
Zástupné modifikátory (ILIKE, EXCLUDE, EXCEPT, REPLACE, RENAME na *) Není podporováno
Vnořená (uzávorkovaná) spojení Není podporováno
LATERAL odvozené tabulky / LATERAL VIEW Není podporováno
PERCENTILE_DISC Nepodporováno: použijte PERCENTILE_CONT

Nepodporované vzory výrazů

Vzor Alternativa
NOT IN poddotaz u sloupců, které mohou obsahovat NULL Použijte NOT EXISTS s korelovaným poddotazem

Přesné agregace, jako například COUNT(DISTINCT ...), MEDIAN, PERCENTILE_CONT, ARRAY_AGG, a STRING_AGG jsou podporovány. U velkých datových sad dávejte přednost přibližným alternativám (approx_distinct, approx_median, approx_percentile_cont) pro nižší nároky na paměť a výpočetní výkon. Více informací najdete v Agregační funkce.


Omezení za běhu

Omezení Podrobnosti
Dotazy náročné na zdroje Během otevřené bety mohou dotazy náročné na paměť nebo výpočetní výkon vypršet. Patří sem i spojení více tabulek najednou (tři a více velkých tabulek), COUNT(DISTINCT) a další func(DISTINCT ...) napříč joiny nebo sloupci s vysokou kardinalitou, ARRAY_AGG / STRING_AGG, množinové operace, které deduplikují velké vstupy, okenní funkce nad velkými oddíly a rozsáhlá řazení nebo vysoce kardinální GROUP BY. Přidejte WHERE filtry a LIMIT, a upřednostněte approx_* agregací, čímž snížíte riziko vypršení časového limitu.
Funkce omezené rozpočtem MEDIAN, PERCENTILE_CONT, ARRAY_AGG, STRING_AGG, NTH_VALUE použitý jako agregace, jakákoli agregace s DISTINCT, a okenní funkce (včetně těch používaných prostřednictvím QUALIFY) mají paměťový limit stanovený předem. R2 SQL před spuštěním dotazu odhadne potřebnou paměť a v případě překročení limitu dotaz odmítne s chybou 400 chybu, pokud by bylo nutné projít příliš mnoho dat. Přidejte GROUP BY nebo WHERE filtry, abyste omezili počet zpracovávaných řádků.
Dotazy nad více tabulkami Podporována jsou spojení JOIN, poddotazy (IN, EXISTS, skalární, odvozené tabulky) i vícetabulkové CTE. Výkon závisí na velikosti mezivýsledku, proto pomocí filtrů WHERE řiďte selektivitu spojení.
Tabulky s oddíly a bez oddílů Podporovány jsou tabulky Iceberg s oddíly i bez oddílů.
Pouze formát Parquet Žádné CSV, JSON ani jiné formáty.
Pouze pro čtení R2 SQL je dotazovací engine, ne databáze. Nepodporuje zápis.
now() / current_time() přesnost Kvantováno na hranice 10 ms a vynuceno na UTC.

Běžné chybové kódy

Kód Význam
40003 Neplatná syntaxe SQL
40004 Neplatný dotaz (nepodporovaná funkce, neznámý sloupec, neshoda typů)
80001 Selhání připojení edge služby (opakování)

Osvědčené postupy

  1. Zahrňte filtry časového rozsahu do WHERE k omezení prohledávaných dat.
  2. Použijte konkrétní názvy sloupců místo SELECT * pro lepší výkon.
  3. Použijte LIMIT k řízení velikosti výsledné sady.
  4. Použijte přibližné agregační funkce (approx_distinct, approx_median, approx_percentile_cont) místo přesných alternativ u velkých datových sad.
  5. Povolte kompaktaci v R2 Data Catalog, abyste snížili počet souborů prohledávaných při každém dotazu.
  6. Použijte EXPLAIN k prozkoumání plánu provádění a ověření použití predicate pushdown.
  7. Použijte WHERE filtry s vícenásobnými joiny, abyste zmenšili velikost mezivýsledků. Spojení tří a více velkých tabulek bez filtrů může překročit limity zdrojů.
  8. Velké faktové tabulky spojujte přes dimenzní tabulky, ne přímým spojením dvou velkých faktových tabulek. Například spojte http_requests na firewall_events prostřednictvím sdíleného zones dimenzi, místo abyste obě faktové tabulky spojovali křížovým joinem.
  9. Buďte opatrní s COUNT(DISTINCT) napříč vícenásobnými joiny. Tato kombinace může vést k velmi rozsáhlým mezivýsledkům. Zvažte použití approx_distinct() nebo rozdělením dotazu na menší kroky.
  10. Použijte explicitní JOIN syntaxe místo implicitních spojení (oddělených čárkami FROM) kvůli čitelnosti a aby optimalizátor mohl zvolit optimální pořadí spojení.