Snowflake and Zilliz Cloud Integration

Snowflake and Zilliz Cloud integrate through Snowpark Container Services to deploy Milvus within the Snowflake ecosystem, enabling organizations to run vector search workloads directly inside Snowflake without data egress, combining Snowflake's data platform with Milvus's high-performance vector database capabilities.

Utilisez cette intégration gratuitement
  • Qu’est-ce que Snowflake

    Snowflake est une plateforme de données cloud qui offre des capacités d’entrepôt de données, de lac de données et de partage de données. Snowpark Container Services est une offre de conteneurs entièrement gérée au sein de l’écosystème Snowflake, conçue pour faciliter le déploiement, la gestion et la mise à l’échelle des applications conteneurisées. Ce service permet aux utilisateurs d’exécuter des charges de travail conteneurisées directement dans Snowflake, garantissant que les données n’ont pas besoin d’être déplacées hors de l’environnement Snowflake pour être traitées.

    En s’intégrant à Zilliz Cloud (Milvus entièrement géré), les utilisateurs de Snowflake peuvent déployer Milvus en tant que service conteneurisé au sein de Snowpark Container Services, permettant aux charges de travail de recherche vectorielle et d’IA de s’exécuter directement dans l’écosystème Snowflake — en traitant les données là où elles résident afin d’optimiser les performances, de minimiser la latence et d’éliminer la nécessité de l’exfiltration des données.

  • Avantages de l’intégration Snowflake + Zilliz Cloud

    • Aucune sortie de données : L’exécution de Milvus dans Snowpark Container Services signifie que les données restent à l’intérieur de l’écosystème Snowflake, éliminant la nécessité de déplacer les données vers des bases de données vectorielles externes et réduisant les risques de sécurité et de conformité.
    • Déploiement de conteneurs entièrement géré : Snowpark Container Services gère le déploiement, l’administration et la mise à l’échelle du conteneur Milvus, réduisant la charge opérationnelle liée à l’exécution de charges de travail de recherche vectorielle.
    • Proximité des données : Le traitement des charges de travail de recherche vectorielle là où résident les données optimise les performances et minimise la latence, permettant des applications RAG et de recherche sémantique plus rapides.
    • Intégration transparente avec Snowflake : Les organisations qui utilisent déjà Snowflake peuvent ajouter des capacités de recherche vectorielle sans introduire de nouvelle infrastructure externe, en tirant parti des rôles, des warehouses et des configurations de sécurité existants.
  • Fonctionnement de l’intégration

    Snowflake fournit la plateforme de données cloud et l’infrastructure Snowpark Container Services pour l’hébergement d’applications conteneurisées. Il gère l’administration des pools de calcul, l’orchestration des services, la mise en réseau et l’authentification, permettant à Milvus de fonctionner comme un service géré au sein de l’écosystème Snowflake.

    Zilliz Cloud fournit Milvus, la base de données vectorielle haute performance qui fonctionne comme un service conteneurisé au sein de Snowpark. Il gère le stockage vectoriel, l’indexation et la recherche de similarité pour les charges de travail d’IA, notamment la RAG, la recherche sémantique et les systèmes de recommandation.

    Ensemble, Snowflake et Milvus créent une plateforme de données et d’IA unifiée : les données stockées dans Snowflake sont traitées et intégrées sous forme de vecteurs, qui sont stockés et indexés par Milvus exécuté au sein de Snowpark Container Services. Les utilisateurs peuvent ensuite effectuer une recherche de similarité vectorielle directement dans l’écosystème Snowflake, permettant des applications d’IA comme la RAG sans déplacer les données hors de la plateforme.

  • Guide étape par étape

    1. Obtenir les informations du compte et se connecter

    Téléchargez le client SPCS SnowSQL, puis connectez-vous à votre compte :

    snowsql -a ${instance_name} -u ${user_name}
    

    La règle de ${instance_name} est ${org_name}-${acct_name}. Les informations pertinentes peuvent être obtenues en vous connectant à app.snowflake.com et en consultant les informations du compte personnel.

    2. Configurer le rôle et les privilèges

    Configurez l’intégration OAUTH et créez un rôle pour le service :

    USE ROLE ACCOUNTADMIN;
    CREATE SECURITY INTEGRATION SNOWSERVICES_INGRESS_OAUTH
      TYPE=oauth
      OAUTH_CLIENT=snowservices_ingress
      ENABLED=true;
    
    USE ROLE ACCOUNTADMIN;
    GRANT BIND SERVICE ENDPOINT ON ACCOUNT TO ROLE SYSADMIN;
    
    USE ROLE SECURITYADMIN;
    CREATE ROLE MILVUS_ROLE;
    
    USE ROLE USERADMIN;
    CREATE USER milvus_user
      PASSWORD='milvususerok'
      DEFAULT_ROLE = MILVUS_ROLE
      DEFAULT_SECONDARY_ROLES = ('ALL')
      MUST_CHANGE_PASSWORD = FALSE;
    
    USE ROLE SECURITYADMIN;
    GRANT ROLE MILVUS_ROLE TO USER milvus_user;
    

    3. Créer la configuration de stockage des données

    Créez l’entrepôt, la base de données, le référentiel d’images et les stages :

    USE ROLE SYSADMIN;
    CREATE OR REPLACE WAREHOUSE MILVUS_WAREHOUSE WITH
    WAREHOUSE_SIZE='X-SMALL'
    AUTO_SUSPEND = 180
    AUTO_RESUME = true
    INITIALLY_SUSPENDED=false;
    
    USE ROLE SYSADMIN;
    CREATE DATABASE IF NOT EXISTS MILVUS_DEMO;
    USE DATABASE MILVUS_DEMO;
    CREATE IMAGE REPOSITORY MILVUS_DEMO.PUBLIC.MILVUS_REPO;
    CREATE OR REPLACE STAGE YAML_STAGE;
    CREATE OR REPLACE STAGE DATA ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
    CREATE OR REPLACE STAGE FILES ENCRYPTION = (TYPE = 'SNOWFLAKE_SSE');
    

    Accordez les privilèges de rôle et configurez l’ACL :

    USE ROLE SECURITYADMIN;
    GRANT ALL PRIVILEGES ON DATABASE MILVUS_DEMO TO MILVUS_ROLE;
    GRANT ALL PRIVILEGES ON SCHEMA MILVUS_DEMO.PUBLIC TO MILVUS_ROLE;
    GRANT ALL PRIVILEGES ON WAREHOUSE MILVUS_WAREHOUSE TO MILVUS_ROLE;
    GRANT ALL PRIVILEGES ON STAGE MILVUS_DEMO.PUBLIC.FILES TO MILVUS_ROLE;
    
    USE ROLE ACCOUNTADMIN;
    USE DATABASE MILVUS_DEMO;
    USE SCHEMA PUBLIC;
    CREATE NETWORK RULE allow_all_rule
    TYPE = 'HOST_PORT'
    MODE= 'EGRESS'
    VALUE_LIST = ('0.0.0.0:443','0.0.0.0:80');
    
    CREATE EXTERNAL ACCESS INTEGRATION allow_all_eai
    ALLOWED_NETWORK_RULES=(allow_all_rule)
    ENABLED=TRUE;
    
    GRANT USAGE ON INTEGRATION allow_all_eai TO ROLE SYSADMIN;
    

    4. Construire et pousser les images Docker

    Construisez les images Milvus et Jupyter localement à l’aide de la configuration de ce repo :

    cd ${repo_git_root_path}
    docker build --rm --no-cache --platform linux/amd64 -t milvus ./images/milvus
    docker build --rm --no-cache --platform linux/amd64 -t jupyter ./images/jupyter
    

    Taguez et poussez les images vers SPCS :

    docker login ${instance_name}.registry.snowflakecomputing.com -u ${user_name}
    
    docker tag milvus ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/milvus
    docker tag jupyter ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/jupyter
    
    docker push ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/milvus
    docker push ${instance_name}.registry.snowflakecomputing.com/milvus_demo/public/milvus_repo/jupyter
    

    5. Créer les pools de calcul et démarrer les services

    Créez les pools de calcul et téléversez les fichiers de spécification :

    USE ROLE SYSADMIN;
    CREATE COMPUTE POOL IF NOT EXISTS MILVUS_COMPUTE_POOL
      MIN_NODES = 1
      MAX_NODES = 1
      INSTANCE_FAMILY = CPU_X64_S
      AUTO_RESUME = true;
    CREATE COMPUTE POOL IF NOT EXISTS JUPYTER_COMPUTE_POOL
      MIN_NODES = 1
      MAX_NODES = 1
      INSTANCE_FAMILY = CPU_X64_S
      AUTO_RESUME = true;
    

    Téléversez les fichiers de spécification et créez les services :

    PUT file://${path/to/jupyter.yaml} @yaml_stage overwrite=true auto_compress=false;
    PUT file://${path/to/milvus.yaml} @yaml_stage overwrite=true auto_compress=false;
    
    USE ROLE SYSADMIN;
    USE DATABASE MILVUS_DEMO;
    USE SCHEMA PUBLIC;
    
    CREATE SERVICE MILVUS
      IN COMPUTE POOL MILVUS_COMPUTE_POOL
      FROM @YAML_STAGE
      SPEC='milvus.yaml'
      MIN_INSTANCES=1
      MAX_INSTANCES=1;
    
    CREATE SERVICE JUPYTER
      IN COMPUTE POOL JUPYTER_COMPUTE_POOL
      FROM @YAML_STAGE
      SPEC='jupyter.yaml'
      MIN_INSTANCES=1
      MAX_INSTANCES=1;
    

    6. Utiliser le Notebook

    Accordez les autorisations et accédez au notebook Jupyter :

    USE ROLE SECURITYADMIN;
    GRANT USAGE ON SERVICE MILVUS_DEMO.PUBLIC.JUPYTER TO ROLE MILVUS_ROLE;
    
    USE ROLE SYSADMIN;
    SHOW ENDPOINTS IN SERVICE MILVUS_DEMO.PUBLIC.JUPYTER;
    

    Notez le ingress_url, ouvrez-le dans un navigateur et connectez-vous avec le compte milvus_user. Ouvrez TestMilvus.ipynb pour essayer Milvus avec des opérations de recherche vectorielle.

    7. Nettoyer

    Après vérification, nettoyez les services, rôles et ressources de données :

    USE ROLE ACCOUNTADMIN;
    DROP USER milvus_user;
    
    USE ROLE SYSADMIN;
    DROP SERVICE MILVUS;
    DROP SERVICE JUPYTER;
    DROP COMPUTE POOL MILVUS_COMPUTE_POOL;
    DROP COMPUTE POOL JUPYTER_COMPUTE_POOL;
    DROP IMAGE REPOSITORY MILVUS_DEMO.PUBLIC.MILVUS_REPO;
    DROP DATABASE MILVUS_DEMO;
    DROP WAREHOUSE MILVUS_WAREHOUSE;
    
    USE ROLE ACCOUNTADMIN;
    DROP ROLE MILVUS_ROLE;
    DROP SECURITY INTEGRATION SNOWSERVICES_INGRESS_OAUTH;
    
  • En savoir plus