Cortex Analyst¶
Vue d’ensemble¶
Cortex Analyst est une fonctionnalité entièrement gérée, alimentée par LLM de Snowflake Cortex qui vous aide à créer des applications capables de répondre de manière fiable aux questions commerciales en fonction de vos données structurées dans Snowflake. Avec Cortex Analyst, les utilisateurs professionnels peuvent poser des questions en langage naturel et recevoir des réponses directes sans écrire en SQL. Disponible en tant que REST API pratique, Cortex Analyst peut être intégré de manière transparente dans n’importe quelle application.
La création d’une solution d’analyse conversationnelle en libre-service de qualité professionnelle nécessite un service qui génère des réponses de texte précises en SQL. Pour la plupart des équipes, développer un service qui équilibre avec succès la précision, la latence et les coûts est une tâche ardue. Cortex Analyst simplifie ce processus en fournissant un système AI sophistiqué et entièrement géré qui prend en charge toutes ces complexités, générant des réponses de texte très précises en SQL. Il vous aide à accélérer la fourniture d’analyses conversationnelles de haute précision et en libre-service aux équipes commerciales, tout en évitant les pertes de temps telles que les modèles de solutions RAG complexes, l’expérimentation de modèles et la planification des capacités GPU. Les requêtes SQL générées sont exécutées sur le moteur évolutif Snowflake, garantissant des performances de prix de pointe et un coût total de possession réduit (TCO).
Astuce
Envie de commencer rapidement avec Cortex Analyst ? Essayez le tutoriel Tutoriel : Répondre aux questions sur les données de revenus des séries chronologiques avec Cortex Analyst.
Fonctionnalités clés¶
Analyses en libre-service via des requêtes en langage naturel. Enchantez vos équipes commerciales et vos utilisateurs non techniques avec des réponses et des informations instantanées à partir de leurs données structurées dans Snowflake. En utilisant Cortex Analyst, vous pouvez créer des applications de chat en aval qui permettent à vos utilisateurs de poser des questions en langage naturel et de recevoir des réponses précises à la volée.
REST API Pratique pour l’intégration dans les flux de travail d’entreprise existants. Cortex Analyst adopte une approche axée sur l’API, vous offrant un contrôle total sur l’expérience de l’utilisateur final. Intégrer facilement Cortex Analyst dans les outils et plateformes commerciales existants, apportant la puissance des informations sur les données là où les utilisateurs professionnels opèrent déjà, tels que les applications Streamlit, Slack, Teams, les interfaces de chat personnalisées, etc.
Alimenté par des modèles de langage volumineux de pointe : Par défaut, Cortex Analyst est alimenté par les derniers modèles Meta Llama et Mistral, qui fonctionnent en toute sécurité à l’intérieur de Snowflake Cortex, le service AI intelligent et entièrement géré de Snowflake. En option, vous pouvez également donner à Cortex Analyst l’accès aux derniers modèles OpenAI GPT hébergés sur Azure. Lors de l’exécution, Cortex Analyst sélectionne la meilleure combinaison de modèles pour garantir la plus grande précision et les meilleures performances pour chaque requête. Pour plus de détails, voir Activation des modèles utilisation Azure OpenAI. À mesure que les LLMs évoluent, Snowflake continuera d’explorer l’ajout de nouveaux modèles pour améliorer davantage les performances et la précision.
Modèle sémantique pour une précision et une exactitude élevées : Les solutions AI génériques rencontrent souvent des difficultés pour effectuer des conversions de texte en SQL lorsqu’elles ne disposent que d’un schéma de base de données, car les schémas manquent de connaissances essentielles telles que les définitions de processus métier et la gestion des métriques. Cortex Analyst surmonte cette limitation en utilisant un modèle sémantique qui comble le fossé entre les utilisateurs professionnels et les bases de données. Capturée dans un fichier YAML léger, la structure globale et les concepts du modèle sémantique sont similaires à ceux des schémas de base de données, mais permettent une description plus riche des informations sémantiques autour des données.
Sécurité et gouvernance. La base de confidentialité de Snowflake et sa sécurité de niveau entreprise garantissent que vous pouvez explorer des cas d’utilisation alimentés par AI en toute confiance, sachant que vos données sont protégées par les normes les plus élevées de confidentialité et de gouvernance.
Cortex Analyst ne s’entraîne pas sur les données client. Nous n’utilisons pas vos données client pour former ou peaufiner un modèle à mettre à disposition de notre clientèle. De plus, pour l’inférence, Cortex Analyst utilise les métadonnées fournies dans le fichier YAML du modèle sémantique (par exemple, les noms de table, les noms de colonne, le type de valeur, les descriptions, etc.) uniquement pour la génération de requêtes SQL. Cette requête SQL est ensuite exécutée dans votre entrepôt virtuel Snowflake pour générer la sortie finale.
Les données restent dans les limites de gouvernance de Snowflake. Par défaut, Cortex Analyst est alimenté par des LLMs hébergés sur Snowflake provenant de Mistral et Meta, garantissant qu’aucune donnée, y compris les métadonnées ou les invites, ne quitte la limite de gouvernance de Snowflake. Si vous choisissez d’utiliser les modèles Azure OpenAI, seules les métadonnées et les invites sont transmises en dehors de la limite de gouvernance de Snowflake.
Intégration transparente avec les fonctionnalités de confidentialité et de gouvernance de Snowflake. Cortex Analyst s’intègre entièrement aux politiques de contrôle d’accès basé sur les rôles (RBAC) de Snowflake, garantissant que les requêtes SQL générées et exécutées respectent tous les contrôles d’accès établis. Cela garantit une sécurité et une gouvernance robustes pour vos données.
Exigences en matière de contrôle d’accès¶
Pour utiliser Cortex Analyst avec un modèle sémantique, vous avez besoin des privilèges suivants :
Privilège |
Objet |
---|---|
USAGE |
Zone de préparation contenant le fichier YAML du modèle sémantique, si le modèle sémantique est téléchargé dans une zone de préparation. |
SELECT |
Les tables définies dans le modèle sémantique. |
Demandes adressées à la Cortex Analyst API doit inclure des informations d’authentification. L’exemple de cette rubrique utilise un jeton de session pour s’authentifier auprès d’un compte Snowflake.
Disponibilité de la région¶
Cortex Analyst est nativement disponible dans les régions suivantes.
AWS ap-nord-est-1 (Tokyo)
AWS ap-southeast-2 (Sydney)
AWS us-east-1 (Virginie)
AWS us-west-2 (Oregon)
AWS eu-central-1 (Francfort)
AWS eu-west-1 (Irlande)
Azure US Est 2 (Virginie)
Azure Europe de l’Ouest (Pays-Bas)
Si votre compte Snowflake se trouve dans une autre région Cloud, vous pouvez toujours utiliser Cortex Analyst en tirant parti de Inférence interrégionale. Une fois l’inférence interrégionale activée, Cortex Analyst traite les demandes dans d’autres régions pour les modèles qui ne sont pas disponibles dans votre région par défaut. Pour des performances optimales, configurez la région croisée avec les régions AWS US.
Note
Si vous optez pour l’utilisation des modèles OpenAI Azure, Cortex Analyst est disponible pour une utilisation dans toutes les régions AWS, Azure, et GCP, à l’exception des déploiements Gov et VPS.
Problèmes connus et limitations¶
Si vous téléchargez un fichier YAML du modèle sémantique dans une zone de préparation, l’accès à ce modèle sémantique est contrôlé par l’accès à la zone de préparation dans laquelle il est téléchargé. Cela signifie que tout rôle ayant accès à la zone de préparation peut accéder aux modèles sémantiques de cette zone de préparation, même si le rôle n’a pas accès aux tables sous-jacentes.
Les jointures ne sont pas directement prises en charge dans le modèle sémantique. Utilisez plutôt des vues contenant des données pré-jointes.
Par défaut, Cortex Analyst est limité à 20 requêtes par minute, ce qui devrait être suffisant pour la preuve de concept. Contactez votre ingénieur commercial pour demander une limite plus élevée.
Activation des modèles utilisation Azure OpenAI¶
Par défaut, Cortex Analyst est alimenté par des LLMs Cortex hébergés sur Snowflake. Vous pouvez cependant choisir explicitement d’autoriser Cortex Analyst pour utiliser les derniers modèles OpenAI GPT, hébergés par Microsoft Azure, aux côtés des modèles hébergés par Snowflake. Lors de l’exécution, Cortex Analyst sélectionne la combinaison optimale de modèles pour garantir la plus grande précision et les meilleures performances pour chaque requête.
Vous pouvez configurer votre compte pour autoriser l’utilisation des modèles Azure OpenAI GPT avec le paramètre ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI. Par défaut, le paramètre est désactivé et ne peut être défini que par le rôle ACCOUNTADMIN utilisant la commande ALTER ACCOUNT :
USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI = TRUE;
Astuce
Pour voir la valeur actuelle de ce paramètre, utilisez l’instruction SQL suivante.
SHOW PARAMETERS LIKE 'ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI' IN ACCOUNT
Voir ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI pour plus de détails.
Lorsque ce paramètre est activé, Cortex Analyst pourrait être alimenté par n’importe quelle combinaison de :
Modèles hébergés par Snowflake, actuellement les modèles Mistral Large et Llama3
Modèles Azure OpenAI, actuellement GPT-4o (nécessite un opt-in explicite)
Note
Cortex Analyst pourrait utiliser des modèles différents à l’avenir pour améliorer encore les performances et la précision.
Considérations¶
Les fichiers de modèles sémantiques sont classés comme des métadonnées. Si vous choisissez d’utiliser des modèles Azure OpenAI dans Cortex Analyst, votre modèle sémantique sera traité par Microsoft Azure, un tiers. Toutefois, les données client ne sont pas partagées ni traitées par Azure.
ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI¶
Le ENABLE_CORTEX_ANALYST_MODEL_AZURE_OPENAI paramètre de compte, si TRUE, permet Cortex Analyst d’utiliser les modèles Azure OpenAI.
Type de paramètre |
Session |
---|---|
Type de données |
BOOLEAN |
Description |
Contrôle si Cortex Analyst peut utiliser les modèles Azure OpenAI pour traiter les requêtes. |
Valeurs |
|
Par défaut |
FALSE |
Exemple Cortex Analyst¶
Suivez ces étapes pour créer un Streamlit interactif dans Snowflake (SiS) ou une application Streamlit autonome qui utilise Cortex Analyst.
Télécharger le modèle sémantique dans la zone de préparation
Créer et exécuter un Streamlit dans l’application Snowflake
Créer un modèle sémantique¶
UN modèle sémantique est un mécanisme léger qui résout les problèmes liés à la différence de langage entre les utilisateurs professionnels et les définitions de bases de données en permettant la spécification de détails sémantiques supplémentaires sur un ensemble de données. Ces détails sémantiques supplémentaires, comme des noms ou des synonymes plus descriptifs, permettent à Cortex Analyst de répondre aux questions de données de manière beaucoup plus fiable.
Commencez par une liste de questions auxquelles vous aimeriez que Cortex Analyst réponde. Sur cette base, décidez de l’ensemble de données pour votre modèle sémantique.
Créez votre modèle sémantique YAML basé sur la spécification. Pour plus de commodité, essayez le Générateur de modèles sémantiques. Assurez-vous également de consulter les conseils pour créer un modèle sémantique.
Télécharger le modèle sémantique¶
Vous pouvez télécharger un fichier YAML du modèle sémantique dans une zone de préparation ou passer le modèle sémantique YAML sous forme de chaîne dans le corps de la requête. Si vous téléchargez un modèle sémantique YAML dans une zone de préparation, l’accès à ce modèle sémantique est contrôlé par l’accès à la zone de préparation dans laquelle il est téléchargé. Cela signifie que tout rôle ayant accès à la zone de préparation peut accéder aux modèles sémantiques de cette zone de préparation même si le rôle n’a pas accès aux tables sur lesquelles les modèles sont basés. Assurez-vous que les rôles autorisés à accéder à une zone de préparation ont un accès SELECT à toutes les tables référencées dans tous les modèles sémantiques de cette zone de préparation.
Vous trouverez ci-dessous un exemple de configuration des zones de préparation contenant les modèles sémantiques. Une zone de préparation (public
) est accessible à tous les membres de l’organisation, tandis qu’une autre zone de préparation (sales
) n’est accessible qu’au rôle sales_analyst
.
Créez la base de données et le schéma pour la zone de préparation. L’exemple suivant crée une base de données nommée semantic_model
avec un schéma nommé definition
mais vous pouvez utiliser n’importe quelle chaîne d’identification valide pour ces noms.
CREATE DATABASE semantic_model;
CREATE SCHEMA semantic_model.definitions;
GRANT USAGE ON DATABASE semantic_model TO ROLE PUBLIC;
GRANT USAGE ON SCHEMA semantic_model.definitions TO ROLE PUBLIC;
USE SCHEMA semantic_model.definitions;
Créez ensuite les zones de préparation de stockage de vos modèles sémantiques :
CREATE STAGE public DIRECTORY = (ENABLE = TRUE);
GRANT READ ON STAGE public TO ROLE PUBLIC;
CREATE STAGE sales DIRECTORY = (ENABLE = TRUE);
GRANT READ ON STAGE sales TO ROLE sales_analyst;
Si vous utilisez Snowsight, vous pouvez actualiser la page et trouver les zones de préparation nouvellement créées dans l’explorateur d’objets de base de données. Vous pouvez ouvrir la page de la zone de préparation dans un nouvel onglet et télécharger vos fichiers YAML dans Snowsight.
Alternativement, vous pouvez utiliser le client Snowflake CLI pour télécharger depuis votre système de fichiers local.
snow stage copy file:///path/to/local/file.yaml @sales
Créez un Streamlit dans l’application Snowflake¶
Cet exemple vous montre comment créer une application Streamlit dans Snowflake qui prend une question en langage naturel comme entrée et appelle Cortex Analyst pour générer une réponse basée sur le modèle sémantique que vous fournissez.
Pour plus d’informations sur la création et l’exécution d’applications Streamlit dans Snowflake, consultez À propos de Streamlit in Snowflake.
Suivez les instructions dans Créer une application Streamlit avec Snowsight pour créer une nouvelle application Streamlit dans Snowsight.
Copiez le code Streamlit ci-dessous dans l’éditeur de code.
Remplacez les valeurs par défaut par les détails de votre compte.
Pour prévisualiser l’application, sélectionnez Run pour mettre à jour le contenu dans le volet d’aperçu Streamlit.
from typing import Dict, List, Optional
import _snowflake
import json
import streamlit as st
import time
from snowflake.snowpark.context import get_active_session
DATABASE = "SNOWFLAKE_SEMANTIC_CONTEXT"
SCHEMA = "DEFINITIONS"
STAGE = "PUBLIC"
FILE = "revenue_timeseries.yaml"
def send_message(prompt: str) -> dict:
"""Calls the REST API and returns the response."""
request_body = {
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": prompt
}
]
}
],
"semantic_model_file": f"@{DATABASE}.{SCHEMA}.{STAGE}/{FILE}",
}
resp = _snowflake.send_snow_api_request(
"POST",
f"/api/v2/cortex/analyst/message",
{},
{},
request_body,
{},
30000,
)
if resp["status"] < 400:
return json.loads(resp["content"])
else:
st.session_state.messages.pop()
raise Exception(
f"Failed request with status {resp['status']}: {resp}"
)
def process_message(prompt: str) -> None:
"""Processes a message and adds the response to the chat."""
st.session_state.messages.append(
{"role": "user", "content": [{"type": "text", "text": prompt}]}
)
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
with st.spinner("Generating response..."):
response = send_message(prompt=prompt)
request_id = response["request_id"]
content = response["message"]["content"]
st.session_state.messages.append(
{**response['message'], "request_id": request_id}
)
display_content(content=content, request_id=request_id) # type: ignore[arg-type]
def display_content(
content: List[Dict[str, str]],
request_id: Optional[str] = None,
message_index: Optional[int] = None,
) -> None:
"""Displays a content item for a message."""
message_index = message_index or len(st.session_state.messages)
if request_id:
with st.expander("Request ID", expanded=False):
st.markdown(request_id)
for item in content:
if item["type"] == "text":
st.markdown(item["text"])
elif item["type"] == "suggestions":
with st.expander("Suggestions", expanded=True):
for suggestion_index, suggestion in enumerate(item["suggestions"]):
if st.button(suggestion, key=f"{message_index}_{suggestion_index}"):
st.session_state.active_suggestion = suggestion
elif item["type"] == "sql":
display_sql(item["statement"])
@st.cache_data
def display_sql(sql: str) -> None:
with st.expander("SQL Query", expanded=False):
st.code(sql, language="sql")
with st.expander("Results", expanded=True):
with st.spinner("Running SQL..."):
session = get_active_session()
df = session.sql(sql).to_pandas()
if len(df.index) > 1:
data_tab, line_tab, bar_tab = st.tabs(
["Data", "Line Chart", "Bar Chart"]
)
data_tab.dataframe(df)
if len(df.columns) > 1:
df = df.set_index(df.columns[0])
with line_tab:
st.line_chart(df)
with bar_tab:
st.bar_chart(df)
else:
st.dataframe(df)
def show_conversation_history() -> None:
for message_index, message in enumerate(st.session_state.messages):
chat_role = "assistant" if message["role"] == "analyst" else "user"
with st.chat_message(chat_role):
display_content(
content=message["content"],
request_id=message.get("request_id"),
message_index=message_index,
)
def reset() -> None:
st.session_state.messages = []
st.session_state.suggestions = []
st.session_state.active_suggestion = None
st.title("Cortex analyst")
st.markdown(f"Semantic Model: `{FILE}`")
if "messages" not in st.session_state:
reset()
with st.sidebar:
if st.button("Reset conversation"):
reset()
show_conversation_history()
if user_input := st.chat_input("What is your question?"):
process_message(prompt=user_input)
if st.session_state.active_suggestion:
process_message(prompt=st.session_state.active_suggestion)
st.session_state.active_suggestion = None
Interagissez avec l’application Streamlit¶
Accédez à l’application Streamlit dans votre navigateur ou au volet d’aperçu de Streamlit dans Snowflake.
Commencez à poser des questions sur vos données en langage naturel (par exemple « Quelles questions puis-je poser ? »).
Créez une application Streamlit autonome¶
Vous pouvez également utiliser l’exemple de code ci-dessus pour créer une application autonome.
Installez Streamlit.
Créez un fichier Python appelé localement
analyst_api.py
.Copiez le code Streamlit ci-dessous dans le fichier.
Remplacez les valeurs par défaut par les détails de votre compte.
Exécutez l’application Streamlit en utilisant
streamlit run analyst_api.py
.
La base de données et le schéma spécifiés dans le code suivant constituent l’emplacement de la zone de préparation pour le fichier YAML du modèle sémantique. Le rôle utilisé dans le connecteur Snowflake doit avoir accès aux données sous-jacentes définies dans le modèle sémantique.
from typing import Any, Dict, List, Optional
import pandas as pd
import requests
import snowflake.connector
import streamlit as st
HOST = "<host>"
DATABASE = "<database>"
SCHEMA = "<schema>"
STAGE = "<stage>"
FILE = "<file>"
if 'CONN' not in st.session_state or st.session_state.CONN is None:
st.session_state.CONN = snowflake.connector.connect(
user="<user>",
password="<password>",
account="<account>",
host=HOST,
port=443,
warehouse="<warehouse>",
role="<role>",
)
def send_message(prompt: str) -> Dict[str, Any]:
"""Calls the REST API and returns the response."""
request_body = {
"messages": [{"role": "user", "content": [{"type": "text", "text": prompt}]}],
"semantic_model_file": f"@{DATABASE}.{SCHEMA}.{STAGE}/{FILE}",
}
resp = requests.post(
url=f"https://{HOST}/api/v2/cortex/analyst/message",
json=request_body,
headers={
"Authorization": f'Snowflake Token="{st.session_state.CONN.rest.token}"',
"Content-Type": "application/json",
},
)
request_id = resp.headers.get("X-Snowflake-Request-Id")
if resp.status_code < 400:
return {**resp.json(), "request_id": request_id} # type: ignore[arg-type]
else:
st.session_state.messages.pop()
raise Exception(
f"Failed request (id: {request_id}) with status {resp.status_code}: {resp.text}"
)
def process_message(prompt: str) -> None:
"""Processes a message and adds the response to the chat."""
st.session_state.messages.append(
{"role": "user", "content": [{"type": "text", "text": prompt}]}
)
with st.chat_message("user"):
st.markdown(prompt)
with st.chat_message("assistant"):
with st.spinner("Generating response..."):
response = send_message(prompt=prompt)
request_id = response["request_id"]
content = response["message"]["content"]
st.session_state.messages.append(
{**response['message'], "request_id": request_id}
)
display_content(content=content, request_id=request_id) # type: ignore[arg-type]
def display_content(
content: List[Dict[str, str]],
request_id: Optional[str] = None,
message_index: Optional[int] = None,
) -> None:
"""Displays a content item for a message."""
message_index = message_index or len(st.session_state.messages)
if request_id:
with st.expander("Request ID", expanded=False):
st.markdown(request_id)
for item in content:
if item["type"] == "text":
st.markdown(item["text"])
elif item["type"] == "suggestions":
with st.expander("Suggestions", expanded=True):
for suggestion_index, suggestion in enumerate(item["suggestions"]):
if st.button(suggestion, key=f"{message_index}_{suggestion_index}"):
st.session_state.active_suggestion = suggestion
elif item["type"] == "sql":
display_sql(item["statement"])
@st.cache_data
def display_sql(sql: str) -> None:
with st.expander("SQL Query", expanded=False):
st.code(sql, language="sql")
with st.expander("Results", expanded=True):
with st.spinner("Running SQL..."):
df = pd.read_sql(sql, st.session_state.CONN)
if len(df.index) > 1:
data_tab, line_tab, bar_tab = st.tabs(
["Data", "Line Chart", "Bar Chart"]
)
data_tab.dataframe(df)
if len(df.columns) > 1:
df = df.set_index(df.columns[0])
with line_tab:
st.line_chart(df)
with bar_tab:
st.bar_chart(df)
else:
st.dataframe(df)
def show_conversation_history() -> None:
for message_index, message in enumerate(st.session_state.messages):
chat_role = "assistant" if message["role"] == "analyst" else "user"
with st.chat_message(chat_role):
display_content(
content=message["content"],
request_id=message.get("request_id"),
message_index=message_index,
)
def reset() -> None:
st.session_state.messages = []
st.session_state.suggestions = []
st.session_state.active_suggestion = None
st.title("Cortex analyst")
st.markdown(f"Semantic Model: `{FILE}`")
if "messages" not in st.session_state:
reset()
with st.sidebar:
if st.button("Reset conversation"):
reset()
show_conversation_history()
if user_input := st.chat_input("What is your question?"):
process_message(prompt=user_input)
if st.session_state.active_suggestion:
process_message(prompt=st.session_state.active_suggestion)
st.session_state.active_suggestion = None
Désactiver la fonctionnalité Cortex Analyst¶
Si vous ne voulez pas que Cortex Analyst soit disponible sur votre compte, désactivez la fonctionnalité en modifiant le paramètre ENABLE_CORTEX_ANALYST en utilisant le rôle ACCOUNTADMIN :
USE ROLE ACCOUNTADMIN;
ALTER ACCOUNT SET ENABLE_CORTEX_ANALYST = FALSE;
Type de paramètre |
Session |
---|---|
Type de données |
BOOLEAN |
Description |
Contrôle si la fonctionnalité Cortex Analyst est activée sur votre compte. |
Valeurs |
|
Par défaut |
TRUE |
Considérations relatives aux clients¶
Cortex Analyst est gratuit jusqu’au 15 novembre 2024. Les détails sur les tarifs et la facturation seront bientôt disponibles.
Avis juridiques¶
Cortex Analyst est alimenté par la technologie machine learning, notamment les modèles Llama 3 et Mistral Large de Meta. Les modèles de fondation Llama 3 sont soumis à la licence communautaire Llama 3 et au copyright (c) Meta Platforms, Inc. Tous droits réservés. Votre utilisation de cette fonction est soumise à la politique d’utilisation acceptable de Meta.
La classification des données d’entrées et de sorties est présentée dans la table suivante.
Classification des données d’entrée |
Classification des données de sortie |
Désignation |
---|---|---|
Usage Data |
Usage Data |
Preview AI Features [1] |
Pour plus d’informations, reportez-vous à Snowflake AI et ML.