Funktionen der Vorlage verwenden

Um die Verkettung von SQL Bezeichnern, wie z. B. Datenbanknamen und Schemanamen, zu ermöglichen und die Flexibilität bei der Verwendung von Bezeichnern in Anführungszeichen oder ohne Anführungszeichen in verschiedenen Kontexten zu gewährleisten, stellt Snowflake CLI die folgenden Funktionen zur Verfügung, die Sie in Vorlagen für die Definition von Projektvorlagen verwenden können:

fn.concat_ids()

  • Eingabe: ein oder mehrere Zeichenfolgeargumente (SQL ID oder einfacher String)

  • Ausgabe: eine gültige SQL ID (mit oder ohne Anführungszeichen)

Die Funktion fn.concat_ids() verkettet mehrere Zeichenfolgenargumente zu einer einzigen Zeichenfolge, die eine SQL ID (mit oder ohne Anführungszeichen) darstellt. Wenn eine der eingegebenen Zeichenfolgen ein gültiger Bezeichner in Anführungszeichen ist, wird er vor der Verkettung „unescaped“ (nicht in Escape-Zeichen eingeschlossen). Die resultierende Zeichenfolge wird dann in Escape-Zeichen eingeschlossen und in Anführungszeichen gesetzt, wenn sie nicht-SQL sichere Zeichen enthält oder wenn eine der Eingaben ein gültiger Bezeichner in Anführungszeichen war.

Beispiele:

  • Aufruf von fn.concat_ids('id1_', '"quoted_id2"') gibt "id1_quoted_id2" aus, da einer der Eingabewerte ein Bezeichner in Anführungszeichen ist.

  • Der Aufruf von fn.concat_ids('id1_', 'id2') gibt id1_id2 aus, da keiner der Eingabewerte ein Bezeichner in Anführungszeichen ist und keiner der Eingabewerte nicht SQL sichere Zeichen enthält.

fn.str_to_id()

  • Eingabe: ein oder mehrere Zeichenfolgeargumente (SQL ID oder einfacher String)

  • Ausgabe: eine gültige SQL ID (mit oder ohne Anführungszeichen)

Die Funktion fn.str_to_id() gibt eine Zeichenfolge als ID zurück. Wenn die Zeichenfolge der Eingabe einen gültigen Bezeichner in Anführungszeichen oder ohne Anführungszeichen enthält, gibt die Funktion ihn unverändert zurück. Wenn die Eingabefolge jedoch unsichere SQL Zeichen enthält, die nicht ordnungsgemäß in Anführungszeichen gesetzt sind, gibt die Funktion ein ID zurück, das die unsicheren Zeichen umgeht.

Beispiele:

  • Der Aufruf von fn.str_to_id('id1') gibt id1 zurück, da es sich um einen gültigen nicht in Anführungszeichen gesetzten Bezeichner handelt.

  • Aufruf von fn.str_to_id('unsafe "id') gibt "unsafe""id" zurück, da es unsichere SQL-Zeichen enthält.

fn.id_to_str()

  • Eingabe: eine Zeichenfolge als Argument (SQL ID oder einfacher String)

  • Ausgabe: eine einfache Zeichenfolge

Wenn die Eingabe eine gültige SQL ID ist, gibt die Funktion eine „unescapte“ (nicht in Escape-Zeichen eingeschlossene) einfache Zeichenkette zurück. Andernfalls gibt die Funktion die Zeichenfolge der Eingabe so zurück, wie sie ist.

Beispiele:

  • Der Aufruf von : fn.id_to_str('id1'), gibt id1 zurück, da er bereits keine Anführungszeichen mehr hat.

  • Aufruf von :codenowrap:` fn.id_to_str(‚„quoted““id.example“‘)` gibt quoted"id.example zurück.

fn.get_username()

  • Eingabe: eine optionale Zeichenfolge, die den Fallback-Wert enthält

  • Ausgabe: aktueller Benutzername des Betriebssystems

Gibt den aktuellen Benutzernamen aus den Umgebungsvariablen des Betriebssystems zurück. Wenn der aktuelle Benutzername nicht gefunden wird oder leer ist, wird entweder ein leerer Wert zurückgegeben oder der Fallback-Wert verwendet, falls einer angegeben ist.

Beispiele:

  • fn.get_username('default_user') gibt den aktuellen Benutzernamen zurück, wenn er gefunden wurde, andernfalls gibt es default_user zurück.

fn.sanitize_id()

  • Eingabe: eine Zeichenfolge als Argument

  • Ausgabe: eine gültige SQL ID ohne Anführungszeichen

Die Funktion fn.sanitize_id() entfernt alle unsicheren SQL Zeichen aus der Eingabe und gibt sie als gültige SQL ID ohne Anführungszeichen zurück. Wenn das Ergebnis nicht mit einem Buchstaben oder einem Unterstrich beginnt, wird ein Unterstrich angehängt. Bei sehr langen Zeichenfolgen schneidet die Funktion die Zeichenfolge auf 255 Zeichen ab.

Beispiele:

  • Bei Verwendung von fn.sanitize_id('Some.id "With_Special_Chars') ist die Ausgabe SomeidWith_Special_Chars.

  • Bei Verwendung von fn.sanitize_id('1abc') ist die Ausgabe _1abc.

Beispiel für einen Anwendungsfall

Das folgende Beispiel zeigt, wie Sie diese Funktionen in den Dateien der snowflake.yml-Projektdefinition verwenden können:

definition_version: 2
entities:
  pkg:
    type: application package
    identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.pkg_suffix) %>
    artifacts:
      - src: app/*
        dest: ./
  app:
    type: application
    identifier: <% fn.concat_ids(ctx.env.app_name, ctx.env.app_suffix) %>

env:
  app_name: myapp_base_name_<% fn.sanitize_id(fn.get_username()) %>
  app_suffix: _app_instance
  pkg_suffix: _pkg
Copy

Das folgende Beispiel zeigt, wie Sie die Funktionen in einer SQL-Datei verwenden können:

DESC APPLICATION <% fn.str_to_id(ctx.entities.app.identifier) %>;
DESC APPLICATION PACKAGE <% fn.str_to_id(ctx.entities.pkg.identifier) %>;
Copy