Snowflake présente les procédures stockées JavaScript

Snowflake présente les procédures stockées JavaScript

Chez Snowflake, nous avons construit un entrepôt de données SQL relationnel complet dès le premier jour. Dès le premier jour, nous avons toujours accordé la priorité à nos clients. Des clients nous ont fait part de la nécessité d’étendre notre programmabilité SQL pour permettre d’encapsuler et d’exécuter plus facilement une logique métier complexe dans Snowflake. Nous avons une longue histoire d’extension de notre programmabilité SQL. Par exemple, nous avons fourni de nouvelles primitives SQL intégrées qui permettent aux clients d’interroger et de traiter des données semi-structurées de manière flexible, et nous avons introduit des fonctions définies par l’utilisateur (UDF) JavaScript que les clients peuvent utiliser pour manipuler et traiter facilement et intuitivement les variantes et Données JSON.

Aujourd’hui, nous atteignons une autre étape importante dans notre parcours d’extensibilité : nous sommes ravis d’annoncer la disponibilité générale du nouveau langage de procédure stockée basé sur JavaScript de Snowflake, qui est prêt pour la production et disponible dans notre édition standard. Nous testons cette fonctionnalité depuis un certain temps ; il a été largement adopté et nous avons reçu d’excellents retours depuis le début de l’aperçu de cette fonctionnalité. La fonctionnalité devenant généralement disponible, les utilisateurs de tous les clouds et de toutes les régions peuvent désormais utiliser le nouveau langage de procédure stockée de Snowflake pour :

  • Mettre en œuvre et invoquer une logique métier complexe, telle que Procédures ETLdans un langage plus simple et plus moderne au sein de Snowflake pour prendre en charge les tableaux, les exceptions, les structures de contrôle et la récupération de place, pour ne citer que quelques attributs de langage pertinents
  • Déployez des primitives de contrôle d’accès bien connues sans avoir à gérer un environnement externe
  • Créer et exécuter du SQL dynamique
  • Faites tout ce qui précède avec une prise en charge transparente des données structurées et semi-structurées

Avec l’introduction des procédures stockées de Snowflake, les utilisateurs pourront :

  • Utiliser un objet SQL de première classe (procédure) avec les instructions DDL correspondantes
  • Accorder des privilèges de schéma sur les procédures stockées
  • Utiliser la logique procédurale via les instructions IF/ELSE
  • Itérer sur les ensembles de résultats
  • Implémenter la gestion des erreurs via TRY/CATCH
  • Utiliser la procédure stockée des droits du propriétaire pour protéger l’accès aux objets (c’est-à-dire qu’il n’y a pas besoin d’autorisations explicites sur les objets référencés réels)
  • Utiliser la procédure stockée des droits de l’appelant pour exécuter tout le SQL pris en charge en tant qu’utilisateur actuel

Nous introduisons une nouvelle instruction DDL dans Snowflake pour permettre aux utilisateurs de créer des procédures stockées. Il inclut la possibilité de définir les droits du propriétaire ou de l’appelant en tant que paramètre facultatif avec les droits du propriétaire par défaut :

Stored prod 2
CREATE [ OR REPLACE ] PROCEDURE <function_name>( [ <arg_name> 
     <arg_type> [ , ... ] ] )
     RETURNS { <result_data_type> }
    [ LANGUAGE JAVASCRIPT ]
    [ CALLED ON NULL INPUT | 
      {RETURNS NULL ON NULL INPUT | STRICT } ]
    [ COMMENT = '<string_literal>' ]
    [ EXECUTE AS = OWNER | CALLER ]
    AS 
    $ 
    <procedure_body>
    $

Enfin, nous introduisons une API JavaScript légère que les utilisateurs peuvent utiliser pour envelopper et exécuter facilement de nombreuses requêtes SQL :

Stored prod 1

Voici quelques exemples simples de procédures stockées illustrant les nouvelles fonctionnalités et concepts.

Exemple 1:

Voici une procédure stockée qui itère sur les tables d’un schéma source et les copie dans le schéma actuel à l’aide de Create Table as Select. Les requêtes exécutées sont consignées dans SP_OUTPUT.

create or replace procedure ctas_tables (SRC_DB STRING, SRC_SCHEMA STRING)
 returns float
language javascript
strict
as
$

  var counter = 0;

  // create the logging table
var create_log_table_stmt = snowflake.createStatement({ sqlText: `create or 
replace table sp_output (qry string);` });
create_log_table_stmt.execute();

   // list the tables in the source schema
   var list_tables_stmt = snowflake.createStatement({ 
    sqlText: `SELECT table_catalog, table_schema, table_name 
              FROM information_schema.tables 
              WHERE table_catalog = :1 
              AND table_schema = :2
              AND table_type="BASE TABLE";`,
    binds: [SRC_DB, SRC_SCHEMA]
    });

    var tables = list_tables_stmt.execute();

  // for each table
  while (tables.next())
  {
    var database = tables.getColumnValue(1);
    var schema = tables.getColumnValue(2);
    var table = tables.getColumnValue(3);

    var ctas_qry = `create or replace table ` + table + ` as select * from ` + 
    database + `.` + schema + `.` + table + `;`
    var ctas_stmt = snowflake.createStatement({ sqlText: ctas_qry });
    ctas_stmt.execute();

    // log the ddl query to the output table
    var log_stmt = snowflake.createStatement({ sqlText: `insert into sp_output 
    (qry) values (:1);`,
    binds: [ctas_qry]});
    log_stmt.execute();

    counter++;

}

  return counter;
$;

Exemple #2 :

Voici une procédure stockée qui interroge le schéma d’informations et renvoie le jeu de résultats sous la forme « ARRAY of ARRAYS » (chaque ligne est représentée sous la forme d’un ARRAY).

CREATE OR REPLACE PROCEDURE SP_ARRAY_GET_INF_SCHEMA_TABLES (
  )
RETURNS VARIANT
LANGUAGE JAVASCRIPT
AS $
  var results_array = [];
    var rs = snowflake.createStatement( { sqlText: `SELECT TABLE_SCHEMA, 
TABLE_NAME FROM INFORMATION_SCHEMA.TABLES` } ).execute();
  while (rs.next()) {
    var schema_name = rs.getColumnValue(1);
    var table_name = rs.getColumnValue(2);
    results_array.push([schema_name, table_name]);
  }
  return results_array;
$
;
CALL SP_ARRAY_GET_INF_SCHEMA_TABLES()

Voici quelques exemples supplémentaires de nos partenaires et utilisateurs illustrant leur utilisation des procédures stockées de Snowflake :

Veuillez visiter notre site officiel Documentation pour en savoir plus sur cette nouvelle fonctionnalité. Nous avons déjà reçu d’excellents commentaires de nos clients et nous continuerons à travailler avec eux pour faire évoluer et étendre notre langage de procédure stockée. Nous vous invitons également à rejoindre notre nouveau groupe de procédure stockée dans le Loge flocon de neige.

Par ailleurs, nous en sommes aux dernières étapes de la publication de fonctionnalités SQL d’entreprise supplémentaires, que nous annoncerons lors de notre première conférence utilisateurs (Snowflake Summit) à San Francisco. Restez à l’écoute.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.