u/FerhatAOUAGHZENE

À tous ceux qui galèrent avec des requêtes SQL interminables, des CASE WHEN imbriqués, des UNPIVOT à gogo et un code illisible :

C’est normal, mais ça peut changer.

J’ai partagé un dépôt avec des exemples remaniés dans un projet dbt (snowflake ) : macros Jinja, CASE WHEN simplifiés et un UNPIVOT propre.

Lien GitHub : DevoteamSP/learnjinja

reddit.com
u/FerhatAOUAGHZENE — 10 days ago

voici comment limiter les credit par user lors de l utilisation de cortex code

---------snowsight----------

Alter user FERHATAOUAGHZENE set cortex_code_snowsight_daly_set_credit_limit_per_user =10 ;

---------CLI----------
Alter user FERHATAOUAGHZENE set cortex_code_cli_daly_set_credit_limit_per_user =10 ;

reddit.com
u/FerhatAOUAGHZENE — 15 days ago

En travaillant sur du Row‑Level Security dans Snowflake, j’ai remarqué un comportement récurrent :
les Row Access Policies qui exécutent une sous‑requête pour chaque ligne deviennent rapidement lentes, surtout lorsqu’elles s’appuient sur une table de mapping consultée en continu.

J’ai comparé deux approches, et l’écart de performance est très net.

1️⃣ Version lente : la policy interroge la table à chaque ligne

CREATE OR REPLACE ROW ACCESS POLICY DEMO_DB.PUBLIC.REGION_POLICY_SLOW

AS (REGION_VAL VARCHAR) RETURNS BOOLEAN ->

CURRENT_ROLE() = 'ACCOUNTADMIN'

OR EXISTS (

SELECT 1

FROM DEMO_DB.PUBLIC.ROLE_REGION_MAPPING m

WHERE m.ROLE_NAME = CURRENT_ROLE()

AND m.REGION_VAL = REGION_VAL

);

Ici, Snowflake réévalue la sous‑requête pour chaque ligne. Résultat : latence, compute inutile, et un coût qui grimpe.

2️⃣ Version optimisée : fonction SQL MEMOIZABLE

CREATE OR REPLACE FUNCTION DEMO_DB.PUBLIC.ALLOWED_REGIONS_FOR_ROLE(ROLE_NAME VARCHAR)

RETURNS ARRAY

LANGUAGE SQL

MEMOIZABLE

AS

$$

SELECT ARRAY_AGG(m.REGION_VAL)

FROM DEMO_DB.PUBLIC.ROLE_REGION_MAPPING m

WHERE m.ROLE_NAME = ROLE_NAME

$$;

Snowflake met automatiquement en cache le résultat pour un rôle donné. Plus de recalcul systématique.

3️⃣ Policy rapide : RLS basé sur la fonction MEMOIZABLE

CREATE OR REPLACE ROW ACCESS POLICY DEMO_DB.PUBLIC.REGION_POLICY_FAST

AS (REGION_VAL VARCHAR) RETURNS BOOLEAN ->

CURRENT_ROLE() = 'ACCOUNTADMIN'

OR ARRAY_CONTAINS(REGION_VAL, ALLOWED_REGIONS_FOR_ROLE(CURRENT_ROLE()));

Ici, la policy ne tape plus la table de mapping à chaque ligne. Elle lit directement la liste des régions autorisées depuis le cache de la fonction MEMOIZABLE.

Est‑ce que vous utilisez MEMOIZABLE pour optimiser vos RLS, ou vous restez sur des sous‑requêtes directes dans les policies ?

reddit.com
u/FerhatAOUAGHZENE — 18 days ago